feat: BackupService real pg_dump, OrganisationService region stats, SystemConfigService overrides

- BackupService: DB-persisted metadata (BackupRecord/BackupConfig entities + V16 Flyway migration),
  real pg_dump execution via ProcessBuilder, soft-delete on deleteBackup, pg_restore manual guidance
- OrganisationService: repartitionRegion now queries Adresse entities (was Map.of() stub)
- SystemConfigService: in-memory config overrides via AtomicReference (no DB dependency)
- SystemMetricsService: null-guard on MemoryMXBean in getSystemStatus() (fixes test NPE)
- Souscription workflow: SouscriptionService, SouscriptionResource, FormuleAbonnementRepository,
  V11 Flyway migration, admin REST clients
- Flyway V8-V15: notes membres, types référence, type orga constraint, seed roles,
  première connexion, Wave checkout URL, Wave telephone column length fix
- .gitignore: added uploads/ and .claude/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
dahoud
2026-04-04 16:14:30 +00:00
parent 9c66909eff
commit e00a9301d8
98 changed files with 5571 additions and 636 deletions

View File

@@ -0,0 +1,52 @@
package dev.lions.unionflow.server.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "backup_config")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class BackupConfig extends BaseEntity {
@Column(nullable = false)
@Builder.Default
private Boolean autoBackupEnabled = true;
/** HOURLY, DAILY, WEEKLY */
@Column(nullable = false, length = 20)
@Builder.Default
private String frequency = "DAILY";
@Column(nullable = false)
@Builder.Default
private Integer retentionDays = 30;
/** HH:mm format, e.g. "02:00" */
@Column(nullable = false, length = 10)
@Builder.Default
private String backupTime = "02:00";
@Column(nullable = false)
@Builder.Default
private Boolean includeDatabase = true;
@Column(nullable = false)
@Builder.Default
private Boolean includeFiles = false;
@Column(nullable = false)
@Builder.Default
private Boolean includeConfiguration = true;
/** Absolute path where backup files are stored */
@Column(length = 500)
private String backupDirectory;
}