# Quick Reference - Powder Coating Management System ## Essential Commands ### Database Operations ```bash # Create migration dotnet ef migrations add MigrationName --project src/PowderCoating.Infrastructure --startup-project src/PowderCoating.Web # Apply migrations dotnet ef database update --project src/PowderCoating.Infrastructure --startup-project src/PowderCoating.Web # Rollback to specific migration dotnet ef database update MigrationName --project src/PowderCoating.Infrastructure --startup-project src/PowderCoating.Web # Drop database dotnet ef database drop --project src/PowderCoating.Infrastructure --startup-project src/PowderCoating.Web ``` ### Run Applications ```bash # Web Application cd src/PowderCoating.Web && dotnet run # API cd src/PowderCoating.Api && dotnet run # With auto-reload dotnet watch run ``` ### Testing ```bash # All tests dotnet test # Specific project dotnet test tests/PowderCoating.UnitTests # With coverage dotnet test /p:CollectCoverage=true ``` ## Default Credentials **Admin Account:** - Email: `admin@powdercoating.com` - Password: `Admin123!` ## Key Entities & Relationships ``` Customer (1) ──── (Many) Jobs Customer (1) ──── (Many) Quotes Quote (1) ──────── (1) Job (converted) Job (1) ──────── (Many) JobItems Job (1) ──────── (Many) JobPhotos InventoryItem (1) ─ (Many) JobItems Equipment (1) ──── (Many) MaintenanceRecords ``` ## Job Status Workflow ``` Pending → Quoted → Approved → InPreparation → Sandblasting → MaskingTaping → Cleaning → InOven → Coating → Curing → QualityCheck → Completed → ReadyForPickup → Delivered ``` ## API Endpoints Quick Reference ### Authentication - POST `/api/auth/login` - Login - POST `/api/auth/register` - Register new user - POST `/api/auth/refresh` - Refresh token ### Jobs - GET `/api/jobs` - List all jobs - GET `/api/jobs/{id}` - Get specific job - POST `/api/jobs` - Create job - PUT `/api/jobs/{id}` - Update job - DELETE `/api/jobs/{id}` - Delete job - PATCH `/api/jobs/{id}/status` - Update status ### Customers - GET `/api/customers` - List all customers - GET `/api/customers/{id}` - Get specific customer - POST `/api/customers` - Create customer - PUT `/api/customers/{id}` - Update customer - DELETE `/api/customers/{id}` - Delete customer ### Inventory - GET `/api/inventory` - List inventory items - GET `/api/inventory/{id}` - Get specific item - POST `/api/inventory` - Add inventory item - POST `/api/inventory/transaction` - Record transaction ## Configuration Keys ### appsettings.json ```json { "ConnectionStrings": { "DefaultConnection": "Server=...;Database=PowderCoatingDb;..." }, "JwtSettings": { "SecretKey": "your-secret-key", "ExpirationMinutes": 1440 }, "AppSettings": { "CompanyName": "Your Company", "TaxRate": 0.07 }, "AI": { "OpenAI": { "ApiKey": "sk-..." } } } ``` ## User Roles & Permissions | Role | Manage Customers | Create Quotes | Manage Jobs | Manage Inventory | Approve Quotes | Admin Panel | |------|-----------------|---------------|-------------|------------------|----------------|-------------| | Administrator | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Manager | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | Employee | ⚠️ | ✅ | ✅ | ✅ | ❌ | ❌ | | ShopFloor | ❌ | ❌ | ⚠️ (view/update status) | ❌ | ❌ | ❌ | | ReadOnly | ❌ | ❌ | ❌ (view only) | ❌ | ❌ | ❌ | ## Common Code Snippets ### Get Paged Data ```csharp var (items, totalCount) = await _unitOfWork.Jobs.GetPagedAsync( pageNumber: 1, pageSize: 25, filter: j => j.Status == JobStatus.Pending, orderBy: q => q.OrderByDescending(j => j.CreatedAt) ); ``` ### Create with Transaction ```csharp try { await _unitOfWork.BeginTransactionAsync(); await _unitOfWork.Jobs.AddAsync(job); await _unitOfWork.JobItems.AddRangeAsync(items); await _unitOfWork.CommitTransactionAsync(); } catch { await _unitOfWork.RollbackTransactionAsync(); throw; } ``` ### Map Entity to DTO ```csharp var jobDto = _mapper.Map(job); var jobs = _mapper.Map>(jobList); ``` ## File Locations | Component | Location | |-----------|----------| | Entities | `src/PowderCoating.Core/Entities/` | | DTOs | `src/PowderCoating.Application/DTOs/` | | Controllers (Web) | `src/PowderCoating.Web/Controllers/` | | Controllers (API) | `src/PowderCoating.Api/Controllers/` | | Views | `src/PowderCoating.Web/Views/` | | DbContext | `src/PowderCoating.Infrastructure/Data/` | | Repositories | `src/PowderCoating.Infrastructure/Repositories/` | | Migrations | `src/PowderCoating.Infrastructure/Migrations/` | ## Environment Variables (Production) ```bash # Connection String ConnectionStrings__DefaultConnection="Server=...;Database=...;" # JWT Secret JwtSettings__SecretKey="production-secret-key-here" # OpenAI (if using) AI__OpenAI__ApiKey="sk-..." # Logging Level Logging__LogLevel__Default="Warning" ``` ## Ports (Default) - Web Application: `https://localhost:7001` - API: `https://localhost:7002` - API Swagger: `https://localhost:7002` ## Performance Tips 1. Use `.AsNoTracking()` for read-only queries 2. Use pagination for large datasets 3. Implement caching for frequently accessed data 4. Use projection (`.Select()`) to load only needed fields 5. Index frequently queried columns 6. Use eager loading (`.Include()`) to avoid N+1 queries ## Security Checklist - [ ] Change default admin password - [ ] Update JWT secret key - [ ] Set strong password requirements - [ ] Enable HTTPS in production - [ ] Configure CORS appropriately - [ ] Implement rate limiting - [ ] Store secrets in Azure Key Vault or similar - [ ] Enable audit logging - [ ] Implement input validation - [ ] Use prepared statements (automatic with EF Core) ## Deployment Checklist - [ ] Update connection strings - [ ] Set environment to "Production" - [ ] Apply all migrations - [ ] Configure logging - [ ] Set up SSL certificate - [ ] Configure backup strategy - [ ] Set up monitoring - [ ] Test all endpoints - [ ] Update API documentation - [ ] Train users ## Support & Resources **Documentation Files:** - `GETTING_STARTED.md` - Initial setup guide - `DEVELOPMENT.md` - Detailed developer guide - `README.md` - Project overview **Online Resources:** - ASP.NET Core: https://docs.microsoft.com/aspnet/core - Entity Framework: https://docs.microsoft.com/ef/core - Swagger/OpenAPI: https://swagger.io/docs/ **Common Issues:** - Connection problems → Check SQL Server is running - Migration errors → Remove last migration and try again - Port conflicts → Update launchSettings.json - Package errors → Run `dotnet restore --force` --- **Pro Tip:** Bookmark this file for quick reference during development!