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,13 @@
import 'package:backend_dart/infrastructure/persistence/db/client.dart';
import 'package:backend_dart/infrastructure/persistence/prisma_user_repository.dart';
class Database {
final prisma = PrismaClient();
late final PrismaUserRepository users;
Database() {
users = PrismaUserRepository(prisma);
print('Database initialized');
}
}
@@ -0,0 +1,8 @@
import 'package:backend_dart/infrastructure/persistence/database.dart';
import 'package:riverpod/riverpod.dart';
final databaseProvider = Provider<Database>((ref) {
// Hier die Datenbankverbindung initialisieren
final database = Database();
return database;
});
@@ -1,60 +0,0 @@
import 'package:backend_dart/domain/entities/user.dart';
import 'package:backend_dart/domain/repositories/user_repository.dart';
import 'package:postgres/postgres.dart';
class PostgresUserRepository implements UserRepository {
final PostgreSQLConnection connection;
PostgresUserRepository(this.connection);
@override
Future<void> create(User user) async {
await connection.query(
'INSERT INTO users (id, name, email, password) VALUES (@id, @name, @mail, @pwd)',
substitutionValues: {
'id': user.id,
'name': user.name,
'mail': user.email,
'pwd': user.password,
},
);
}
@override
Future<User?> findByEmail(String email) async {
final results = await connection.query(
'SELECT id, name, email, password FROM users WHERE email = @mail',
substitutionValues: {'mail': email},
);
if (results.isNotEmpty) {
final row = results.first;
return User(
id: row[0],
name: row[1],
email: row[2],
password: row[3],
);
}
return null;
}
@override
Future<User?> findById(String id) async {
final results = await connection.query(
'SELECT id, name, email, password FROM users WHERE id = @id',
substitutionValues: {'id': id},
);
if (results.isNotEmpty) {
final row = results.first;
return User(
id: row[0],
name: row[1],
email: row[2],
password: row[3],
);
}
return null;
}
}
@@ -0,0 +1,57 @@
import 'package:backend_dart/domain/entities/user.dart';
import 'package:backend_dart/domain/repositories/user_repository.dart';
import 'package:backend_dart/infrastructure/persistence/db/prisma.dart';
import 'package:orm/orm.dart';
import 'db/client.dart';
class PrismaUserRepository implements UserRepository {
final PrismaClient prisma;
PrismaUserRepository(this.prisma);
@override
Future<void> create(User user) async {
if (user.password == null) {
throw Exception('Password is required');
}
prisma.user.create(
data: PrismaUnion.$1(UserCreateInput(
id: user.id,
name: user.name,
email: user.email,
password: user.password!,
)));
}
@override
Future<User?> findByEmail(String email) async {
final user =
await prisma.user.findUnique(where: UserWhereUniqueInput(email: email));
if (user == null) {
return null;
}
return User(
id: user.id!,
name: user.name!,
email: user.email!,
password: user.password,
);
}
@override
Future<User?> findById(String id) async {
final user =
await prisma.user.findUnique(where: UserWhereUniqueInput(id: id));
if (user == null) {
return null;
}
return User(
id: user.id!,
name: user.name!,
email: user.email!,
password: user.password,
);
}
}