You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.1 KiB
94 lines
2.1 KiB
package sqlite
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.aiterp.net/lucifer/lucifer/models"
|
|
)
|
|
|
|
// UserRepository is a sqlite database.
|
|
var UserRepository = &userRepository{}
|
|
|
|
type userRepository struct{}
|
|
|
|
func (repo *userRepository) FindByID(ctx context.Context, id int) (models.User, error) {
|
|
row := db.QueryRowxContext(ctx, "SELECT * FROM user WHERE id=?", id)
|
|
if err := row.Err(); err != nil {
|
|
return models.User{}, err
|
|
}
|
|
|
|
user := models.User{}
|
|
if err := row.StructScan(&user); err != nil {
|
|
return models.User{}, err
|
|
}
|
|
|
|
return user, nil
|
|
}
|
|
|
|
func (repo *userRepository) FindByName(ctx context.Context, name string) (models.User, error) {
|
|
row := db.QueryRowxContext(ctx, "SELECT * FROM user WHERE name=?", name)
|
|
if err := row.Err(); err != nil {
|
|
return models.User{}, err
|
|
}
|
|
|
|
user := models.User{}
|
|
if err := row.StructScan(&user); err != nil {
|
|
return models.User{}, err
|
|
}
|
|
|
|
return user, nil
|
|
}
|
|
|
|
func (repo *userRepository) List(ctx context.Context) ([]models.User, error) {
|
|
res, err := db.QueryxContext(ctx, "SELECT * FROM user")
|
|
if err != nil {
|
|
return nil, err
|
|
} else if err := res.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
users := make([]models.User, 0, 64)
|
|
for res.Next() {
|
|
user := models.User{}
|
|
if err := res.StructScan(&user); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
users = append(users, user)
|
|
}
|
|
|
|
return users, nil
|
|
}
|
|
|
|
func (repo *userRepository) Insert(ctx context.Context, user models.User) (models.User, error) {
|
|
res, err := db.NamedExecContext(ctx, "INSERT INTO user (name, hash) VALUES(:name, :hash)", user)
|
|
if err != nil {
|
|
return models.User{}, err
|
|
}
|
|
|
|
id, err := res.LastInsertId()
|
|
if err != nil {
|
|
return models.User{}, err
|
|
}
|
|
|
|
user.ID = int(id)
|
|
return user, nil
|
|
}
|
|
|
|
func (repo *userRepository) Update(ctx context.Context, user models.User) error {
|
|
_, err := db.NamedExecContext(ctx, "UPDATE user SET name=:name AND hash=:hash WHERE id=:id", user)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (repo *userRepository) Remove(ctx context.Context, user models.User) error {
|
|
_, err := db.ExecContext(ctx, "REMOVE FROM user WHERE id=?", user.ID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return err
|
|
}
|