import 'dart:io'; import 'package:backend/authenticator.dart'; import 'package:dart_frog/dart_frog.dart'; import 'package:logging/logging.dart'; import 'package:shared_models/user.dart'; final log = Logger('join_room/'); Future<Response> onRequest(RequestContext context) async { // Only allow POST requests if (context.request.method != HttpMethod.post) { return Response(statusCode: HttpStatus.methodNotAllowed); } try { // Parse the request body final body = await context.request.json(); final joinRoomRequest = JoinRoomRequest.fromJson(body as Map<String, dynamic>); // Generate token final authenticator = context.read<Authenticator>(); final (token, user) = await authenticator.generateToken(joinRoomRequest); if (token == null || user == null) { final body = CreateUserResponse( success: false, token: null, error: user == null ? 'Room ${joinRoomRequest.roomCode} requested is not available' : 'Unexpected error occurred', uuid: null, ).toJson(); return Response.json( statusCode: user == null ? HttpStatus.badRequest : HttpStatus.internalServerError, body: body, ); } // Return the token return Response.json( body: CreateUserResponse(token: token, success: true, uuid: user.uuid).toJson(), ); } catch (e) { log.severe('Error:', e, StackTrace.current); final body = CreateUserResponse(success: false, token: null, error: 'Internal server error', uuid: null).toJson(); return Response.json( statusCode: HttpStatus.internalServerError, body: body, ); } }