91 lines
2.2 KiB
Go
91 lines
2.2 KiB
Go
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
|
|
}
|