- Add Phase 0: Mistral API Connector (2-3 hours) as first step
- Update status to In Progress
- Add MistralConnector to architecture diagram and components
- Add connector-specific tasks to implementation plan
- Add Mistral connector configuration examples
- Add progress history entry
- Update estimate from 10-16h to 12-18h
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Created LevelsController.cs with full CRUD operations
- GET /api/levels - all levels
- GET /api/levels/{id} - level by ID
- GET /api/levels/by-code/{code} - level by code
- GET /api/levels/first - first level
- GET /api/levels/next/{id} - next level
- POST /api/levels - create level (Admin)
- PUT /api/levels/{id} - update level (Admin)
- DELETE /api/levels/{id} - delete level (Admin)
- Created LessonsController.cs with full CRUD and filtering
- GET /api/lessons - all lessons
- GET /api/lessons/ordered - ordered lessons
- GET /api/lessons/{id} - lesson by ID
- GET /api/lessons/by-level/{levelId} - lessons by level
- GET /api/lessons/beginner - beginner lessons
- GET /api/lessons/advanced - advanced lessons
- GET /api/lessons/first/{levelId} - first lesson in level
- GET /api/lessons/next/{id} - next lesson
- GET /api/lessons/accessible/{userId} - accessible lessons
- GET /api/lessons/unlocked/{userId}/{lessonId} - check unlock
- POST /api/lessons - create lesson (Admin)
- PUT /api/lessons/{id} - update lesson (Admin)
- DELETE /api/lessons/{id} - delete lesson (Admin)
- Added authorization: [Authorize] for most endpoints, [AllowAnonymous] for read-only
- Added Admin role requirement for write operations
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Marked 'Write unit tests for services' as complete
- Added note about 30 new unit tests
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Created LevelServiceTests.cs with 10 test methods
- Created LessonServiceTests.cs with 10 test methods
- Created ProgressServiceTests.cs with 10 test methods
- All tests use Moq for repository mocking
- Total: 30 new unit tests for application services
- All tests follow MSTest framework conventions
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Marked Phase 2: Backend Services as COMPLETED
- Updated all Phase 2 tasks as completed
- Updated Backend task list with new service files
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Created LevelDto.cs with LevelDto, CreateLevelDto, UpdateLevelDto
- Created UserProgressDto.cs with UserProgressDto, UpdateUserProgressDto, LevelCompletionDto
- Created LevelService.cs with CRUD operations for CEFR levels
- Created LessonService.cs with CRUD operations and filtering by level
- Created ProgressService.cs with user progress tracking, completion percentage, and lesson unlocking logic
- Registered all new services in Program.cs
- Fixed UserProgressDto ToEntity/UpdateFromDto to use domain entity methods
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Updated Lesson Management feature status to show Phase 1: DB & Models completed
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Created migration 20260607192743_AddLessonManagementTables
- Renames old 'Level' column to 'Order' in Lessons table
- Adds LevelId, Topic, IsActive columns to Lessons
- Creates Levels table with Id, Name, Code, Order
- Creates UserProgress table with UserId, LessonId, IsCompleted, QuizScore, LastAttemptDate
- Adds foreign key from Lessons to Levels
- Adds foreign keys from UserProgress to Users and Lessons
- Adds unique indexes for Level.Code, Level.Order, Lesson.LevelId_Order, UserProgress.UserId_LessonId
- Temporarily commented out seeding during migration creation to avoid EF Core tooling issues
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Updated Lesson entity to use LevelId (int) instead of Level (int)
- Added navigation property Level (Level entity)
- Added Order, Topic, and IsActive properties to Lesson
- Updated Lesson.Create() factory method signature to accept levelId, title, order, topic, description
- Split Update method into individual property update methods
- Updated LessonDto to use LevelId, LevelName, LevelCode instead of Level int
- Added CreateLessonDto and UpdateLessonDto with all required fields
- Added UpdateFromDto extension method for Lesson
- Updated CreateLessonCommand to validate LevelId instead of Level
- Updated SeedDataExtension to seed Level entities first, then use new Lesson.Create() signature
- Made SeedDatabaseAsync async and updated Program.cs to await it
- Updated LessonsEndpoints to use GetByLevelAsync for beginner/advanced queries
- Fixed missing using directive for Domain.Entities
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Create feature branch: feature/lesson-management
- Update lesson-management.md status from Planned to In Progress
- Update ROADMAP.md: Feature 2.1 (Lesson Management) now In Progress
- Update Phase 1 status to Complete, Phase 2 to In Progress
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Remove GitHub Actions workflow (.github/workflows/dotnet-ci.yml)
- Create Woodpecker CI pipeline (.woodpecker.yml)
- Configure pipeline with 3 stages:
- build-and-test: runs on all branches, builds and runs unit/integration tests
- docker-build: builds and pushes Docker image to git.lrhdev.dk on main
- deploy: placeholder for deployment to deutsch.lrhdev.dk
- Update infrastructure-setup.md to document Woodpecker configuration
- Feature 1.1 (Infrastructure Setup) CI/CD tasks now complete for self-hosted setup
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Create .github/workflows/dotnet-ci.yml with:
- Build and test job (runs on all pushes to main/feature branches)
- Docker build job (builds and pushes to Docker Hub on main)
- Deploy job (placeholder for production deployment)
- Configure workflow to run .NET 9.0 build, unit tests, and integration tests
- Update infrastructure-setup.md to mark CI/CD tasks as complete
- Feature 1.1 (Infrastructure Setup) now 100% complete
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Fix MSTest compatibility with .NET 9.0 by upgrading to MSTest.TestFramework 4.2.3
- Move Tests directory to solution level (Tests/) to prevent test files from being compiled with GermanApp
- Update test project references to point to GermanApp/GermanApp.csproj
- Add InternalsVisibleTo attributes for test assemblies
- Make RefreshToken properties internal for testability
- Fix User.ChangeEmail null handling
- Add 46 comprehensive unit tests for User and RefreshToken domain entities
- All tests passing successfully
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Add RequireAuthorization() to POST, PUT, DELETE endpoints
- Add Microsoft.AspNetCore.Authorization using
- Lessons now require JWT token for create, update, delete
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Update status from Planned to In Progress
- Ready to implement JWT-based authentication
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- All Docker tasks completed
- All containers running successfully
- Update milestones and progress history
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- nginx:alpine doesn't have wget installed
- Health check was causing container to stay in 'starting' state
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Remove HEALTHCHECK from backend Dockerfile
- Remove health checks from docker-compose.yml
- Change frontend depends_on to service_started
- Health checks can be added back once image tools are known
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- CMD-SHELL not supported in HEALTHCHECK
- Use CMD bash -c with /dev/tcp for port check
- No external dependencies needed
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Alpine-based aspnet image doesn't include curl
- Health check requires curl to test /health endpoint
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Create Dockerfile for backend (.NET 9.0 multi-stage build)
- Create Dockerfile for frontend (Node + Nginx multi-stage build)
- Create nginx.conf for frontend with API proxy
- Create docker-compose.yml with db, backend, frontend services
- Add .dockerignore files for backend, frontend, and root
- Configure health checks for all services
- Configure PostgreSQL volume for persistent data
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Update Workflow section to emphasize marking tasks as [x] when completed
- Update Best Practices to explicitly state updating task checkmarks as you work
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Mark acceptance criteria as complete
- Update Implementation Plan Phase 1 and 2 tasks
- Update Milestones for Backend Project and Database
- Update all Backend and Database tasks as complete
- Add progress history entries
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Add Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore package
- Add Serilog.AspNetCore and Serilog.Sinks.Console packages
- Configure Serilog with bootstrap logger and configuration
- Add Health Checks endpoint at /health with DbContext check
- Configure CORS with AllowAll policy for development
- Create ApiResponse, ApiErrorResponse, and PaginatedResponse models
- Create ExceptionMiddleware for global error handling
- Restructure Program.cs with try-catch-finally for proper logging
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>