fartstack/frontend/lib/features/room/service/game_room.dart

38 lines
1.2 KiB
Dart

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;
}