64 lines
1.1 KiB
Go
64 lines
1.1 KiB
Go
package repository
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
"gitea.qpismont.fr/qpismont/trepa/internal/accounts/domain"
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
type Repository struct {
|
|
db *sqlx.DB
|
|
}
|
|
|
|
func NewRepository(db *sqlx.DB) domain.AccountRepository {
|
|
return &Repository{db: db}
|
|
}
|
|
|
|
func (r *Repository) Insert(account domain.Account) (int, error) {
|
|
var id int
|
|
|
|
stmt, err := r.db.Prepare(SqlInsert)
|
|
if err != nil {
|
|
return id, err
|
|
}
|
|
|
|
defer stmt.Close()
|
|
|
|
err = stmt.QueryRow(account.Username, account.Password, account.RoleId).Scan(&id)
|
|
if err != nil {
|
|
return id, err
|
|
}
|
|
|
|
return id, nil
|
|
}
|
|
|
|
func (r *Repository) FetchOneById(id int) (*domain.Account, error) {
|
|
var account domain.Account
|
|
|
|
err := r.db.Get(&account, SqlFetchOneById, id)
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
return nil, nil
|
|
} else {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return &account, nil
|
|
}
|
|
|
|
func (r *Repository) FetchOneByUsername(username string) (*domain.Account, error) {
|
|
var account domain.Account
|
|
|
|
err := r.db.Get(&account, SqlFetchOneByUsername, username)
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
return nil, nil
|
|
} else {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return &account, nil
|
|
}
|