# Tarifit Learning Content Service
A Spring Boot Kotlin microservice for managing learning content, skills, exercises, and achievements in the Tarifit language learning platform.
## Architecture
This service follows strict anemic domain principles with clear separation of concerns:
### Domain Layer (Pure Anemic Data)
- **Entities**: Completely anemic data classes with no business logic
- **Ports**: Repository interfaces defining data access contracts
### Application Layer (Business Logic)
- **Services**: All business logic and domain rules
- **Achievement System**: Achievement tracking and validation
- **Exercise Validation**: Exercise answer validation and scoring
- **Skill Progress**: Skill dependency and progression logic
### Infrastructure Layer (Persistence & External)
- **MongoDB Entities**: Separate persistence models with annotations
- **Repository Implementations**: Data access layer
- **Feign Clients**: External service communication (User Service, Content Service)
- **Mappers**: Entity-to-domain mapping
### Adapter Layer (Web Interface)
- **Controllers**: REST API endpoints
- **DTOs**: Request/response objects
- **Exception Handling**: Global error handling
## Features
### Skill Management
- Hierarchical skill structure with categories
- Skill dependencies and prerequisites
- Progress tracking and unlocking logic
- Dynamic skill availability based on user progress
### Exercise System
- Multiple exercise types (vocabulary, grammar, listening, etc.)
- Exercise validation and scoring
- Media reference support (audio, images)
- Difficulty progression within skills
### Achievement System
- Dynamic achievement requirements
- Progress calculation and tracking
- XP rewards for achievement completion
- Integration with user progress service
### Content Management
- Media asset references
- Exercise type definitions
- Skill categorization
- Content versioning support
## API Endpoints
### Skills
- `GET /api/skills` - Get all skills with user progress
- …