lens @ master

  1//go:build unit
  2
  3package service
  4
  5import (
  6	"context"
  7	"errors"
  8
  9	"git.sr.ht/~gabrielgio/img/pkg/database/repository"
 10)
 11
 12type (
 13	User struct {
 14		ID       uint
 15		Username string
 16		Name     string
 17		Password []byte
 18		IsAdmin  bool
 19		Path     string
 20	}
 21
 22	Users map[uint]*User
 23
 24	UserRepository struct {
 25		icount uint
 26		users  Users
 27	}
 28)
 29
 30var _ repository.UserRepository = &UserRepository{}
 31
 32var _ repository.AuthRepository = &UserRepository{}
 33
 34func NewUserRepository() *UserRepository {
 35	return &UserRepository{
 36		users: make(map[uint]*User),
 37	}
 38}
 39
 40func (u *User) ToModel() *repository.User {
 41	return &repository.User{
 42		ID:       u.ID,
 43		Username: u.Username,
 44		Name:     u.Name,
 45		IsAdmin:  u.IsAdmin,
 46		Path:     u.Path,
 47	}
 48}
 49
 50func (u Users) ToModels() []*repository.User {
 51	users := make([]*repository.User, 0, len(u))
 52	for _, i := range u {
 53		users = append(users, i.ToModel())
 54	}
 55	return users
 56}
 57
 58func (u *UserRepository) Get(ctx context.Context, id uint) (*repository.User, error) {
 59	if user, ok := u.users[id]; ok {
 60		return user.ToModel(), nil
 61	}
 62
 63	return nil, errors.New("Not Found")
 64}
 65
 66func (u *UserRepository) List(_ context.Context) ([]*repository.User, error) {
 67	return u.users.ToModels(), nil
 68}
 69
 70func (u *UserRepository) Create(_ context.Context, createUser *repository.CreateUser) (uint, error) {
 71	id := u.furtherID()
 72	u.users[id] = &User{
 73		ID:       id,
 74		Name:     createUser.Name,
 75		Username: createUser.Username,
 76		Path:     createUser.Path,
 77		Password: createUser.Password,
 78	}
 79	return id, nil
 80}
 81
 82func (u *UserRepository) Update(_ context.Context, id uint, updateUser *repository.UpdateUser) error {
 83	user, ok := u.users[id]
 84	if !ok {
 85		return errors.New("Invalid ID")
 86	}
 87
 88	user.Name = updateUser.Name
 89	user.Username = updateUser.Username
 90	return nil
 91}
 92
 93func (u *UserRepository) Any(_ context.Context) (bool, error) {
 94	return len(u.users) > 0, nil
 95}
 96
 97func (u *UserRepository) GetIDByUsername(ctx context.Context, username string) (uint, error) {
 98	for id, u := range u.users {
 99		if u.Username == username {
100			return id, nil
101		}
102	}
103
104	return 0, errors.New("Not Found")
105}
106
107func (u *UserRepository) GetPassword(ctx context.Context, id uint) ([]byte, error) {
108	if user, ok := u.users[id]; ok {
109		return []byte(user.Password), nil
110	}
111
112	return nil, errors.New("Not Found")
113}
114
115func (u *UserRepository) furtherID() uint {
116	u.icount++
117	return u.icount
118}
119
120func (u *UserRepository) GetPathFromUserID(ctx context.Context, id uint) (string, error) {
121	if user, ok := u.users[id]; ok {
122		return user.Path, nil
123	}
124
125	return "", errors.New("Not Found")
126}
127
128func (u *UserRepository) UpdatePassword(ctx context.Context, id uint, password []byte) error {
129	panic("not implemented") // TODO: Implement
130}
131
132func (u *UserRepository) Delete(ctx context.Context, id uint) error {
133	panic("not implemented") // TODO: Implement
134}