import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:frontend/providers/auth.dart'; import 'package:frontend/providers/dio.dart'; import 'package:logging/logging.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:shared_models/user.dart'; part 'game_room.g.dart'; final logger = Logger('services/joinRoom'); @riverpod Future<JoinRoomResponse?> joinRoom(Ref ref, {required String username, required String code}) async { final dio = ref.read(dioProvider); try { final response = await dio.post<Map<String, dynamic>>( '/join_room', data: JoinRoomRequest(username: username, roomCode: code).toJson(), ); final joinResponse = JoinRoomResponse.fromJson(response.data!); if (joinResponse.success) { if (joinResponse.token != null) { logger.fine('Setting token: ${joinResponse.token!.substring(10)}'); await ref.read(jwtNotifierProvider.notifier).setJwt(joinResponse.token!); } return joinResponse; } else { logger.warning('Could not join room: ${joinResponse.toJson()}'); } } catch (e) { logger.severe('Failed to join room', e, StackTrace.current); return null; } return null; }