diff --git a/RPK Apps.xlsx b/RPK Apps.xlsx index 347f9e2..537a915 100644 Binary files a/RPK Apps.xlsx and b/RPK Apps.xlsx differ diff --git a/RPK_Packages_Inventory_2026-09-20.xlsx b/RPK_Packages_Inventory_2026-09-20.xlsx new file mode 100644 index 0000000..9308848 Binary files /dev/null and b/RPK_Packages_Inventory_2026-09-20.xlsx differ diff --git a/Samples/xReleaseAssistant.json b/Samples/xReleaseAssistant.json new file mode 100644 index 0000000..586bc4f --- /dev/null +++ b/Samples/xReleaseAssistant.json @@ -0,0 +1,1594 @@ +{ + "environments": [ + { + "id": "env-dev", + "name": "توسعه (Dev)", + "description": "محیط توسعه و تست اولیه", + "backgroundColor": "#38a169", + "textColor": "#ffffff" + }, + { + "id": "env-staging", + "name": "پیش‌تولید (Staging)", + "description": "محیط پیش از تولید", + "backgroundColor": "#dd6b20", + "textColor": "#ffffff" + }, + { + "id": "env-prod", + "name": "تولید (Production)", + "description": "محیط عملیاتی اصلی", + "backgroundColor": "#e53e3e", + "textColor": "#ffffff" + }, + { + "id": "env-uat", + "name": "تست پذیرش (UAT)", + "description": "محیط تست کاربر", + "backgroundColor": "#3182ce", + "textColor": "#ffffff" + }, + { + "id": "env-dr", + "name": "بازیابی فاجعه (DR)", + "description": "محیط Disaster Recovery", + "backgroundColor": "#805ad5", + "textColor": "#ffffff" + } + ], + "products": [ + { + "id": "prod-1001", + "title": "سامانه بانکداری الکترونیک", + "description": "پلتفرم جامع بانکداری دیجیتال", + "metadata": { + "createdAt": "2026-01-15T10:00:00Z", + "owner": "علی محمدی" + }, + "projects": [ + { + "id": "proj-2001", + "title": "API Gateway", + "type": "backend", + "description": "درگاه ورودی اصلی", + "repositoryUrl": "https://git.example.com/api-gateway", + "metadata": { + "createdAt": "2026-01-15T10:00:00Z", + "owner": "رضا احمدی", + "framework": ".NET 8", + "language": "C#" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3001", + "environmentId": "env-dev", + "version": "2.1.0", + "deploymentDate": "2026-09-18T14:30:00Z", + "releaseNotes": "افزودن پشتیبانی از OAuth2", + "status": "active", + "requiredDeployments": [] + }, + { + "id": "dep-3002", + "environmentId": "env-dev", + "version": "2.0.5", + "deploymentDate": "2026-09-10T10:00:00Z", + "releaseNotes": "رفع باگ احراز هویت", + "status": "archived", + "archivedAt": "2026-09-18T15:00:00Z", + "requiredDeployments": [] + }, + { + "id": "dep-3003", + "environmentId": "env-staging", + "version": "2.1.0", + "deploymentDate": "2026-09-19T09:00:00Z", + "releaseNotes": "آماده برای تست", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2002", + "title": "سرویس احراز هویت", + "type": "service", + "description": "مدیریت کاربران و توکن - سرویس مرکزی احراز هویت برای کل سازمان", + "repositoryUrl": "https://git.example.com/auth-service", + "metadata": { + "createdAt": "2026-01-20T10:00:00Z", + "owner": "سارا کریمی", + "framework": "Spring Boot", + "language": "Java" + }, + "dependencies": ["proj-2001"], + "deployments": [ + { + "id": "dep-3004", + "environmentId": "env-dev", + "version": "1.5.2", + "deploymentDate": "2026-09-15T11:00:00Z", + "releaseNotes": "بهبود عملکرد", + "status": "active", + "requiredDeployments": [ + { + "projectId": "proj-2001", + "deploymentId": "dep-3001" + } + ] + } + ] + }, + { + "id": "proj-2003", + "title": "پایگاه داده مشتریان", + "type": "database", + "description": "ذخیره اطلاعات مشتریان", + "repositoryUrl": "https://git.example.com/customer-db", + "metadata": { + "createdAt": "2026-01-25T10:00:00Z", + "framework": "PostgreSQL", + "language": "SQL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3005", + "environmentId": "env-prod", + "version": "3.0.0", + "deploymentDate": "2026-08-01T08:00:00Z", + "releaseNotes": "نسخه پایدار", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2004", + "title": "اپلیکیشن موبایل", + "type": "mobile", + "description": "نسخه موبایل بانکداری", + "repositoryUrl": "https://git.example.com/mobile-app", + "metadata": { + "createdAt": "2026-02-01T10:00:00Z", + "owner": "مریم حسینی", + "framework": "Flutter", + "language": "Dart" + }, + "dependencies": ["proj-2001", "proj-2002"], + "deployments": [] + } + ] + }, + { + "id": "prod-1002", + "title": "فروشگاه آنلاین", + "description": "پلتفرم تجارت الکترونیک", + "metadata": { + "createdAt": "2026-02-10T10:00:00Z", + "owner": "حسن رضایی" + }, + "projects": [ + { + "id": "proj-2005", + "title": "وب‌سایت فرانت‌اند", + "type": "frontend", + "description": "رابط کاربری فروشگاه", + "repositoryUrl": "https://git.example.com/shop-frontend", + "metadata": { + "createdAt": "2026-02-10T10:00:00Z", + "owner": "زهرا موسوی", + "framework": "Angular 17", + "language": "TypeScript" + }, + "dependencies": ["proj-2006"], + "deployments": [ + { + "id": "dep-3006", + "environmentId": "env-prod", + "version": "4.2.1", + "deploymentDate": "2026-09-20T08:00:00Z", + "releaseNotes": "بهبود UX", + "status": "active", + "requiredDeployments": [] + }, + { + "id": "dep-3007", + "environmentId": "env-prod", + "version": "4.2.0", + "deploymentDate": "2026-09-05T08:00:00Z", + "releaseNotes": "نسخه قبلی", + "status": "archived", + "archivedAt": "2026-09-20T09:00:00Z", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2006", + "title": "سرویس سفارشات", + "type": "backend", + "description": "مدیریت سفارشات و پرداخت", + "repositoryUrl": "https://git.example.com/order-service", + "metadata": { + "createdAt": "2026-02-15T10:00:00Z", + "owner": "امیر تقوی", + "framework": "Node.js", + "language": "JavaScript" + }, + "dependencies": ["proj-2007"], + "deployments": [ + { + "id": "dep-3008", + "environmentId": "env-dev", + "version": "2.3.0", + "deploymentDate": "2026-09-17T14:00:00Z", + "releaseNotes": "افزودن درگاه پرداخت جدید", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2007", + "title": "پایگاه داده محصولات", + "type": "database", + "description": "کاتالوگ محصولات", + "repositoryUrl": "https://git.example.com/product-db", + "metadata": { + "createdAt": "2026-02-20T10:00:00Z", + "framework": "MongoDB", + "language": "JavaScript" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3009", + "environmentId": "env-prod", + "version": "1.8.0", + "deploymentDate": "2026-07-15T10:00:00Z", + "releaseNotes": "بهینه‌سازی کوئری‌ها", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2008", + "title": "سرویس اطلاع‌رسانی", + "type": "service", + "description": "ارسال ایمیل و SMS", + "repositoryUrl": "https://git.example.com/notification-service", + "metadata": { + "createdAt": "2026-02-25T10:00:00Z", + "owner": "فاطمه نوری", + "framework": "Python", + "language": "Python" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3010", + "environmentId": "env-staging", + "version": "1.2.0", + "deploymentDate": "2026-09-16T16:00:00Z", + "releaseNotes": "پشتیبانی از WhatsApp", + "status": "active", + "requiredDeployments": [] + } + ] + } + ] + }, + { + "id": "prod-1003", + "title": "سامانه مدیریت منابع انسانی", + "description": "HRMS جامع", + "metadata": { + "createdAt": "2026-03-01T10:00:00Z", + "owner": "محمد جعفری" + }, + "projects": [ + { + "id": "proj-2009", + "title": "ماژول حضور و غیاب", + "type": "backend", + "description": "ثبت و مدیریت حضور", + "repositoryUrl": "https://git.example.com/attendance", + "metadata": { + "createdAt": "2026-03-01T10:00:00Z", + "owner": "نرگس صادقی", + "framework": ".NET 7", + "language": "C#" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3011", + "environmentId": "env-prod", + "version": "3.1.0", + "deploymentDate": "2026-06-20T09:00:00Z", + "releaseNotes": "نسخه پایدار", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2010", + "title": "ماژول حقوق و دستمزد", + "type": "backend", + "description": "محاسبه حقوق", + "repositoryUrl": "https://git.example.com/payroll", + "metadata": { + "createdAt": "2026-03-05T10:00:00Z", + "owner": "کامران رحیمی", + "framework": ".NET 7", + "language": "C#" + }, + "dependencies": ["proj-2009"], + "deployments": [ + { + "id": "dep-3012", + "environmentId": "env-dev", + "version": "2.0.0-beta", + "deploymentDate": "2026-09-19T11:00:00Z", + "releaseNotes": "نسخه آزمایشی", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2011", + "title": "پورتال کارکنان", + "type": "frontend", + "description": "رابط کاربری کارکنان", + "repositoryUrl": "https://git.example.com/employee-portal", + "metadata": { + "createdAt": "2026-03-10T10:00:00Z", + "owner": "لیلا عباسی", + "framework": "React", + "language": "TypeScript" + }, + "dependencies": ["proj-2009", "proj-2010"], + "deployments": [] + }, + { + "id": "proj-2012", + "title": "زیرساخت سرور", + "type": "infrastructure", + "description": "پیکربندی سرورها", + "repositoryUrl": "https://git.example.com/infra", + "metadata": { + "createdAt": "2026-03-15T10:00:00Z", + "framework": "Terraform", + "language": "HCL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3013", + "environmentId": "env-prod", + "version": "1.0.0", + "deploymentDate": "2026-05-01T08:00:00Z", + "releaseNotes": "راه‌اندازی اولیه", + "status": "active", + "requiredDeployments": [] + } + ] + } + ] + }, + { + "id": "prod-1004", + "title": "سامانه مدیریت پروژه", + "description": "Project Management Tool", + "metadata": { + "createdAt": "2026-03-20T10:00:00Z", + "owner": "رضا کاظمی" + }, + "projects": [ + { + "id": "proj-2013", + "title": "API اصلی", + "type": "backend", + "description": "Backend اصلی", + "repositoryUrl": "https://git.example.com/pm-api", + "metadata": { + "createdAt": "2026-03-20T10:00:00Z", + "owner": "مهدی یوسفی", + "framework": "Go", + "language": "Go" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3014", + "environmentId": "env-dev", + "version": "1.4.0", + "deploymentDate": "2026-09-18T10:00:00Z", + "releaseNotes": "افزودن WebSocket", + "status": "active", + "requiredDeployments": [] + }, + { + "id": "dep-3015", + "environmentId": "env-dev", + "version": "1.3.5", + "deploymentDate": "2026-09-12T10:00:00Z", + "releaseNotes": "رفع باگ", + "status": "archived", + "archivedAt": "2026-09-18T11:00:00Z", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2014", + "title": "وب‌اپلیکیشن", + "type": "frontend", + "description": "Frontend اصلی", + "repositoryUrl": "https://git.example.com/pm-web", + "metadata": { + "createdAt": "2026-03-25T10:00:00Z", + "owner": "شیما توکلی", + "framework": "Vue.js", + "language": "TypeScript" + }, + "dependencies": ["proj-2013"], + "deployments": [ + { + "id": "dep-3016", + "environmentId": "env-staging", + "version": "2.1.0", + "deploymentDate": "2026-09-19T15:00:00Z", + "releaseNotes": "بهبود عملکرد", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2015", + "title": "اپلیکیشن موبایل", + "type": "mobile", + "description": "نسخه موبایل", + "repositoryUrl": "https://git.example.com/pm-mobile", + "metadata": { + "createdAt": "2026-04-01T10:00:00Z", + "owner": "پویا مرادی", + "framework": "React Native", + "language": "JavaScript" + }, + "dependencies": ["proj-2013"], + "deployments": [] + }, + { + "id": "proj-2016", + "title": "پایگاه داده", + "type": "database", + "description": "ذخیره داده‌ها", + "repositoryUrl": "https://git.example.com/pm-db", + "metadata": { + "createdAt": "2026-04-05T10:00:00Z", + "framework": "MySQL", + "language": "SQL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3017", + "environmentId": "env-prod", + "version": "2.0.0", + "deploymentDate": "2026-08-10T08:00:00Z", + "releaseNotes": "Migration به MySQL 8", + "status": "active", + "requiredDeployments": [] + } + ] + } + ] + }, + { + "id": "prod-1005", + "title": "سامانه مدیریت محتوا", + "description": "CMS سازمانی", + "metadata": { + "createdAt": "2026-04-10T10:00:00Z" + }, + "projects": [ + { + "id": "proj-2017", + "title": "Engine اصلی", + "type": "backend", + "description": "هسته CMS", + "repositoryUrl": "https://git.example.com/cms-engine", + "metadata": { + "createdAt": "2026-04-10T10:00:00Z", + "owner": "آرش نیکزاد", + "framework": "Django", + "language": "Python" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3018", + "environmentId": "env-prod", + "version": "5.0.0", + "deploymentDate": "2026-07-01T09:00:00Z", + "releaseNotes": "نسخه_MAJOR", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2018", + "title": "پنل مدیریت", + "type": "frontend", + "description": "رابط ادمین", + "repositoryUrl": "https://git.example.com/cms-admin", + "metadata": { + "createdAt": "2026-04-15T10:00:00Z", + "owner": "نگار صالحی", + "framework": "Angular 16", + "language": "TypeScript" + }, + "dependencies": ["proj-2017"], + "deployments": [ + { + "id": "dep-3019", + "environmentId": "env-dev", + "version": "3.2.1", + "deploymentDate": "2026-09-17T13:00:00Z", + "releaseNotes": "بهبود UI", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2019", + "title": "سرویس مدیا", + "type": "service", + "description": "مدیریت فایل‌ها", + "repositoryUrl": "https://git.example.com/cms-media", + "metadata": { + "createdAt": "2026-04-20T10:00:00Z", + "framework": "Node.js", + "language": "JavaScript" + }, + "dependencies": [], + "deployments": [] + }, + { + "id": "proj-2020", + "title": "پایگاه داده محتوا", + "type": "database", + "description": "ذخیره محتوا", + "repositoryUrl": "https://git.example.com/cms-db", + "metadata": { + "createdAt": "2026-04-25T10:00:00Z", + "framework": "Elasticsearch", + "language": "JSON" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3020", + "environmentId": "env-prod", + "version": "1.5.0", + "deploymentDate": "2026-06-15T10:00:00Z", + "releaseNotes": "بهینه‌سازی جستجو", + "status": "active", + "requiredDeployments": [] + } + ] + } + ] + }, + { + "id": "prod-1006", + "title": "سامانه تحلیل داده", + "description": "Data Analytics Platform", + "metadata": { + "createdAt": "2026-05-01T10:00:00Z", + "owner": "سعید امینی" + }, + "projects": [ + { + "id": "proj-2021", + "title": "Data Pipeline", + "type": "backend", + "description": "پردازش داده‌ها - سرویس مرکزی ETL برای کل سازمان", + "repositoryUrl": "https://git.example.com/data-pipeline", + "metadata": { + "createdAt": "2026-05-01T10:00:00Z", + "owner": "مینا قاسمی", + "framework": "Apache Spark", + "language": "Scala" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3021", + "environmentId": "env-prod", + "version": "2.4.0", + "deploymentDate": "2026-08-20T08:00:00Z", + "releaseNotes": "پشتیبانی از Real-time", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2022", + "title": "داشبورد تحلیل", + "type": "frontend", + "description": "نمایش گزارش‌ها - با یکپارچگی داده‌های CMS", + "repositoryUrl": "https://git.example.com/analytics-dashboard", + "metadata": { + "createdAt": "2026-05-05T10:00:00Z", + "owner": "حمید باقری", + "framework": "React", + "language": "TypeScript" + }, + "dependencies": ["proj-2021", "proj-2017"], + "deployments": [ + { + "id": "dep-3022", + "environmentId": "env-staging", + "version": "1.8.0", + "deploymentDate": "2026-09-18T16:00:00Z", + "releaseNotes": "افزودن نمودارهای جدید", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2023", + "title": "Data Warehouse", + "type": "database", + "description": "انبار داده", + "repositoryUrl": "https://git.example.com/data-warehouse", + "metadata": { + "createdAt": "2026-05-10T10:00:00Z", + "framework": "Snowflake", + "language": "SQL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3023", + "environmentId": "env-prod", + "version": "3.0.0", + "deploymentDate": "2026-07-10T09:00:00Z", + "releaseNotes": "Migration کامل", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2024", + "title": "سرویس ML", + "type": "service", + "description": "مدل‌های یادگیری ماشین", + "repositoryUrl": "https://git.example.com/ml-service", + "metadata": { + "createdAt": "2026-05-15T10:00:00Z", + "owner": "الهام شریفی", + "framework": "TensorFlow", + "language": "Python" + }, + "dependencies": ["proj-2021"], + "deployments": [] + } + ] + }, + { + "id": "prod-1007", + "title": "سامانه پیام‌رسان", + "description": "Messaging Platform", + "metadata": { + "createdAt": "2026-05-20T10:00:00Z", + "owner": "جواد ملکی" + }, + "projects": [ + { + "id": "proj-2025", + "title": "Message Broker", + "type": "backend", + "description": "صف پیام", + "repositoryUrl": "https://git.example.com/message-broker", + "metadata": { + "createdAt": "2026-05-20T10:00:00Z", + "owner": "فرزاد حیدری", + "framework": "RabbitMQ", + "language": "Erlang" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3024", + "environmentId": "env-prod", + "version": "4.1.0", + "deploymentDate": "2026-08-05T10:00:00Z", + "releaseNotes": "بهبود throughput", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2026", + "title": "وب‌چت", + "type": "frontend", + "description": "رابط کاربری چت", + "repositoryUrl": "https://git.example.com/webchat", + "metadata": { + "createdAt": "2026-05-25T10:00:00Z", + "owner": "نازنین کمالی", + "framework": "Svelte", + "language": "TypeScript" + }, + "dependencies": ["proj-2025"], + "deployments": [ + { + "id": "dep-3025", + "environmentId": "env-dev", + "version": "2.0.0", + "deploymentDate": "2026-09-19T10:00:00Z", + "releaseNotes": "نسخه جدید با Video Call", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2027", + "title": "اپلیکیشن موبایل", + "type": "mobile", + "description": "نسخه موبایل", + "repositoryUrl": "https://git.example.com/chat-mobile", + "metadata": { + "createdAt": "2026-06-01T10:00:00Z", + "owner": "بهار احمدی", + "framework": "Kotlin", + "language": "Kotlin" + }, + "dependencies": ["proj-2025"], + "deployments": [] + }, + { + "id": "proj-2028", + "title": "سرویس نوتیفیکیشن", + "type": "service", + "description": "ارسال اعلان", + "repositoryUrl": "https://git.example.com/notification", + "metadata": { + "createdAt": "2026-06-05T10:00:00Z", + "framework": "Node.js", + "language": "JavaScript" + }, + "dependencies": ["proj-2025"], + "deployments": [ + { + "id": "dep-3026", + "environmentId": "env-staging", + "version": "1.3.0", + "deploymentDate": "2026-09-16T14:00:00Z", + "releaseNotes": "پشتیبانی از Push", + "status": "active", + "requiredDeployments": [] + } + ] + } + ] + }, + { + "id": "prod-1008", + "title": "سامانه مدیریت ارتباط با مشتری", + "description": "CRM System - با یکپارچگی به سرویس احراز هویت مرکزی", + "metadata": { + "createdAt": "2026-06-10T10:00:00Z", + "owner": "مهرداد سلطانی" + }, + "projects": [ + { + "id": "proj-2029", + "title": "CRM Core", + "type": "backend", + "description": "هسته CRM - وابسته به سرویس احراز هویت مرکزی بانکداری", + "repositoryUrl": "https://git.example.com/crm-core", + "metadata": { + "createdAt": "2026-06-10T10:00:00Z", + "owner": "شیرین پناهی", + "framework": ".NET 8", + "language": "C#" + }, + "dependencies": ["proj-2002"], + "deployments": [ + { + "id": "dep-3027", + "environmentId": "env-prod", + "version": "6.0.0", + "deploymentDate": "2026-07-20T09:00:00Z", + "releaseNotes": "نسخه_MAJOR", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2030", + "title": "پورتال فروش", + "type": "frontend", + "description": "رابط تیم فروش - یکپارچه با وب‌سایت فروشگاه", + "repositoryUrl": "https://git.example.com/crm-sales", + "metadata": { + "createdAt": "2026-06-15T10:00:00Z", + "owner": "کوروش رستمی", + "framework": "Blazor", + "language": "C#" + }, + "dependencies": ["proj-2029", "proj-2005"], + "deployments": [ + { + "id": "dep-3028", + "environmentId": "env-dev", + "version": "3.5.0", + "deploymentDate": "2026-09-18T11:00:00Z", + "releaseNotes": "افزودن گزارش‌های جدید", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2031", + "title": "پایگاه داده مشتریان", + "type": "database", + "description": "اطلاعات مشتریان", + "repositoryUrl": "https://git.example.com/crm-db", + "metadata": { + "createdAt": "2026-06-20T10:00:00Z", + "framework": "SQL Server", + "language": "SQL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3029", + "environmentId": "env-prod", + "version": "2.2.0", + "deploymentDate": "2026-08-15T08:00:00Z", + "releaseNotes": "بهینه‌سازی ایندکس‌ها", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2032", + "title": "سرویس ایمیل", + "type": "service", + "description": "ارسال ایمیل مارکتینگ", + "repositoryUrl": "https://git.example.com/crm-email", + "metadata": { + "createdAt": "2026-06-25T10:00:00Z", + "owner": "ترانه موسوی", + "framework": "Python", + "language": "Python" + }, + "dependencies": ["proj-2029"], + "deployments": [] + } + ] + }, + { + "id": "prod-1009", + "title": "سامانه مدیریت انبار", + "description": "Warehouse Management", + "metadata": { + "createdAt": "2026-07-01T10:00:00Z", + "owner": "یحیی نوری" + }, + "projects": [ + { + "id": "proj-2033", + "title": "WMS Backend", + "type": "backend", + "description": "منطق انبار - سرویس مرکزی مدیریت انبار", + "repositoryUrl": "https://git.example.com/wms-backend", + "metadata": { + "createdAt": "2026-07-01T10:00:00Z", + "owner": "پریسا فتحی", + "framework": "Java", + "language": "Java" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3030", + "environmentId": "env-prod", + "version": "4.3.0", + "deploymentDate": "2026-08-25T10:00:00Z", + "releaseNotes": "پشتیبانی از Barcode", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2034", + "title": "اپلیکیشن انباردار", + "type": "mobile", + "description": "اسکنر موبایل", + "repositoryUrl": "https://git.example.com/wms-mobile", + "metadata": { + "createdAt": "2026-07-05T10:00:00Z", + "owner": "سینا قاسمی", + "framework": "Flutter", + "language": "Dart" + }, + "dependencies": ["proj-2033"], + "deployments": [ + { + "id": "dep-3031", + "environmentId": "env-staging", + "version": "2.1.0", + "deploymentDate": "2026-09-17T15:00:00Z", + "releaseNotes": "بهبود اسکن", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2035", + "title": "پایگاه داده انبار", + "type": "database", + "description": "موجودی و کالا", + "repositoryUrl": "https://git.example.com/wms-db", + "metadata": { + "createdAt": "2026-07-10T10:00:00Z", + "framework": "Oracle", + "language": "SQL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3032", + "environmentId": "env-prod", + "version": "3.1.0", + "deploymentDate": "2026-07-30T09:00:00Z", + "releaseNotes": "Partitioning جداول", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2036", + "title": "سرویس گزارش‌گیری", + "type": "service", + "description": "گزارش‌های انبار", + "repositoryUrl": "https://git.example.com/wms-report", + "metadata": { + "createdAt": "2026-07-15T10:00:00Z", + "framework": "Node.js", + "language": "JavaScript" + }, + "dependencies": ["proj-2033"], + "deployments": [] + } + ] + }, + { + "id": "prod-1010", + "title": "سامانه مدیریت مالی", + "description": "Financial Management", + "metadata": { + "createdAt": "2026-07-20T10:00:00Z", + "owner": "بهزاد طاهری" + }, + "projects": [ + { + "id": "proj-2037", + "title": "حسابداری", + "type": "backend", + "description": "ماژول حسابداری", + "repositoryUrl": "https://git.example.com/accounting", + "metadata": { + "createdAt": "2026-07-20T10:00:00Z", + "owner": "مونا کریمی", + "framework": ".NET 8", + "language": "C#" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3033", + "environmentId": "env-prod", + "version": "5.2.0", + "deploymentDate": "2026-08-30T08:00:00Z", + "releaseNotes": "پشتیبانی از مالیات جدید", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2038", + "title": "پورتال مالی", + "type": "frontend", + "description": "رابط کاربری مالی", + "repositoryUrl": "https://git.example.com/finance-portal", + "metadata": { + "createdAt": "2026-07-25T10:00:00Z", + "owner": "رامین جعفری", + "framework": "Angular 17", + "language": "TypeScript" + }, + "dependencies": ["proj-2037"], + "deployments": [ + { + "id": "dep-3034", + "environmentId": "env-dev", + "version": "3.0.0", + "deploymentDate": "2026-09-19T09:00:00Z", + "releaseNotes": "نسخه جدید", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2039", + "title": "پایگاه داده مالی", + "type": "database", + "description": "تراکنش‌ها", + "repositoryUrl": "https://git.example.com/finance-db", + "metadata": { + "createdAt": "2026-07-30T10:00:00Z", + "framework": "PostgreSQL", + "language": "SQL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3035", + "environmentId": "env-prod", + "version": "4.0.0", + "deploymentDate": "2026-08-10T10:00:00Z", + "releaseNotes": "Archive داده‌های قدیمی", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2040", + "title": "سرویس گزارش مالی", + "type": "service", + "description": "گزارش‌های مالی - با استفاده از Data Pipeline مرکزی", + "repositoryUrl": "https://git.example.com/finance-report", + "metadata": { + "createdAt": "2026-08-01T10:00:00Z", + "owner": "گلناز حسینی", + "framework": "Python", + "language": "Python" + }, + "dependencies": ["proj-2037", "proj-2021"], + "deployments": [] + } + ] + }, + { + "id": "prod-1011", + "title": "سامانه مدیریت زنجیره تأمین", + "description": "Supply Chain Management", + "metadata": { + "createdAt": "2026-08-05T10:00:00Z", + "owner": "فرهاد محمدی" + }, + "projects": [ + { + "id": "proj-2041", + "title": "SCM Core", + "type": "backend", + "description": "هسته SCM", + "repositoryUrl": "https://git.example.com/scm-core", + "metadata": { + "createdAt": "2026-08-05T10:00:00Z", + "owner": "آتنا رضایی", + "framework": "Spring Boot", + "language": "Java" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3036", + "environmentId": "env-prod", + "version": "3.4.0", + "deploymentDate": "2026-09-01T09:00:00Z", + "releaseNotes": "بهینه‌سازی الگوریتم", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2042", + "title": "پورتال تأمین‌کنندگان", + "type": "frontend", + "description": "رابط تأمین‌کنندگان", + "repositoryUrl": "https://git.example.com/scm-supplier", + "metadata": { + "createdAt": "2026-08-10T10:00:00Z", + "owner": "کیوان احمدی", + "framework": "React", + "language": "TypeScript" + }, + "dependencies": ["proj-2041"], + "deployments": [ + { + "id": "dep-3037", + "environmentId": "env-staging", + "version": "2.2.0", + "deploymentDate": "2026-09-18T14:00:00Z", + "releaseNotes": "بهبود UX", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2043", + "title": "پایگاه داده SCM", + "type": "database", + "description": "داده‌های زنجیره", + "repositoryUrl": "https://git.example.com/scm-db", + "metadata": { + "createdAt": "2026-08-15T10:00:00Z", + "framework": "MongoDB", + "language": "JavaScript" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3038", + "environmentId": "env-prod", + "version": "2.5.0", + "deploymentDate": "2026-08-20T10:00:00Z", + "releaseNotes": "Sharding", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2044", + "title": "سرویس لجستیک", + "type": "service", + "description": "مدیریت حمل‌ونقل - وابسته به WMS Backend", + "repositoryUrl": "https://git.example.com/scm-logistics", + "metadata": { + "createdAt": "2026-08-20T10:00:00Z", + "owner": "سپهر نوری", + "framework": "Node.js", + "language": "JavaScript" + }, + "dependencies": ["proj-2041", "proj-2033"], + "deployments": [] + } + ] + }, + { + "id": "prod-1012", + "title": "سامانه مدیریت آموزش", + "description": "Learning Management System", + "metadata": { + "createdAt": "2026-08-25T10:00:00Z", + "owner": "نگار صادقی" + }, + "projects": [ + { + "id": "proj-2045", + "title": "LMS Backend", + "type": "backend", + "description": "هسته LMS", + "repositoryUrl": "https://git.example.com/lms-backend", + "metadata": { + "createdAt": "2026-08-25T10:00:00Z", + "owner": "میلاد تقوی", + "framework": "Django", + "language": "Python" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3039", + "environmentId": "env-prod", + "version": "4.1.0", + "deploymentDate": "2026-09-05T10:00:00Z", + "releaseNotes": "افزودن Video Streaming", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2046", + "title": "پورتال دانشجویان", + "type": "frontend", + "description": "رابط دانشجویان", + "repositoryUrl": "https://git.example.com/lms-student", + "metadata": { + "createdAt": "2026-08-30T10:00:00Z", + "owner": "یاسمن کریمی", + "framework": "Vue.js", + "language": "TypeScript" + }, + "dependencies": ["proj-2045"], + "deployments": [ + { + "id": "dep-3040", + "environmentId": "env-dev", + "version": "2.3.0", + "deploymentDate": "2026-09-19T11:00:00Z", + "releaseNotes": "بهبود تجربه کاربری", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2047", + "title": "پایگاه داده دوره‌ها", + "type": "database", + "description": "محتوای آموزشی", + "repositoryUrl": "https://git.example.com/lms-db", + "metadata": { + "createdAt": "2026-09-01T10:00:00Z", + "framework": "PostgreSQL", + "language": "SQL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3041", + "environmentId": "env-prod", + "version": "3.0.0", + "deploymentDate": "2026-08-25T09:00:00Z", + "releaseNotes": "ساختار جدید", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2048", + "title": "سرویس آزمون", + "type": "service", + "description": "مدیریت آزمون‌ها", + "repositoryUrl": "https://git.example.com/lms-exam", + "metadata": { + "createdAt": "2026-09-05T10:00:00Z", + "owner": "حامد رضایی", + "framework": "Node.js", + "language": "JavaScript" + }, + "dependencies": ["proj-2045"], + "deployments": [] + } + ] + }, + { + "id": "prod-1013", + "title": "سامانه مدیریت بیمارستان", + "description": "Hospital Management System - با احراز هویت متمرکز", + "metadata": { + "createdAt": "2026-09-01T10:00:00Z", + "owner": "دکتر محمدی" + }, + "projects": [ + { + "id": "proj-2049", + "title": "HIS Core", + "type": "backend", + "description": "هسته HIS", + "repositoryUrl": "https://git.example.com/his-core", + "metadata": { + "createdAt": "2026-09-01T10:00:00Z", + "owner": "دکتر احمدی", + "framework": ".NET 8", + "language": "C#" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3042", + "environmentId": "env-prod", + "version": "5.0.0", + "deploymentDate": "2026-09-10T08:00:00Z", + "releaseNotes": "نسخه_MAJOR", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2050", + "title": "پورتال پزشکان", + "type": "frontend", + "description": "رابط پزشکان - با احراز هویت از سرویس مرکزی بانکداری", + "repositoryUrl": "https://git.example.com/his-doctor", + "metadata": { + "createdAt": "2026-09-05T10:00:00Z", + "owner": "دکتر کریمی", + "framework": "Angular 17", + "language": "TypeScript" + }, + "dependencies": ["proj-2049", "proj-2002"], + "deployments": [ + { + "id": "dep-3043", + "environmentId": "env-staging", + "version": "3.1.0", + "deploymentDate": "2026-09-18T10:00:00Z", + "releaseNotes": "افزودن نسخه الکترونیک", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2051", + "title": "پایگاه داده بیماران", + "type": "database", + "description": "اطلاعات بیماران", + "repositoryUrl": "https://git.example.com/his-db", + "metadata": { + "createdAt": "2026-09-10T10:00:00Z", + "framework": "Oracle", + "language": "SQL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3044", + "environmentId": "env-prod", + "version": "4.2.0", + "deploymentDate": "2026-09-01T09:00:00Z", + "releaseNotes": "رمزنگاری داده‌ها", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2052", + "title": "سرویس نوبت‌دهی", + "type": "service", + "description": "مدیریت نوبت‌ها", + "repositoryUrl": "https://git.example.com/his-appointment", + "metadata": { + "createdAt": "2026-09-15T10:00:00Z", + "owner": "دکتر رضایی", + "framework": "Python", + "language": "Python" + }, + "dependencies": ["proj-2049"], + "deployments": [] + } + ] + }, + { + "id": "prod-1014", + "title": "سامانه مدیریت حمل‌ونقل", + "description": "Transportation Management", + "metadata": { + "createdAt": "2026-09-10T10:00:00Z", + "owner": "مهندس موسوی" + }, + "projects": [ + { + "id": "proj-2053", + "title": "TMS Backend", + "type": "backend", + "description": "هسته TMS", + "repositoryUrl": "https://git.example.com/tms-backend", + "metadata": { + "createdAt": "2026-09-10T10:00:00Z", + "owner": "مهندس تقوی", + "framework": "Go", + "language": "Go" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3045", + "environmentId": "env-prod", + "version": "2.0.0", + "deploymentDate": "2026-09-15T10:00:00Z", + "releaseNotes": "نسخه اولیه", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2054", + "title": "اپلیکیشن رانندگان", + "type": "mobile", + "description": "نسخه موبایل رانندگان", + "repositoryUrl": "https://git.example.com/tms-driver", + "metadata": { + "createdAt": "2026-09-12T10:00:00Z", + "owner": "مهندس نوری", + "framework": "Flutter", + "language": "Dart" + }, + "dependencies": ["proj-2053"], + "deployments": [ + { + "id": "dep-3046", + "environmentId": "env-dev", + "version": "1.2.0", + "deploymentDate": "2026-09-19T14:00:00Z", + "releaseNotes": "GPS Tracking", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2055", + "title": "پایگاه داده حمل‌ونقل", + "type": "database", + "description": "داده‌های لجستیک", + "repositoryUrl": "https://git.example.com/tms-db", + "metadata": { + "createdAt": "2026-09-15T10:00:00Z", + "framework": "PostgreSQL", + "language": "SQL" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3047", + "environmentId": "env-prod", + "version": "1.5.0", + "deploymentDate": "2026-09-12T09:00:00Z", + "releaseNotes": "بهینه‌سازی", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2056", + "title": "سرویس مسیریابی", + "type": "service", + "description": "محاسبه مسیر", + "repositoryUrl": "https://git.example.com/tms-routing", + "metadata": { + "createdAt": "2026-09-18T10:00:00Z", + "owner": "مهندس جعفری", + "framework": "Python", + "language": "Python" + }, + "dependencies": ["proj-2053"], + "deployments": [] + } + ] + }, + { + "id": "prod-1015", + "title": "سامانه مدیریت انرژی", + "description": "Energy Management System", + "metadata": { + "createdAt": "2026-09-15T10:00:00Z", + "owner": "مهندس کاظمی" + }, + "projects": [ + { + "id": "proj-2057", + "title": "EMS Backend", + "type": "backend", + "description": "هسته EMS", + "repositoryUrl": "https://git.example.com/ems-backend", + "metadata": { + "createdAt": "2026-09-15T10:00:00Z", + "owner": "مهندس یوسفی", + "framework": "Java", + "language": "Java" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3048", + "environmentId": "env-prod", + "version": "1.0.0", + "deploymentDate": "2026-09-18T08:00:00Z", + "releaseNotes": "نسخه اولیه", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2058", + "title": "داشبورد مانیتورینگ", + "type": "frontend", + "description": "نمایش مصرف انرژی", + "repositoryUrl": "https://git.example.com/ems-dashboard", + "metadata": { + "createdAt": "2026-09-16T10:00:00Z", + "owner": "مهندس توکلی", + "framework": "React", + "language": "TypeScript" + }, + "dependencies": ["proj-2057"], + "deployments": [ + { + "id": "dep-3049", + "environmentId": "env-staging", + "version": "1.1.0", + "deploymentDate": "2026-09-19T16:00:00Z", + "releaseNotes": "Real-time monitoring", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2059", + "title": "پایگاه داده سنسورها", + "type": "database", + "description": "داده‌های IoT", + "repositoryUrl": "https://git.example.com/ems-db", + "metadata": { + "createdAt": "2026-09-17T10:00:00Z", + "framework": "InfluxDB", + "language": "Flux" + }, + "dependencies": [], + "deployments": [ + { + "id": "dep-3050", + "environmentId": "env-prod", + "version": "1.0.0", + "deploymentDate": "2026-09-17T09:00:00Z", + "releaseNotes": "راه‌اندازی اولیه", + "status": "active", + "requiredDeployments": [] + } + ] + }, + { + "id": "proj-2060", + "title": "سرویس تحلیل مصرف", + "type": "service", + "description": "تحلیل الگوهای مصرف", + "repositoryUrl": "https://git.example.com/ems-analytics", + "metadata": { + "createdAt": "2026-09-18T10:00:00Z", + "owner": "مهندس مرادی", + "framework": "Python", + "language": "Python" + }, + "dependencies": ["proj-2057"], + "deployments": [] + } + ] + } + ], + "boards": [], + "boardTags": [] +} \ No newline at end of file diff --git a/Samples/xReleaseAssistant_Real_4.json b/Samples/xReleaseAssistant_Real_4.json new file mode 100644 index 0000000..53f88e9 --- /dev/null +++ b/Samples/xReleaseAssistant_Real_4.json @@ -0,0 +1,226 @@ +{ + "environments": [ + { + "id": "env-1789757606914", + "name": "کاوش - توسعه", + "description": "این محیط فقط برای تست عملیاتی توسعه دهندگان است", + "backgroundColor": "#3f94ee", + "textColor": "#ffffff" + }, + { + "id": "env-1789757658261", + "name": "کاوش تست", + "description": "این محیط برای تست محصول توسط تیم های تضمین کیفیت و تحلیل است", + "backgroundColor": "#df3416", + "textColor": "#ffffff" + }, + { + "id": "env-1789757730121", + "name": "کانون - قرمز", + "description": "محیطی برای تست محصولات در فضای کانون", + "backgroundColor": "#ff0000", + "textColor": "#ffffff" + }, + { + "id": "env-1789757791901", + "name": "کانون - آبی", + "description": "محیط انتشار عمومی محصولات در کانون", + "backgroundColor": "#0000ff", + "textColor": "#ffffff" + }, + { + "id": "env-1789757853333", + "name": "سازمان - قرمز", + "description": "محیطی برای تست محصولات در سازمان", + "backgroundColor": "#ff0000", + "textColor": "#ffffff" + }, + { + "id": "env-1789757900213", + "name": "سازمان - آبی", + "description": "محیط انتشار عمومی محصولات در سازمان", + "backgroundColor": "#0000ff", + "textColor": "#ffffff" + } + ], + "products": [ + { + "id": "prod-1789906178306", + "title": "زیرساخت", + "description": "کلیه پروژه هایی که بعنوان زیرساخت برای سایر محصولات شرکت مورد استفاده قرار می گیرند ...", + "metadata": { + "createdAt": "2026-09-20T12:09:38.306Z", + "owner": "تیم آتنا", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789906450942", + "title": "کنترل سنتر", + "description": "مدیریت تنظیمات و ارائه اطلاعات پایه برای پروژه های مختلف ...", + "metadata": { + "createdAt": "2026-09-20T12:14:10.942Z", + "owner": "تیم آتنا", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789906580440", + "title": "مانا", + "description": "مدیریت ارجاع نقشه برداران ایران", + "metadata": { + "createdAt": "2026-09-20T12:16:20.440Z", + "owner": "تیم کاداستر", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789906612889", + "title": "مدام", + "description": "مدیریت داده های مکانی", + "metadata": { + "createdAt": "2026-09-20T12:16:52.889Z", + "owner": "تیم کاداستر", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789906649432", + "title": "مدیریت قرارداد ها", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:17:29.432Z", + "owner": "تیم کاداستر", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907070679", + "title": "پیام رسان", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:24:30.679Z", + "owner": "تیم کاداستر", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907660064", + "title": "تفکیک آپارتمانی - کاداستر", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:34:20.064Z", + "owner": "تیم کاداستر", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907676416", + "title": "ابزار WebGIS", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:34:36.416Z", + "owner": "تیم کاداستر", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907707481", + "title": "سرویس های املاک", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:35:07.481Z", + "owner": "تیم کاداستر", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907737585", + "title": "ساماندهی", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:35:37.585Z", + "owner": "تیم املاک", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907760114", + "title": "تعیین تکلیف", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:36:00.114Z", + "owner": "تیم املاک", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907772450", + "title": "دفترچه ای", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:36:12.450Z", + "owner": "تیم املاک", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907792986", + "title": "تفکیک آپارتمانی", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:36:32.986Z", + "owner": "تیم املاک", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907850075", + "title": "ثبت اطلاعات سامانه املاک", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:37:30.075Z", + "owner": "تیم املاک", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907867139", + "title": "املاک من", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:37:47.139Z", + "owner": "تیم املاک", + "customFields": {} + }, + "projects": [] + }, + { + "id": "prod-1789907887203", + "title": "شروع از کارگزاری", + "description": "", + "metadata": { + "createdAt": "2026-09-20T12:38:07.203Z", + "owner": "تیم املاک", + "customFields": {} + }, + "projects": [] + } + ], + "boards": [], + "boardTags": [] +} \ No newline at end of file diff --git a/xReleaseAssistant.html b/xReleaseAssistant.html index b70c5c0..183e697 100644 --- a/xReleaseAssistant.html +++ b/xReleaseAssistant.html @@ -3017,6 +3017,12 @@ +
+ 👤 + +
@@ -3296,32 +3302,38 @@
@@ -3505,8 +3524,8 @@
@@ -3524,8 +3543,8 @@
@@ -3543,8 +3562,8 @@
@@ -3581,8 +3600,8 @@
@@ -4283,9 +4302,10 @@ }; /* ==================== TOOLBAR MANAGER ==================== */ const ToolbarManager = { - currentFilters: { query: "", typeFilter: "", envFilter: "" }, + currentFilters: { query: "", typeFilter: "", envFilter: "", ownerFilter: "" }, init() { this.populateEnvironmentFilter(); + this.populateOwnerFilter(); this.bindEvents(); this.updateStats(); }, @@ -4298,10 +4318,28 @@ .map((e) => ``) .join(""); }, + populateOwnerFilter() { + const s = document.getElementById("filterOwner"); + if (!s) return; + const owners = new Set(); + (projectData.appData.products || []).forEach((p) => { + const owner = p.metadata?.owner?.trim(); + if (owner) owners.add(owner); + }); + const sortedOwners = Array.from(owners).sort((a, b) => + a.localeCompare(b, "fa"), + ); + s.innerHTML = + '' + + sortedOwners + .map((o) => ``) + .join(""); + }, bindEvents() { const si = document.getElementById("toolbarSearch"), ft = document.getElementById("filterType"), - fe = document.getElementById("filterEnvironment"); + fe = document.getElementById("filterEnvironment"), + fo = document.getElementById("filterOwner"); if (si) si.addEventListener("input", () => { this.applyFilters(); @@ -4317,6 +4355,11 @@ this.applyFilters(); refreshUI(); }); + if (fo) + fo.addEventListener("change", () => { + this.applyFilters(); + refreshUI(); + }); }, applyFilters() { this.currentFilters = { @@ -4324,8 +4367,8 @@ .trim() .toLowerCase(), typeFilter: document.getElementById("filterType")?.value || "", - envFilter: - document.getElementById("filterEnvironment")?.value || "", + envFilter: document.getElementById("filterEnvironment")?.value || "", + ownerFilter: document.getElementById("filterOwner")?.value || "", }; this.updateStats(); }, @@ -4350,7 +4393,15 @@ }, shouldShowProduct(product) { const f = this.currentFilters; + if (!f.query && !f.typeFilter && !f.envFilter && !f.ownerFilter) return true; + + if (f.ownerFilter) { + const prodOwner = product.metadata?.owner?.trim(); + if (prodOwner !== f.ownerFilter) return false; + } + if (!f.query && !f.typeFilter && !f.envFilter) return true; + return (product.projects || []).some((pr) => { const mq = !f.query || @@ -4362,6 +4413,7 @@ (pr.deployments || []) .filter((d) => d.status === "active") .some((d) => d.environmentId === f.envFilter); + return mq && mt && me; }); }, @@ -4891,6 +4943,7 @@ updateProjectUI(); renderToolGroups(); ToolbarManager.populateEnvironmentFilter(); + ToolbarManager.populateOwnerFilter(); refreshUI(); showToast("📂 بارگذاری شد", "success"); } catch (err) { @@ -4913,6 +4966,7 @@ }; AutosaveManager.clear(); ToolbarManager.populateEnvironmentFilter(); + ToolbarManager.populateOwnerFilter(); refreshUI(); showToast("🗑️ پاکسازی شد", "success"); }, @@ -5132,7 +5186,13 @@ return null; }, getActiveDeployments(proj) { - return (proj.deployments || []).filter((d) => d.status === "active"); + return (proj.deployments || []) + .filter((d) => d.status === "active") + .sort((a, b) => { + const dateA = a.deploymentDate ? new Date(a.deploymentDate).getTime() : 0; + const dateB = b.deploymentDate ? new Date(b.deploymentDate).getTime() : 0; + return dateB - dateA; + }); }, getEnvironmentsWithoutDeployment(proj) { const allEnvIds = projectData.appData.environments.map((e) => e.id); @@ -5154,7 +5214,9 @@ (s, pr) => s + this.getActiveDeployments(pr).length, 0, ); + let html = `
ℹ️ اطلاعات محصول
عنوان${prod.title}
توضیحات${prod.description || "—"}
تاریخ ایجاد${prod.metadata?.createdAt ? new Date(prod.metadata.createdAt).toLocaleDateString("fa-IR") : "—"}
مالک${prod.metadata?.owner || "—"}
تعداد پروژه${projects.length}
استقرارهای فعال${totalDeploys}
🌿 پروژه‌ها (${projects.length})
`; + if (projects.length === 0) { html += '
🌿 هیچ پروژه‌ای نیست
'; } else { @@ -5163,21 +5225,43 @@ const ti = this.getTypeInfo(pr.type); const deps = pr.dependencies || []; const deploys = this.getActiveDeployments(pr); - const emptyEnvs = this.getEnvironmentsWithoutDeployment(pr); - const canAdd = emptyEnvs.length > 0; - html += `
${ti.icon}${pr.title}${ti.label}
${pr.description || ""}
${pr.metadata?.framework ? `
فریم‌ورک${pr.metadata.framework}
` : ""}${pr.metadata?.language ? `
زبان${pr.metadata.language}
` : ""}${deps.length > 0 - ? `
وابستگی‌ها (${deps.length})${deps + const archivedDeploys = (pr.deployments || []) + .filter((d) => d.status === "archived") + .sort((a, b) => { + const dateA = a.archivedAt ? new Date(a.archivedAt).getTime() : 0; + const dateB = b.archivedAt ? new Date(b.archivedAt).getTime() : 0; + return dateB - dateA; + }); + const hasEnvs = projectData.appData.environments.length > 0; + + html += `
${ti.icon}${pr.title}${ti.label}
${pr.description || ""}
`; + + if (pr.metadata?.owner) { + html += `
👤 مالک${pr.metadata.owner}
`; + } + + if (pr.metadata?.framework) { + html += `
فریم‌ورک${pr.metadata.framework}
`; + } + + if (pr.metadata?.language) { + html += `
زبان${pr.metadata.language}
`; + } + + if (deps.length > 0) { + html += `
وابستگی‌ها (${deps.length})${deps .map((depId) => { const dp = this.findProjectById(depId); return dp ? dp.title : depId; }) - .join("، ")}
` - : "" - }
`; - html += `
🚀 استقرارهای فعال (${deploys.length})${canAdd ? `` : '✓ کامل'}
`; + .join("، ")}
`; + } + + html += `
`; + html += `
🚀 استقرارهای فعال (${deploys.length})${hasEnvs ? `` : '⚠️ محیطی تعریف نشده'}
`; + if (deploys.length === 0) { - html += - '
هنوز استقرار ندارد
'; + html += '
هنوز استقرار ندارد
'; } else { html += '
'; deploys.forEach((d) => { @@ -5186,13 +5270,22 @@ const fd = d.deploymentDate ? new Date(d.deploymentDate).toLocaleString("fa-IR") : "—"; - html += `
${en}v${d.version}📅 ${fd}
`; - if (d.releaseNotes) + + html += `
${en}v${d.version}📅 ${fd}
`; + + html += ``; + + html += ``; + + html += ``; + + html += `
`; + + if (d.releaseNotes) { html += `
📝 ${d.releaseNotes}
`; - if ( - d.requiredDeployments && - d.requiredDeployments.length > 0 - ) { + } + + if (d.requiredDeployments && d.requiredDeployments.length > 0) { html += `
🔗 نیازمندی‌ها: ${d.requiredDeployments .map((rd) => { const rp = this.findProjectById(rd.projectId); @@ -5207,14 +5300,62 @@ }) .join("، ")}
`; } + html += `
`; }); html += "
"; } + + html += `
`; + html += `
`; + html += `📜 تاریخچه استقرارها (${archivedDeploys.length})`; + if (archivedDeploys.length > 0) { + html += ``; + } + html += `
`; + + if (archivedDeploys.length === 0) { + html += `
هنوز استقراری آرشیو نشده است
`; + } else { + html += ``; + } + + html += `
`; + html += `
`; }); html += "
"; } + html += `
`; document.getElementById("projectDetailBody").innerHTML = html; ModalManager.open("projectDetailModal"); @@ -5259,6 +5400,7 @@ }); ModalManager.close("addProductModal"); refreshUI(); + ToolbarManager.populateOwnerFilter(); showToast(`"${title}" ایجاد شد`, "success"); }, openDependencyManager(productId, projId) { @@ -5449,6 +5591,7 @@ prod.metadata.updatedAt = new Date().toISOString(); ModalManager.close("productEditModal"); refreshUI(); + ToolbarManager.populateOwnerFilter(); this.showDetail(pid); showToast(`"${prod.title}" ویرایش شد`, "success"); }, @@ -5460,6 +5603,7 @@ document.getElementById("newProjectTitle").value = ""; document.getElementById("newProjectType").value = ""; document.getElementById("newProjectFramework").value = ""; + document.getElementById("newProjectOwner").value = ""; // 🆕 document.getElementById("newProjectLanguage").value = ""; document.getElementById("newProjectRepo").value = ""; document.getElementById("newProjectDescription").value = ""; @@ -5482,20 +5626,18 @@ const np = { id: `proj-${Date.now()}`, title, - description: - document.getElementById("newProjectDescription").value.trim() || - "", + description: document.getElementById("newProjectDescription").value.trim() || "", type, - repositoryUrl: document - .getElementById("newProjectRepo") - .value.trim(), - metadata: { createdAt: new Date().toISOString(), customFields: {} }, + repositoryUrl: document.getElementById("newProjectRepo").value.trim(), + metadata: { + createdAt: new Date().toISOString(), + owner: document.getElementById("newProjectOwner").value.trim() || "", // 🆕 + customFields: {} + }, dependencies: [], deployments: [], }; - const fw = document - .getElementById("newProjectFramework") - .value.trim(); + const fw = document.getElementById("newProjectFramework").value.trim(); if (fw) np.metadata.framework = fw; const lg = document.getElementById("newProjectLanguage").value.trim(); if (lg) np.metadata.language = lg; @@ -5506,9 +5648,7 @@ showToast(`"${title}" ایجاد شد`, "success"); }, openProjectEditModal(productId, projId) { - const prod = projectData.appData.products.find( - (p) => p.id === productId, - ); + const prod = projectData.appData.products.find((p) => p.id === productId); if (!prod) return; const pr = prod.projects.find((p) => p.id === projId); if (!pr) return; @@ -5517,14 +5657,11 @@ document.getElementById("editProjId").value = pr.id; document.getElementById("editProjTitle").value = pr.title; document.getElementById("editProjType").value = pr.type; - document.getElementById("editProjFramework").value = - pr.metadata?.framework || ""; - document.getElementById("editProjLanguage").value = - pr.metadata?.language || ""; - document.getElementById("editProjRepo").value = - pr.repositoryUrl || ""; - document.getElementById("editProjDescription").value = - pr.description || ""; + document.getElementById("editProjFramework").value = pr.metadata?.framework || ""; + document.getElementById("editProjOwner").value = pr.metadata?.owner || ""; // 🆕 + document.getElementById("editProjLanguage").value = pr.metadata?.language || ""; + document.getElementById("editProjRepo").value = pr.repositoryUrl || ""; + document.getElementById("editProjDescription").value = pr.description || ""; ModalManager.open("editProjectModal"); }, saveProjectEdit() { @@ -5545,15 +5682,15 @@ AutosaveManager.scheduleSave(); pr.title = nt; pr.type = nty; - pr.description = - document.getElementById("editProjDescription").value.trim() || ""; - pr.repositoryUrl = document - .getElementById("editProjRepo") - .value.trim(); + pr.description = document.getElementById("editProjDescription").value.trim() || ""; + pr.repositoryUrl = document.getElementById("editProjRepo").value.trim(); if (!pr.metadata) pr.metadata = {}; const fw = document.getElementById("editProjFramework").value.trim(); if (fw) pr.metadata.framework = fw; else delete pr.metadata.framework; + const owner = document.getElementById("editProjOwner").value.trim(); // 🆕 + if (owner) pr.metadata.owner = owner; + else delete pr.metadata.owner; const lg = document.getElementById("editProjLanguage").value.trim(); if (lg) pr.metadata.language = lg; else delete pr.metadata.language; @@ -5565,36 +5702,39 @@ }, openAddDeploymentModal(productId, projId) { if (!productId || !projId) return; - const prod = projectData.appData.products.find( - (p) => p.id === productId, - ); + const prod = projectData.appData.products.find((p) => p.id === productId); if (!prod) return; const pr = prod.projects.find((p) => p.id === projId); if (!pr) return; - const emptyEnvs = this.getEnvironmentsWithoutDeployment(pr); - if (emptyEnvs.length === 0) { - showToast("همه محیط‌ها استقرار دارند", "warning"); + + const allEnvs = projectData.appData.environments; + if (allEnvs.length === 0) { + showToast("ابتدا یک محیط عملیاتی ایجاد کنید", "warning"); return; } + this.currentDeploymentProjId = projId; this.currentDeploymentMode = "add"; this.currentDeploymentEnvId = null; this.currentEditDeploymentId = null; + document.getElementById("deploymentModalTitle").innerHTML = "🚀افزودن نسخه استقرار"; + const envGroup = document.getElementById("deploymentEnvGroup"); - const envs = projectData.appData.environments.filter((e) => - emptyEnvs.includes(e.id), - ); + const envs = allEnvs; + envGroup.innerHTML = ``; + document.getElementById("depVersion").value = ""; document.getElementById("depDate").value = ""; document.getElementById("depReleaseNotes").value = ""; + this.renderRequiredDeploymentsSection(); ModalManager.open("deploymentModal"); }, @@ -5762,7 +5902,26 @@ this.showDetail(pid); }, removeDeployment(productId, projId, depId) { - if (!confirm("حذف این استقرار؟")) return; + if (!confirm("⚠️ حذف کامل این استقرار؟\n\nاین عمل غیرقابل بازگشت است.\nاگر می‌خواهید فقط از لیست فعال خارج شود، از دکمه «آرشیو» استفاده کنید.")) return; + const prod = projectData.appData.products.find( + (p) => p.id === productId, + ); + if (!prod) return; + const pr = prod.projects.find((p) => p.id === projId); + if (!pr) return; + + HistoryManager.pushState(); + AutosaveManager.scheduleSave(); + + pr.deployments = (pr.deployments || []).filter((d) => d.id !== depId); + + refreshUI(); + this.showDetail(productId); + showToast("🗑️ استقرار به‌طور کامل حذف شد", "warning"); + }, + archiveDeployment(productId, projId, depId) { + if (!confirm("📦 انتقال این استقرار به تاریخچه؟\n\nاستقرار از لیست فعال خارج شده و در بخش تاریخچه نگهداری می‌شود.")) return; + const prod = projectData.appData.products.find( (p) => p.id === productId, ); @@ -5771,12 +5930,16 @@ if (!pr) return; const dep = (pr.deployments || []).find((d) => d.id === depId); if (!dep) return; + HistoryManager.pushState(); AutosaveManager.scheduleSave(); - dep.status = "removed"; + + dep.status = "archived"; + dep.archivedAt = new Date().toISOString(); + refreshUI(); this.showDetail(productId); - showToast("استقرار حذف شد", "warning"); + showToast("📦 استقرار به تاریخچه منتقل شد", "success"); }, removeProduct(productId) { const prod = projectData.appData.products.find( @@ -5790,6 +5953,7 @@ (p) => p.id !== productId, ); refreshUI(); + ToolbarManager.populateOwnerFilter(); ModalManager.close("projectDetailModal"); showToast(`"${prod.title}" حذف شد`, "warning"); }, @@ -5809,6 +5973,35 @@ this.showDetail(productId); showToast(`"${pr.title}" حذف شد`, "warning"); }, + toggleArchiveVisibility(projId) { + const list = document.getElementById(`archiveList-${projId}`); + if (!list) return; + const isHidden = list.style.display === "none"; + list.style.display = isHidden ? "flex" : "none"; + }, + restoreDeployment(productId, projId, depId) { + if (!confirm("↩️ بازگرداندن این استقرار به لیست فعال؟")) return; + + const prod = projectData.appData.products.find( + (p) => p.id === productId, + ); + if (!prod) return; + const pr = prod.projects.find((p) => p.id === projId); + if (!pr) return; + const dep = (pr.deployments || []).find((d) => d.id === depId); + if (!dep) return; + + HistoryManager.pushState(); + AutosaveManager.scheduleSave(); + + // ✅ بازگرداندن به وضعیت active + dep.status = "active"; + delete dep.archivedAt; + + refreshUI(); + this.showDetail(productId); + showToast("↩️ استقرار به لیست فعال بازگردانده شد", "success"); + }, }; /* ==================== DASHBOARD MANAGER ==================== */ const DashboardManager = { @@ -6710,6 +6903,7 @@ updateProjectUI(); renderToolGroups(); ToolbarManager.populateEnvironmentFilter(); + ToolbarManager.populateOwnerFilter(); refreshUI(); if (ReleaseBoardsManager) { ReleaseBoardsManager.render(true); diff --git a/xReleaseAssistant_6.html b/xReleaseAssistant_6.html index 2b38688..e235d52 100644 --- a/xReleaseAssistant_6.html +++ b/xReleaseAssistant_6.html @@ -3017,6 +3017,12 @@
+
+ 👤 + +
@@ -3296,32 +3302,38 @@