Extraits de Code
🏗️
⬡ Snippet
Architecture Multicouches .NET
.NET / Architecture

Séparation claire en couches : Repository, Service, Controller. Pattern recommandé pour les applications métier ASP.NET Core.

C#
// Couche Repository
public interface ICommandeRepository
{
    Task<IEnumerable<Commande>> GetAllAsync();
    Task<Commande> GetByIdAsync(int id);
    Task AddAsync(Commande commande);
}

// Couche Service
public class CommandeService
{
    private readonly ICommandeRepository _repo;
    public CommandeService(ICommandeRepository repo)
        => _repo = repo;

    public async Task<Commande> GetAsync(int id)
        => await _repo.GetByIdAsync(id)
           ?? throw new NotFoundException($"Commande {id} introuvable");
}

// Couche Controller
[ApiController, Route("api/[controller]")]
public class CommandesController : ControllerBase
{
    private readonly CommandeService _svc;
    public CommandesController(CommandeService svc) => _svc = svc;

    [HttpGet("{id}")]
    public async Task<IActionResult> Get(int id)
        => Ok(await _svc.GetAsync(id));
}
🔄
⬡ Snippet
Migration Delphi → C#
Migration Legacy

Exemple concret de migration d'une fonction de calcul de paie Delphi vers C# moderne, avec gestion d'erreurs améliorée.

Delphi → C#
{ AVANT — Delphi }
function CalculerSalaire(brut: Double; taux: Double): Double;
begin
  if taux <= 0 then
    ShowMessage('Taux invalide')
  else
    Result := brut * (1 - taux / 100);
end;

// APRÈS — C# moderne
public static decimal CalculerSalaireNet(
    decimal brut, decimal tauxCotisation)
{
    if (tauxCotisation <= 0 || tauxCotisation >= 100)
        throw new ArgumentOutOfRangeException(
            nameof(tauxCotisation),
            "Le taux doit être entre 0 et 100");

    return brut * (1 - tauxCotisation / 100);
}
⬡ Snippet
API REST + JWT Auth
API REST ASP.NET Core

Mise en place d'une API sécurisée avec authentification JWT, gestion des rôles et middleware d'erreurs global.

C# — ASP.NET Core 3
// Startup.cs — Configuration JWT
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(opt => {
        opt.TokenValidationParameters = new TokenValidationParameters {
            ValidateIssuer           = true,
            ValidateAudience         = true,
            ValidateLifetime         = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer    = config["Jwt:Issuer"],
            ValidAudience  = config["Jwt:Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(
                Encoding.UTF8.GetBytes(config["Jwt:Key"]))
        };
    });

// Controller sécurisé
[Authorize(Roles = "Admin,Medecin")]
[ApiController, Route("api/[controller]")]
public class DossierMedicalController : ControllerBase
{
    [HttpGet("{patientId}")]
    public async Task<IActionResult> GetDossier(int patientId)
    {
        var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
        return Ok(await _service.GetDossierAsync(patientId, userId));
    }
}
🗄️
⬡ Snippet
Optimisation SQL — Index & CTE
Base de données

Requête optimisée pour l'historique de transport sanitaire : CTE, index couvrant et pagination serveur.

SQL Server
-- Index couvrant sur la table Transport
CREATE INDEX IX_Transport_Date_Statut
    ON Transport (DateDepart, Statut)
    INCLUDE (PatientId, ChauffeurId, Montant);

-- Requête avec CTE + pagination
WITH TransportCTE AS (
    SELECT
        t.Id, t.DateDepart, t.Montant,
        p.Nom + ' ' + p.Prenom AS Patient,
        ROW_NUMBER() OVER (
            ORDER BY t.DateDepart DESC) AS RowNum
    FROM Transport t
    INNER JOIN Patient p ON p.Id = t.PatientId
    WHERE t.DateDepart >= DATEADD(month, -3, GETDATE())
      AND t.Statut = 'TERMINE'
)
SELECT * FROM TransportCTE
WHERE RowNum BETWEEN @PageStart AND @PageEnd;
🌐
⬡ Snippet
Service Angular + API Node.js
Full Stack

Communication entre un service Angular et une API Nest.js avec intercepteur HTTP pour la gestion des tokens.

TypeScript — Angular / Nest.js
// Angular — Intercepteur HTTP JWT
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler) {
    const token = localStorage.getItem('token');
    const authReq = token ? req.clone({
      setHeaders: { Authorization: `Bearer ${token}` }
    }) : req;
    return next.handle(authReq).pipe(
      catchError(err => err.status === 401
        ? this.auth.logout() : throwError(err))
    );
  }
}

// Nest.js — Controller sécurisé
@Controller('projets')
@UseGuards(JwtAuthGuard)
export class ProjetsController {
  @Get()
  findAll(@Request() req) {
    return this.projetsService.findAll(req.user.id);
  }
}
🤖
⬡ Snippet
Intégration IA — OpenAI dans .NET
Intelligence Artificielle

Appel à un modèle de langage depuis une API ASP.NET Core pour générer des résumés de dossiers médicaux.

C# — OpenAI SDK
// Service IA pour résumé de dossier
public class IADossierService
{
    private readonly OpenAIClient _client;

    public async Task<string> ResumerDossierAsync(
        DossierMedical dossier)
    {
        var prompt = $"""
            Résume ce dossier médical en 3 lignes :
            Patient : {dossier.Patient}
            Antécédents : {dossier.Antecedents}
            Dernière visite : {dossier.DerniereVisite}
            """;

        var response = await _client
            .GetChatClient("gpt-4o-mini")
            .CompleteChatAsync(prompt);

        return response.Value.Content[0].Text;
    }
}
Schémas d'Architecture
📐
◈ Schéma
Architecture ERP Multicouches
.NET / ERP

Vue d'ensemble de l'architecture en couches d'un ERP métier : présentation, services, données et infrastructure.

PRÉSENTATION Angular SPA · Ionic Mobile · DevExtreme UI API / SERVICES ASP.NET Core · JWT Auth · AutoMapper · FluentValidation MÉTIER Services · Règles métier · Paie INFRASTRUCTURE Repository · EF Core · Cache DONNÉES SQL Server · PostgreSQL · Lucene · Redis Cache
🔄
◈ Schéma
Stratégie de Migration Legacy
Migration Delphi → .NET

Approche par phases pour migrer un système Delphi/WinDev vers .NET Core sans interruption de service.

PHASE 1 Audit & Analyse Code + BDD + Flux PHASE 2 Couche API .NET Façade sur l'existant PHASE 3 Migration Module/Module Delphi → C# progressif SYSTÈME LEGACY Delphi / WinDev Advantage DB · HFSQL ⚠ En cours de remplacement NOUVEAU SYSTÈME ASP.NET Core 8 SQL Server · Angular ✓ Actif en production
🤖
◈ Schéma
Architecture IA dans une App Métier
I.A / ASP.NET Core

Intégration d'un LLM (OpenAI / Mistral) dans une application métier existante via une couche de service dédiée.

UTILISATEUR Angular / Ionic API .NET ASP.NET Core 3+ SERVICE IA IAService.cs 🤖 LLM OpenAI GPT-4 / Mistral Analyse · Résumé · Prédiction BASE MÉTIER SQL Server Contexte + Historique PROMPT ENRICHI = Données métier + Contexte utilisateur + Instruction IA Le LLM ne remplace pas la logique métier — il l'augmente
Démos Interactives
💰
▶ Démo
Calcul Salaire Net (Paie)
ERP / Paie

Simulation du moteur de calcul de paie — cotisations sociales, impôt et net à payer. Logique identique à TomPaie.

Résultat affiché ici…
🗄️
▶ Démo
Générateur de Requête SQL
Base de données

Génère automatiquement une requête SQL paginée et filtrée à partir de paramètres simples.

La requête SQL apparaîtra ici…
🔍
▶ Démo
Analyse de Code C# (IA)
I.A / .NET

Collez un extrait de code C# et obtenez une analyse rapide : bonnes pratiques, problèmes détectés, suggestions.

L'analyse apparaîtra ici…
Captures de Projets
🚑
◉ Capture
Gestion Transport Sanitaire
ERP Médical · Madixy

Module de planification des transports : vue planning hebdomadaire, affectation chauffeurs et facturation automatique.

app.madixy.fr / planning
🚑 Planning Transports — Semaine 12 + Nouveau LUN 18 MAR 19 MER 20 JEU 21 VEN 22 SAM 23 DIM 24 Dupont J. → CHU Martin P. → Clinique Bernard L. → EHPAD Leblanc A. → CHU Moreau C. → Dialyse Transports planifiés 47 Facturation estimée 2 340 € Chauffeurs actifs 8
🏥
◉ Capture
Dossier Médical du Travail
ERP Médical · CS Programme

Interface de gestion des dossiers salariés : visites médicales, aptitudes, vaccins et documents en un seul endroit.

medtravail.csprogramme.fr / dossier / 1042
🏥 Dossier — MARTIN Jean (ID: 1042) Visites Examens Aptitude Vaccins Documents 15/02/2025 Visite périodique APTE Dr. Rakoto 10/08/2024 Visite de reprise APTE PARTIEL Dr. Rakoto 05/02/2024 Visite périodique APTE Dr. Andria Prochaine visite 15/02/2026 Dernière aptitude APTE Nb visites 12