API de démonstration pour ContosoProtect, inspirée des activités d'IRCEM en protection sociale (retraite, prévoyance, assurance santé complémentaire), destinée aux emplois de la famille et aux services à la personne.
Cette application démontre comment GitHub Copilot Coding Agent peut générer rapidement une Minimal API .NET complète avec calcul de devis, validation, documentation Swagger, tests automatisés et base de données en mémoire.
- ✅ Calcul de devis avec règles métier explicables
- ✅ Validation des entrées avec messages d'erreur détaillés
- ✅ Documentation Swagger/OpenAPI interactive
- ✅ Base de données en mémoire réinitialisable
- ✅ Tests unitaires et d'intégration (18 tests)
- ✅ CI/CD avec GitHub Actions
ContosoProtect/
├── ContosoProtect.Api/ # API principale
│ ├── Models/ # Modèles de domaine
│ ├── Services/ # Logique métier
│ ├── Data/ # Contexte EF Core
│ └── Program.cs # Configuration et endpoints
└── ContosoProtect.Api.Tests/ # Tests xUnit
- .NET 10 SDK
- Un éditeur de code (Visual Studio, VS Code, Rider)
git clone https://github.com/frkim/ContosoProtect.git
cd ContosoProtectdotnet restorecd ContosoProtect.Api
dotnet runL'API sera accessible sur :
- Swagger UI : http://localhost:5083 (ou le port indiqué dans la console)
- API : http://localhost:5083/quote
dotnet testCalcule une prime d'assurance prévoyance avec décomposition des règles appliquées.
Exemple de requête :
curl -X POST http://localhost:5083/quote \
-H "Content-Type: application/json" \
-d '{
"age": 42,
"status": "SalariedEmployee",
"familyOption": true,
"accidentOption": false,
"seniorityMonths": 36
}'Réponse (200 OK) :
{
"premium": 17.00,
"breakdown": [
{
"code": "BASE",
"description": "Base premium",
"amount": 12.00
},
{
"code": "AGE_31_50",
"description": "Age bracket 31-50",
"amount": 3.00
},
{
"code": "STATUS_EMPLOYEE",
"description": "Salaried employee discount",
"amount": -1.00
},
{
"code": "FAMILY_OPTION",
"description": "Family coverage option",
"amount": 4.00
},
{
"code": "SENIORITY_DISCOUNT",
"description": "Loyalty discount (24+ months)",
"amount": -1.00
}
]
}Erreur de validation (400 Bad Request) :
{
"error": "validation_error",
"details": [
{
"field": "age",
"message": "Age must be between 18 and 75."
}
]
}curl http://localhost:5083/healthRéponse :
{
"status": "healthy",
"timestamp": "2025-12-09T10:30:00.000Z"
}curl -X POST http://localhost:5083/admin/reset \
-H "X-Admin-Token: demo-reset"Réponse :
{
"message": "Database reset successfully",
"timestamp": "2025-12-09T10:30:00.000Z"
}Le calcul de la prime suit ces règles :
- Prime de base : 12.00 € / mois
- 18-30 ans : +0 €
- 31-50 ans : +3 €
- 51-65 ans : +6 €
- 66-75 ans : +9 €
- > 75 ans : Refus (validation error)
- Salarié (
SalariedEmployee) : -1 € - Employeur particulier (
HouseholdEmployer) : +2 €
- Option famille (
FamilyOption) : +4 € - Option accident (
AccidentOption) : +3 €
- ≥ 24 mois : -1 € (remise fidélité)
Pour un salarié de 42 ans avec option famille et 36 mois d'ancienneté :
- Base : 12 €
- Âge 31-50 : +3 €
- Statut employé : -1 €
- Option famille : +4 €
- Ancienneté : -1 €
- Total : 17 €
Le projet contient 18 tests couvrant :
- ✅ Calcul de prime avec différentes combinaisons
- ✅ Application correcte de chaque règle métier
- ✅ Validation des entrées (âge, ancienneté)
- ✅ Gestion des cas limites
- ✅ Endpoints HTTP (POST /quote, GET /health, POST /admin/reset)
- ✅ Validation des erreurs 400
- ✅ Authentification admin
- ✅ Scénarios complexes
# Exécuter tous les tests
dotnet test
# Avec détails
dotnet test --logger "console;verbosity=detailed"
# Avec couverture de code
dotnet test --collect:"XPlat Code Coverage"- .NET 10 - Framework principal
- ASP.NET Core Minimal API - API REST
- Entity Framework Core In-Memory - Base de données
- Swashbuckle (Swagger) - Documentation OpenAPI
- xUnit - Framework de tests
- Microsoft.AspNetCore.Mvc.Testing - Tests d'intégration
{
"age": int, // 18-75
"status": string, // "SalariedEmployee" | "HouseholdEmployer"
"familyOption": bool, // Option famille
"accidentOption": bool, // Option accident
"seniorityMonths": int // Mois d'ancienneté (≥0)
}{
"premium": decimal, // Prime totale
"breakdown": [ // Détail des règles
{
"code": string, // Code de la règle
"description": string, // Description
"amount": decimal // Montant (+ ou -)
}
]
}- ✅ Validation stricte des entrées
- ✅ Authentification par token pour l'endpoint admin
- ✅ Base de données en mémoire (pas de données sensibles persistées)
- ✅ HTTPS configuré en production
⚠️ Note : Dans un environnement de production, utilisez un système d'authentification robuste (OAuth2, JWT, etc.)
Ce projet est une démonstration. Pour contribuer :
- Fork le projet
- Créez une branche feature (
git checkout -b feature/AmazingFeature) - Committez vos changements (
git commit -m 'Add AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrez une Pull Request
Voir le fichier LICENSE pour plus de détails.
- Inspiré par les activités d'IRCEM en protection sociale
- Créé avec GitHub Copilot Coding Agent
- Framework ASP.NET Core de Microsoft
Note : Cette application est une démonstration pédagogique. Elle ne doit pas être utilisée en production sans adaptations appropriées pour la sécurité, la scalabilité et la conformité réglementaire.