# Microservices Development - GEMINI.md This directory contains the .NET 8 microservices for the backend. ## Core Mandates - **Framework**: ASP.NET Core 8.0+. - **Database**: MongoDB (via `MongoDB.Driver`). - **Authentication**: JWT (Bearer token). - **Communication**: REST APIs (HTTP). - **Naming Conventions**: - Namespace: `[ServiceName]Api` (e.g., `AuthApi`). - Project: `[ServiceName]Api.csproj`. - Classes/Methods: `PascalCase`. - DTOs/Models: `PascalCase` with meaningful suffixes (e.g., `UserCreateRequest`). ## Project Structure Each microservice follows a standard layout: - `Controllers/`: API endpoint definitions. - `Models/`: Database entities and DTOs. - `Services/`: Business logic and data access (e.g., `UserService.cs`). - `Properties/`: Configuration and launch settings. - `k8s/`: Kubernetes manifests for the service. - `DOCUMENTS.md`: Crucial for tracking API and document shapes. ## Best Practices - **Dependency Injection**: Use `AddSingleton` for long-lived services like database clients/wrappers and `AddScoped` for per-request logic. - **Async/Await**: Use asynchronous operations for all I/O bound tasks (DB, HTTP). - **Security**: - Never hardcode secrets; use `IConfiguration` and environment variables. - Use `Bcrypt.Net-Next` for password hashing. - Ensure all sensitive endpoints are protected by `[Authorize]`. - **API Documentation**: Always maintain Swagger/OpenAPI documentation. Swagger should be available at `/swagger` in development and potentially production environments. - **Logging**: Use structured logging (standard `ILogger` or Serilog). ## Maintenance - Update `DOCUMENTS.md` whenever you change a database schema or API request/response shape. - Ensure `Dockerfile` and `k8s/` manifests are kept in sync with code changes. - All microservices are unified under the `micro-services.sln` solution file.