init project setup of the backend with dart and go as well as the frontend with nextjs

This commit is contained in:
2024-11-10 19:18:04 +01:00
parent d237057ac1
commit 338adc3b6f
15 changed files with 654 additions and 0 deletions
@@ -0,0 +1,19 @@
import 'package:backend_dart/domain/entities/user.dart';
import 'package:backend_dart/domain/repositories/user_repository.dart';
class RegisterUserUseCase {
final UserRepository userRepository;
RegisterUserUseCase(this.userRepository);
Future<void> execute(String name, String email, String password) async {
final user = User(
id: 'generated-id', // Eine Methode zur ID-Erzeugung einfügen
name: name,
email: email,
password: password, // In der Realität: Passwörter hashen
);
await userRepository.create(user);
}
}
+3
View File
@@ -0,0 +1,3 @@
int calculate() {
return 6 * 7;
}
@@ -0,0 +1,13 @@
class User {
final String id;
final String name;
final String email;
final String password;
User({
required this.id,
required this.name,
required this.email,
required this.password,
});
}
@@ -0,0 +1,7 @@
import 'package:backend_dart/domain/entities/user.dart';
abstract class UserRepository {
Future<void> create(User user);
Future<User?> findByEmail(String email);
Future<User?> findById(String id);
}
@@ -0,0 +1,20 @@
import 'dart:io';
import 'package:yaml/yaml.dart';
class Config {
final String databaseUrl;
final String port;
Config({required this.databaseUrl, required this.port});
static Future<Config> load() async {
final file = File('config.yaml');
final content = await file.readAsString();
final config = loadYaml(content);
return Config(
databaseUrl: config['database']['url'],
port: config['server']['port'],
);
}
}
@@ -0,0 +1,60 @@
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,21 @@
import 'dart:io';
import 'package:backend_dart/infrastructure/config/config.dart';
class Server {
final Config config;
Server(this.config);
Future<void> start() async {
final server =
await HttpServer.bind(InternetAddress.anyIPv4, int.parse(config.port));
print('Listening on port ${config.port}');
await for (HttpRequest request in server) {
request.response
..write('Welcome to ActaTempus!')
..close();
}
}
}