Gisle Aune
5 years ago
2 changed files with 105 additions and 9 deletions
@ -0,0 +1,94 @@ |
|||
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 |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue