feat(online): session compte, stockage sécurisé et adapter API (ticket #64)

Ajoute l'adapter API distant (infrastructure/remote/auth_api.dart,
http_api_client.dart) et le stockage sécurisé du token d'auth
(infrastructure/security/secure_storage_auth_token_store.dart), câblés
dans app_bootstrap.dart. Étend le modèle Drift (migration
schemaVersion 9→10) et la couche application (ports, use cases,
entités) pour la session de compte. flutter pub get OK (ajout http,
flutter_secure_storage), build_runner OK, dart format appliqué,
analyze propre (mêmes infos préexistantes), 109/109 tests verts,
build APK debug validé. Premier ticket du chantier "Ajouter les
features serveur au client" (#63).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-19 21:25:49 +02:00
parent a557708273
commit e60c8bbdb8
19 changed files with 1799 additions and 7 deletions

View File

@ -24,6 +24,30 @@ abstract class SyncableTable extends Table {
List<String> get customConstraints => const [];
}
class OnlineAccountSessions extends Table {
@override
String get tableName => 'online_account_sessions';
TextColumn get id => text()();
TextColumn get serverUserId => text().withLength(min: 1)();
TextColumn get email => text().withLength(min: 1)();
TextColumn get displayName => text().nullable()();
BoolColumn get isLoggedIn => boolean()();
DateTimeColumn get createdAt => dateTime()();
DateTimeColumn get updatedAt => dateTime()();
DateTimeColumn get lastAuthenticatedAt => dateTime().nullable()();
@override
Set<Column> get primaryKey => {id};
@override
List<String> get customConstraints => [
'UNIQUE (server_user_id)',
'CHECK (length(trim(email)) > 0)',
'CHECK (display_name IS NULL OR length(trim(display_name)) > 0)',
];
}
class MediaAssets extends SyncableTable {
@override
String get tableName => 'media_assets';