frontend and backend base setup

This commit is contained in:
2024-11-13 16:43:32 +01:00
parent 338adc3b6f
commit 0db2a0c647
56 changed files with 9427 additions and 0 deletions
@@ -0,0 +1,23 @@
package usecases
import (
"actatempus_backend/internal/domain/entities"
"actatempus_backend/internal/domain/repositories"
)
type RegisterUserUseCase struct {
userRepository repositories.UserRepository
}
func NewRegisterUserUseCase(userRepo repositories.UserRepository) *RegisterUserUseCase {
return &RegisterUserUseCase{userRepository: userRepo}
}
func (uc *RegisterUserUseCase) Execute(name, email, password string) error {
user := &entities.User{
Name: name,
Email: email,
Password: password, // In der Realität: Passwörter hashen
}
return uc.userRepository.Create(user)
}
@@ -0,0 +1,8 @@
package entities
type User struct {
ID string
Name string
Email string
Password string
}
@@ -0,0 +1,9 @@
package repositories
import "actatempus_backend/internal/domain/entities"
type UserRepository interface {
Create(user *entities.User) error
FindByEmail(email string) (*entities.User, error)
FindByID(id string) (*entities.User, error)
}
@@ -0,0 +1,25 @@
package config
import (
"github.com/spf13/viper"
)
type Config struct {
DatabaseURL string
Port string
}
func LoadConfig(path string) (*Config, error) {
viper.AddConfigPath(path)
viper.SetConfigName("config")
viper.SetConfigType("yaml")
if err := viper.ReadInConfig(); err != nil {
return nil, err
}
return &Config{
DatabaseURL: viper.GetString("database.url"),
Port: viper.GetString("server.port"),
}, nil
}
@@ -0,0 +1,41 @@
package persistence
import (
"actatempus_backend/internal/domain/entities"
"actatempus_backend/internal/domain/repositories"
"database/sql"
)
type PostgresUserRepository struct {
db *sql.DB
}
func NewPostgresUserRepository(db *sql.DB) repositories.UserRepository {
return &PostgresUserRepository{db: db}
}
func (r *PostgresUserRepository) Create(user *entities.User) error {
_, err := r.db.Exec("INSERT INTO users (id, name, email, password) VALUES ($1, $2, $3, $4)",
user.ID, user.Name, user.Email, user.Password)
return err
}
func (r *PostgresUserRepository) FindByEmail(email string) (*entities.User, error) {
var user entities.User
err := r.db.QueryRow("SELECT id, name, email, password FROM users WHERE email = $1", email).
Scan(&user.ID, &user.Name, &user.Email, &user.Password)
if err != nil {
return nil, err
}
return &user, nil
}
func (r *PostgresUserRepository) FindByID(id string) (*entities.User, error) {
var user entities.User
err := r.db.QueryRow("SELECT id, name, email, password FROM users WHERE id = $1", id).
Scan(&user.ID, &user.Name, &user.Email, &user.Password)
if err != nil {
return nil, err
}
return &user, nil
}
@@ -0,0 +1,22 @@
package http
import (
"actatempus_backend/internal/infrastructure/persistence/config"
"fmt"
"net/http"
)
type Server struct {
cfg *config.Config
}
func NewServer(cfg *config.Config) *Server {
return &Server{cfg: cfg}
}
func (s *Server) Start() error {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Welcome to ActaTempus!")
})
return http.ListenAndServe(fmt.Sprintf(":%s", s.cfg.Port), nil)
}