package turso import ( "github.com/jmoiron/sqlx" "trankilou.fr/lassistanoque/backend/internal/adapter/database/dberrors" "trankilou.fr/lassistanoque/backend/internal/domain" "trankilou.fr/lassistanoque/backend/internal/utility" ) type TursoUserRepository struct { DB *sqlx.DB } func (ur *TursoUserRepository) FindUser(id string) (*domain.User, error) { var user domain.User err := ur.DB.Get(&user, "select * from users where id=$1", id) return &user, err } func (ur *TursoUserRepository) FindUserByEmail(email string) (*domain.User, error) { var user domain.User err := ur.DB.Get(&user, "select * from users where email=$1", email) return &user, err } func (ur *TursoUserRepository) CountUsers() (int, error) { var count int err := ur.DB.Get(&count, "select count(*) from users") return count, err } func (ur *TursoUserRepository) ListUsers() ([]*domain.User, error) { var users []*domain.User err := ur.DB.Select(&users, "select * from users order by lastname, firstname") return users, err } func (ur *TursoUserRepository) CreateUser(user *domain.User) (*domain.User, error) { user.ID = utility.GenID() user.VersionId = utility.GenID() _, err := ur.DB.NamedExec( `insert into users (id, email, firstname, lastname, enabled, password, administrator, _version) values (:id, :email, :firstname, :lastname, :enabled, :password, :administrator, :_version)`, user) if err != nil { return nil, err } return user, nil } func (ur *TursoUserRepository) UpdateUser(user *domain.User) (*domain.User, error) { newVersion := utility.GenID() res, err := ur.DB.Exec( `update users set email=$1, firstname=$2, lastname=$3, enabled=$4, administrator=$5 _version=:$6 where id=$7 and _version=$8`, user.Email, user.Firstname, user.Lastname, user.Enabled, user.Administrator, newVersion, user.ID, user.VersionId, ) if err != nil { return nil, err } if count, _ := res.RowsAffected(); count == 0 { return nil, dberrors.ErrNoRowUpdated } user.VersionId = newVersion return user, nil } func (ur *TursoUserRepository) DeleteUser(id string) error { res, err := ur.DB.Exec("delete from users where id=$1", id) if count, _ := res.RowsAffected(); count == 0 { return dberrors.ErrNoRowUpdated } return err }