Files
2026-08-08 23:12:37 +02:00

144 lines
4.5 KiB
Go

package turso
import (
"database/sql"
"log"
"trankilou.fr/lassistanoque/backend/internal/domain"
"gitea.trankilou.fr/fabien/lasebuche"
)
type TursoUserRepository struct {
DB *sql.DB
UserTable lasebuche.Table[domain.User]
TeamTable lasebuche.Table[domain.Team]
UserTeamTable lasebuche.Table[domain.UserTeam]
AddressTable lasebuche.Table[domain.UserAddress]
}
func NewTursoUserRepository(db *sql.DB) *TursoUserRepository {
dialect := lasebuche.NewSqliteDialect()
userTable, err := lasebuche.NewTable[domain.User](db, dialect, "users")
if err != nil {
log.Fatalf("error creating lasebuche user table")
}
teamTable, err := lasebuche.NewTable[domain.Team](db, dialect, "teams")
if err != nil {
log.Fatalf("error creating lasebuche team table")
}
userTeamTable, err := lasebuche.NewTable[domain.UserTeam](db, dialect, "user_teams")
if err != nil {
log.Fatalf("error creating lasebuche team table")
}
userAddressTable, err := lasebuche.NewTable[domain.UserAddress](db, dialect, "user_addresses")
if err != nil {
log.Fatalf("error creating lasebuche team table")
}
return &TursoUserRepository{
DB: db,
UserTable: userTable,
TeamTable: teamTable,
UserTeamTable: userTeamTable,
AddressTable: userAddressTable,
}
}
func (ur *TursoUserRepository) FindUser(id string) (*domain.User, error) {
return ur.UserTable.Get(id)
}
func (ur *TursoUserRepository) FindUserByEmail(email string) (*domain.User, error) {
return ur.UserTable.SelectOne("email=$1", email)
}
func (ur *TursoUserRepository) ListUsers() ([]*domain.User, error) {
return ur.UserTable.SelectWhere("")
}
func (ur *TursoUserRepository) CreateUser(user *domain.User) (*domain.User, error) {
return ur.UserTable.Insert(user)
}
func (ur *TursoUserRepository) UpdateUser(user *domain.User) (*domain.User, error) {
return ur.UserTable.Update(user)
}
func (ur *TursoUserRepository) DeleteUser(id string) error {
return ur.UserTable.Delete(id)
}
func (ur *TursoUserRepository) FindTeam(userid string, teamid string) (*domain.Team, error) {
return ur.TeamTable.SelectOne("id=$1 and user_id=$2", teamid, userid)
}
func (ur *TursoUserRepository) ListTeams(userid string) ([]*domain.Team, error) {
return ur.TeamTable.SelectWhere("user_id=$1", userid)
}
func (ur *TursoUserRepository) CreateTeam(userid string, team *domain.Team) (*domain.Team, error) {
// TODO : gérér dans une transaction
// TODO : déplacer dans le service
team, err := ur.TeamTable.Insert(team)
if err != nil {
return nil, err
}
userTeam := &domain.UserTeam{
UserID: userid,
TeamID: team.ID,
Administrator: true,
}
_, err = ur.UserTeamTable.Insert(userTeam)
if err != nil {
return nil, err
}
return team, nil
}
func (ur *TursoUserRepository) UpdateTeam(userid string, team *domain.Team) (*domain.Team, error) {
return ur.TeamTable.Update(team)
}
func (ur *TursoUserRepository) DeleteTeam(userid string, teamid string) error {
return ur.TeamTable.Delete(teamid)
}
func (ur *TursoUserRepository) FindUserTeam(userid string, teamid string) (*domain.UserTeam, error) {
return ur.UserTeamTable.SelectOne("team_id=$1 and user_id=$2", teamid, userid)
}
func (ur *TursoUserRepository) ListUserTeams(userid string) ([]*domain.UserTeam, error) {
return ur.UserTeamTable.SelectWhere("user_id=$1", userid)
}
func (ur *TursoUserRepository) CreateUserTeam(userid string, team *domain.UserTeam) (*domain.UserTeam, error) {
return ur.UserTeamTable.Insert(team)
}
func (ur *TursoUserRepository) UpdateUserTeam(userid string, team *domain.UserTeam) (*domain.UserTeam, error) {
return ur.UserTeamTable.Update(team)
}
func (ur *TursoUserRepository) DeleteUserTeam(userid string, teamid string) error {
return ur.UserTeamTable.Delete(teamid)
}
func (ur *TursoUserRepository) PopulateUserWithTeams(user *domain.User) (*domain.UserWithTeams, error) {
return nil, nil
}
func (ur *TursoUserRepository) ListUserAddresses(id string) ([]*domain.UserAddress, error) {
return ur.AddressTable.SelectWhere("user_id=$1", id)
}
func (ur *TursoUserRepository) CreateUserAddress(userid string, addr *domain.UserAddress) (*domain.UserAddress, error) {
addr.UserID = userid
return ur.AddressTable.Insert(addr)
}
func (ur *TursoUserRepository) UpdateUserAddress(userid string, addr *domain.UserAddress) (*domain.UserAddress, error) {
return ur.AddressTable.Update(addr)
}
func (ur *TursoUserRepository) DeleteUserAddress(userid string, addrID string) error {
return ur.AddressTable.DeleteWhere("id=$1 and user_id=$2", addrID, userid)
}