dart user service, dependency injection with riverpod
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user