38 lines
1.2 KiB
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(),
|
|
);
|
|
|
|
if (response.statusCode == 200 && response.data != null) {
|
|
final joinResponse = JoinRoomResponse.fromJson(response.data!);
|
|
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');
|
|
}
|
|
} catch (e) {
|
|
logger.severe('Failed to join room', e, StackTrace.current);
|
|
return null;
|
|
}
|
|
return null;
|
|
}
|