dart user service, dependency injection with riverpod

This commit is contained in:
2025-01-01 12:05:39 +00:00
parent cf3c34fb2f
commit bdd4042cef
22 changed files with 502 additions and 115 deletions
@@ -0,0 +1,27 @@
import 'package:backend_dart/infrastructure/persistence/database.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
part 'user_service.g.dart'; // generated with 'pub run build_runner build'
class UserService {
final Database database;
UserService(this.database);
@Route.get('/')
Future<Response> listUsers(Request request) async {
return Response.ok('["user1"]');
}
@Route.get('/<userId>')
Future<Response> fetchUser(Request request, String userId) async {
final result = await database.users.findById(userId);
if (result != null) {
return Response.ok(result);
}
return Response.notFound('no such user');
}
// Create router using the generate function defined in 'userservice.g.dart'.
Router get router => _$UserServiceRouter(this);
}
@@ -0,0 +1,22 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'user_service.dart';
// **************************************************************************
// ShelfRouterGenerator
// **************************************************************************
Router _$UserServiceRouter(UserService service) {
final router = Router();
router.add(
'GET',
r'/',
service.listUsers,
);
router.add(
'GET',
r'/<userId>',
service.fetchUser,
);
return router;
}
@@ -0,0 +1,8 @@
import 'package:backend_dart/application/user_service/user_service.dart';
import 'package:backend_dart/infrastructure/persistence/database_provider.dart';
import 'package:riverpod/riverpod.dart';
final userServiceProvider = Provider<UserService>((ref) {
final database = ref.read(databaseProvider);
return UserService(database);
});