feat(online): partage client - use cases, inbox cache et import local (ticket #66)
Ajoute l'adapter API distant de partage (infrastructure/remote/share_api.dart) et les use cases associés (application/use_cases.dart), avec cache d'inbox et import local des ressources partagées acceptées. Étend le modèle Drift (migration schemaVersion 11→12) et les entités du domaine en conséquence. flutter pub get OK, build_runner OK, dart format appliqué, analyze propre (mêmes infos préexistantes), 124/124 tests verts, build APK debug validé. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -92,6 +92,57 @@ class RemoteResourceMappings extends Table {
|
||||
];
|
||||
}
|
||||
|
||||
class ShareInboxItems extends Table {
|
||||
@override
|
||||
String get tableName => 'share_inbox_items';
|
||||
|
||||
TextColumn get shareId => text()();
|
||||
TextColumn get senderUserId => text().withLength(min: 1)();
|
||||
TextColumn get resourceType => text()();
|
||||
TextColumn get payloadJson => text().withLength(min: 1)();
|
||||
TextColumn get status => text()();
|
||||
DateTimeColumn get createdAt => dateTime()();
|
||||
DateTimeColumn get updatedAt => dateTime()();
|
||||
DateTimeColumn get respondedAt => dateTime().nullable()();
|
||||
|
||||
@override
|
||||
Set<Column> get primaryKey => {shareId};
|
||||
|
||||
@override
|
||||
List<String> get customConstraints => [
|
||||
"CHECK (resource_type IN ('program', 'workoutTemplate'))",
|
||||
"CHECK (status IN ('pending', 'accepted', 'declined', 'revoked'))",
|
||||
];
|
||||
}
|
||||
|
||||
class PendingShareActions extends Table {
|
||||
@override
|
||||
String get tableName => 'pending_share_actions';
|
||||
|
||||
TextColumn get id => text()();
|
||||
TextColumn get actionType => text()();
|
||||
TextColumn get shareId => text().nullable()();
|
||||
TextColumn get resourceType => text().nullable()();
|
||||
TextColumn get payloadJson => text().nullable()();
|
||||
TextColumn get recipientEmailsJson => text().nullable()();
|
||||
DateTimeColumn get createdAt => dateTime()();
|
||||
DateTimeColumn get lastAttemptAt => dateTime().nullable()();
|
||||
IntColumn get attemptCount =>
|
||||
integer().customConstraint('NOT NULL CHECK (attempt_count >= 0)')();
|
||||
TextColumn get status => text()();
|
||||
|
||||
@override
|
||||
Set<Column> get primaryKey => {id};
|
||||
|
||||
@override
|
||||
List<String> get customConstraints => [
|
||||
"CHECK (action_type IN ('send', 'accept', 'decline', 'revoke'))",
|
||||
"CHECK (resource_type IS NULL OR resource_type IN "
|
||||
"('program', 'workoutTemplate'))",
|
||||
"CHECK (status IN ('pending', 'succeeded', 'failed'))",
|
||||
];
|
||||
}
|
||||
|
||||
class MediaAssets extends SyncableTable {
|
||||
@override
|
||||
String get tableName => 'media_assets';
|
||||
|
||||
Reference in New Issue
Block a user