Guide Projets Clients & dynors-core (version synthèse)
Cette page résume le document interne core/GUIDE_UTILISATION_CORE_PROJETS_CLIENTS.md en se concentrant sur ce qu’un architecte ou dev doit faire concrètement pour démarrer une app client.
Pour les détails complets et tous les exemples de code, se référer au fichier source dans le repo dynors-core.
1. Rappels d’architecture
- Tous les projets clients s’appuient sur :
dynors-dbpour le multi‑tenant (tenants, tiers, schémas, quotas).dynors-securitypour l’authentification & autorisation (JWT, OAuth2, DB auth).dynors-commonspour les utilitaires & exceptions.dynors-loggingpour les logs centralisés.- Les tenants sont créés et configurés par TAKKU. L’application cliente consomme ensuite le tenant affecté.
2. Dépendances à ajouter
Dans le build.gradle.kts du projet client :
dependencies {
implementation(platform("com.dynors:dynors-core-bom:1.0.0"))
implementation("com.dynors:dynors-commons")
implementation("com.dynors:dynors-security")
implementation("com.dynors:dynors-db")
implementation("com.dynors:dynors-logging:1.0.0-SNAPSHOT")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.postgresql:postgresql")
}
Et configuration du repository GitLab Maven Registry (voir CONFIGURATION_CLIENT_PROJETS.md).
3. Configuration Spring Boot minimale
- Classe Application : inclure les packages core dans
scanBasePackages,@EntityScan,@EnableJpaRepositories. application.yml:- Datasource PostgreSQL
dynors.db:multi-tenant=true,default-strategy=schema,default-tier=TIER_2dynors.security: JWT activé, features selon le besoindynors.logging:provider=consoleen dev,provider=sentryen prod.
4. Entités & Repositories
- En stratégie
SCHEMA_DEDICATED(cas des projets clients), les entités n’ont pas besoin detenant_id: l’isolation se fait par schéma. - Les repositories doivent étendre
TenantAwareRepository<Entité, UUID>pour bénéficier de l’isolation automatique.
Exemple :
@Entity
@Table(name = "customers")
public class Customer { /* ... */ }
@Repository
public interface CustomerRepository extends TenantAwareRepository<Customer, UUID> {
Optional<Customer> findByEmail(String email);
}
5. Services métier & TenantContext
- Utiliser
TenantContextServicepour : - récupérer le tenant courant,
- éventuellement l’exposer dans les logs ou les règles métier.
@Autowired
private TenantContextService tenantContextService;
public String getCurrentTenantCode() {
return tenantContextService.getCurrentTenant();
}
6. Sécurité (dynors-security)
- Configurer Spring Security pour utiliser :
- un endpoint
/api/auth/loginqui génère un JWT viaJwtTokenProvider. - un filtre
JwtAuthFilterfourni pardynors-security. - Les règles d’accès (URL, rôles, permissions) sont pilotées par
TenantSecurityConfigurationet peuvent être configurées par TAKKU.
Idée clé : vos apps clients ne gèrent pas LDAP. LDAP est réservé aux apps internes (RAGNAR, TAKKU). Les apps clients utilisent dynors-security (JWT/OAuth2/DB).
7. Logging centralisé (dynors-logging)
- Injecter
DynorsLoggerdans les services :
@Autowired
private DynorsLogger logger;
- Utiliser
info,warning,error,debugavec un contexte riche (tenant, service, action, ids métier). - Changer de provider (console → sentry → noop) se fait dans
application.ymlsans changer le code.
8. Migrations & tables (Flyway)
- Placer les scripts dans
src/main/resources/db/migration. - Ne pas créer de schéma dans les migrations : le schéma tenant est géré par
dynors-db. - Les migrations créent uniquement les tables métier (
customers,orders, etc.).
9. Checklist architecte pour un nouveau projet client
- [ ] Tenant créé et configuré via TAKKU.
- [ ] Projet créé (ou généré) avec dépendances core + logging.
- [ ]
application.ymlconforme aux conventions dynors-db / dynors-security / dynors-logging. - [ ] Modèle métier isolé par schéma (pas de tenant_id manuel en SCHEMA_DEDICATED).
- [ ] Authentification via dynors-security (pas de LDAP côté client).
- [ ] Logging centralisé en place (au moins erreurs critiques + événements métier importants).
- [ ] Migrations Flyway prêtes et testées sur un schéma tenant.