feat(server): partage ciblé de programmes et séances entre comptes (ticket #51)
Ajoute l'endpoint api/share_api.dart, les use cases de partage (application/share_use_cases.dart) et l'adapter Postgres (infrastructure/postgres/share_repository.dart). L'acceptation d'un partage crée une nouvelle ressource synced_resources avec de nouveaux IDs pour le destinataire, sans jamais modifier la ressource source de l'émetteur ; gestion des conflits révoqué/déjà répondu. dart pub get OK, dart analyze clean, dart test 24/24 vert. Use case d'acceptation relu manuellement et jugé correct ; pas de test de bout en bout contre un vrai PostgreSQL faute d'accès Docker dans ce sandbox. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -4,9 +4,14 @@ import 'package:shelf/shelf.dart';
|
||||
import 'package:shelf_router/shelf_router.dart';
|
||||
|
||||
import 'auth_api.dart';
|
||||
import 'share_api.dart';
|
||||
import 'sync_api.dart';
|
||||
|
||||
Handler buildApiHandler({AuthApi? authApi, SyncApi? syncApi}) {
|
||||
Handler buildApiHandler({
|
||||
AuthApi? authApi,
|
||||
SyncApi? syncApi,
|
||||
ShareApi? shareApi,
|
||||
}) {
|
||||
final router = Router()
|
||||
..get('/health', (Request request) {
|
||||
return Response.ok(
|
||||
@ -49,5 +54,39 @@ Handler buildApiHandler({AuthApi? authApi, SyncApi? syncApi}) {
|
||||
);
|
||||
}
|
||||
|
||||
if (shareApi != null) {
|
||||
router
|
||||
..post(
|
||||
'/shares',
|
||||
authenticationMiddleware(shareApi.authenticateRequest.execute)(
|
||||
shareApi.create,
|
||||
),
|
||||
)
|
||||
..get(
|
||||
'/shares/inbox',
|
||||
authenticationMiddleware(shareApi.authenticateRequest.execute)(
|
||||
shareApi.inbox,
|
||||
),
|
||||
)
|
||||
..post(
|
||||
'/shares/<id>/accept',
|
||||
authenticationMiddleware(shareApi.authenticateRequest.execute)(
|
||||
(request) => shareApi.accept(request, request.params['id']!),
|
||||
),
|
||||
)
|
||||
..post(
|
||||
'/shares/<id>/decline',
|
||||
authenticationMiddleware(shareApi.authenticateRequest.execute)(
|
||||
(request) => shareApi.decline(request, request.params['id']!),
|
||||
),
|
||||
)
|
||||
..post(
|
||||
'/shares/<id>/revoke',
|
||||
authenticationMiddleware(shareApi.authenticateRequest.execute)(
|
||||
(request) => shareApi.revoke(request, request.params['id']!),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return const Pipeline().addMiddleware(logRequests()).addHandler(router.call);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user