38 lines
1.1 KiB
Dart
38 lines
1.1 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:cinema/feature/poster/models/poster_request.schema.dart';
|
|
import 'package:injectable/injectable.dart';
|
|
import 'package:shelf/shelf.dart';
|
|
import 'package:shelf_router/shelf_router.dart';
|
|
|
|
part 'poster.service.g.dart';
|
|
|
|
@injectable
|
|
class PosterService {
|
|
@Route.get('/')
|
|
Future<Response> listPosters(Request request) async {
|
|
return Response.ok('deprecated poster endpoint. use POST /poster instead');
|
|
}
|
|
|
|
@Route.post('/')
|
|
Future<Response> createPoster(Request request) async {
|
|
final payload = await request.readAsString();
|
|
final body = jsonDecode(payload);
|
|
final params = posterSchema.safeParse(body);
|
|
if (!params.success) {
|
|
return Response(
|
|
400,
|
|
body: jsonEncode({
|
|
'error': 'Invalid request',
|
|
'details': params.error?.messages,
|
|
}),
|
|
headers: {'Content-Type': 'application/json'},
|
|
);
|
|
}
|
|
return Response.ok(jsonEncode(params.data), headers: {'Content-Type': 'application/json'});
|
|
}
|
|
|
|
// Create router using the generate function defined in 'poster.g.dart'.
|
|
Router get router => _$PosterServiceRouter(this);
|
|
}
|