# 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<JobDto>(job);
var jobs = _mapper.Map<List<JobListDto>>(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!
