54 lines
1.5 KiB
Dart
54 lines
1.5 KiB
Dart
import 'package:shelf/shelf.dart';
|
|
import 'package:shelf_router/shelf_router.dart';
|
|
import '../database/database_provider.dart';
|
|
import 'dart:convert';
|
|
|
|
class UserRoutes {
|
|
final DatabaseProvider database;
|
|
|
|
UserRoutes(this.database);
|
|
|
|
Router get routes {
|
|
final router = Router();
|
|
router.get('/user', _getAllUsers);
|
|
router.post('/user', _createUser);
|
|
router.put('/user/<id>', _updateUser);
|
|
router.delete('/user/<id>', _deleteUser);
|
|
return router;
|
|
}
|
|
|
|
Future<Response> _getAllUsers(Request request) async {
|
|
final users = await database.getAllUsers();
|
|
return Response(200, body: jsonEncode(users.map((u) => u.toMap()).toList()));
|
|
}
|
|
|
|
Future<Response> _createUser(Request request) async {
|
|
final body = await request.readAsString();
|
|
final data = jsonDecode(body);
|
|
|
|
final login = data['login'];
|
|
final password = data['password'];
|
|
|
|
final user = await database.createUser(login, password);
|
|
return Response(201, body: jsonEncode(user.toMap()));
|
|
}
|
|
|
|
Future<Response> _updateUser(Request request) async {
|
|
final id = int.parse(request.params['id']!);
|
|
|
|
final body = await request.readAsString();
|
|
final data = jsonDecode(body);
|
|
|
|
final login = data['login'];
|
|
final password = data['password'];
|
|
|
|
final user = await database.updateUser(id, login, password);
|
|
return Response(200, body: jsonEncode(user.toMap()));
|
|
}
|
|
|
|
Future<Response> _deleteUser(Request request) async {
|
|
final id = int.parse(request.params['id']!);
|
|
await database.deleteUser(id);
|
|
return Response(204);
|
|
}
|
|
} |