Commit Graph

61 Commits

Author SHA1 Message Date
Andrés Eduardo García Márquez eacace330d chore: ignore Playwright MCP cache directory 2026-01-07 23:01:27 -05:00
Andrés Eduardo García Márquez aa39772261 chore(backend): add solution file and build configuration
- StudentEnrollment.sln with all project references
- Directory.Build.props for shared build settings
2026-01-07 23:01:13 -05:00
Andrés Eduardo García Márquez 4fa8dc03a0 docs: add project documentation and env template
Environment:
- .env.example template with all configuration variables
- Database, API, GraphQL, and frontend settings

Documentation:
- Architecture Decision Records (ADR-001 to ADR-004)
- Deployment guide with Docker and K8s instructions
- OWASP security checklist
- Code review checklist
- Activity plan and deliverables

Architecture diagrams (PlantUML):
- Use cases, domain model, sequence diagrams
- Component, ER, state, and deployment diagrams
- C4 context diagram
2026-01-07 23:00:56 -05:00
Andrés Eduardo García Márquez c0a47c2ba6 feat(deploy): add Docker and Kubernetes deployment
Docker:
- Multi-stage Dockerfile for API (.NET 10)
- Multi-stage Dockerfile for frontend (Angular + Nginx)
- docker-compose.yml with resource optimization
- Nginx reverse proxy configuration
- Health checks for all services

Kubernetes (k3s):
- Namespace and ConfigMap
- SQL Server StatefulSet with PVC
- API Deployment with HPA
- Frontend Deployment
- Services and Ingress
- Network policies for security
- Secrets management

Resource optimization:
- SQL Server Express with 1GB RAM limit
- API with 512MB limit
- Frontend with 128MB limit
2026-01-07 23:00:41 -05:00
Andrés Eduardo García Márquez 874b67d07f test: add unit and integration tests
Domain Tests:
- StudentTests: entity creation and validation
- EmailTests: value object validation
- EnrollmentDomainServiceTests: business rules

Application Tests:
- EnrollStudentCommandTests: enrollment scenarios
  - Max 3 subjects validation
  - Same professor constraint

Uses xUnit, Moq, and FluentAssertions
2026-01-07 23:00:27 -05:00
Andrés Eduardo García Márquez 84d88c91d1 feat(frontend): add Angular 21 SPA with Material Design
Core:
- Apollo Angular for GraphQL integration
- Student and Enrollment services
- Connectivity monitoring with health checks
- Error handling with user-friendly messages

Features:
- Students: list, create, edit, delete
- Enrollment: subject selection with validation feedback
- Classmates: view students in shared subjects

Shared Components:
- ConfirmDialog, EmptyState, LoadingSpinner
- ConnectivityOverlay for offline detection
- Custom pipes (credits, initials)

UI:
- Angular Material with custom theme
- Responsive layout with navigation
- Real-time validation feedback
2026-01-07 23:00:12 -05:00
Andrés Eduardo García Márquez 6f16ff2336 feat(host): add composition root and API configuration
- Program.cs with dependency injection setup
- Database connection retry logic with detailed logging
- Serilog structured logging configuration
- CORS configuration from environment variables
- Response compression (Brotli + Gzip)
- Rate limiting for GraphQL endpoint
- Health checks with database verification
- OWASP security headers middleware
- Output caching for read-heavy operations
2026-01-07 22:59:56 -05:00
Andrés Eduardo García Márquez 60d35f1040 feat(adapters): add driven and driving adapters
Driven Adapters (Persistence):
- AppDbContext with EF Core configurations
- Repository implementations (Student, Subject, Professor, Enrollment)
- UnitOfWork pattern for transactions
- DataLoaders for GraphQL N+1 optimization
- Database seeding with 5 professors and 10 subjects
- EF Core migrations for SQL Server

Driving Adapters (API):
- GraphQL API with HotChocolate
- Query and Mutation types
- Type definitions for all entities
- GraphQLErrorFilter for domain exceptions
2026-01-07 22:59:38 -05:00
Andrés Eduardo García Márquez 68e420fdf2 feat(application): add CQRS application layer
Commands:
- CreateStudent, UpdateStudent, DeleteStudent
- EnrollStudent, UnenrollStudent

Queries:
- GetStudents, GetStudentById, GetStudentsPaged
- GetSubjects, GetAvailableSubjects
- GetProfessors
- GetClassmates

DTOs:
- StudentDto, SubjectDto, ProfessorDto, EnrollmentDtos

Validation:
- FluentValidation with ValidationBehavior pipeline
- EnrollStudentValidator for input validation

Uses MediatR for command/query dispatching
2026-01-07 22:59:23 -05:00
Andrés Eduardo García Márquez 2d6c08e14a feat(domain): add core domain layer
Entities:
- Student: core entity with email validation
- Subject: course with credits (3 each)
- Professor: instructor managing 2 subjects
- Enrollment: student-subject relationship

Value Objects:
- Email: validated email with domain rules

Domain Services:
- EnrollmentDomainService: validates business rules
  - Max 3 subjects per student (9 credits)
  - No duplicate professor constraint

Ports:
- Repository interfaces for dependency inversion
2026-01-07 22:59:10 -05:00
Andrés Eduardo García Márquez dfcfca0b4e chore: add initial project configuration
- Add .gitignore for .NET, Node.js, and IDE files
- Add README.md with project overview
2026-01-07 22:58:56 -05:00