further tidying up account service/repo

This commit is contained in:
ari melody 2026-07-31 11:04:36 +01:00
parent 32bcb894ee
commit 9e311df462
Signed by: ari
GPG key ID: CF99829C92678188
4 changed files with 26 additions and 38 deletions

View file

@ -18,13 +18,13 @@ type AccountRepository interface {
// Create an account, returning the new account ID. // Create an account, returning the new account ID.
Create(username string, password string, email *string, avatarURL *string) (string, error) Create(username string, password string, email *string, avatarURL *string) (string, error)
// Deprecated in favour of more specialised Change* and Remove* functions. // Deprecated in favour of more specialised Update* and Remove* functions.
Update(id string, username string, password string, email *string, avatarUrl *string) error Update(id string, username string, password string, email *string, avatarUrl *string) error
ChangeUsername(id string, username string) error UpdateUsername(id string, username string) error
ChangePassword(id string, password string) error UpdatePassword(id string, password string) error
ChangeEmail(id string, email string) error UpdateEmail(id string, email string) error
RemoveEmail(id string) error RemoveEmail(id string) error
ChangeAvatarURL(id string, avatarURL string) error UpdateAvatarURL(id string, avatarURL string) error
RemoveAvatar(id string) error RemoveAvatar(id string) error
Delete(id string) error Delete(id string) error
@ -33,6 +33,5 @@ type AccountRepository interface {
// returning the current fail count. // returning the current fail count.
IncrementFails(id string) (int, error) IncrementFails(id string) (int, error)
ResetFails(id string) error ResetFails(id string) error
Lock(id string) error SetLocked(id string, lock bool) error
Unlock(id string) error
} }

View file

@ -71,7 +71,7 @@ func (repo *AccountRepositoryMemory) Create(username string, password string, em
} }
// Intended for large profile updates. For smaller adjusments, // Intended for large profile updates. For smaller adjusments,
// more specialised Change* and Remove* functions should be used. // more specialised Update* and Remove* functions should be used.
func (repo *AccountRepositoryMemory) Update(id string, username string, password string, email *string, avatarUrl *string) error { func (repo *AccountRepositoryMemory) Update(id string, username string, password string, email *string, avatarUrl *string) error {
if account, err := repo.GetByUsername(username); err != nil { if account, err := repo.GetByUsername(username); err != nil {
return errors.New("Failed to fetch other acccounts by username") return errors.New("Failed to fetch other acccounts by username")
@ -91,7 +91,7 @@ func (repo *AccountRepositoryMemory) Update(id string, username string, password
return nil return nil
} }
func (repo *AccountRepositoryMemory) ChangeUsername(id string, username string) error { func (repo *AccountRepositoryMemory) UpdateUsername(id string, username string) error {
if account, err := repo.GetByUsername(username); err != nil { if account, err := repo.GetByUsername(username); err != nil {
return errors.New("Failed to fetch other acccounts by username") return errors.New("Failed to fetch other acccounts by username")
} else if account != nil && account.ID != id { } else if account != nil && account.ID != id {
@ -105,7 +105,7 @@ func (repo *AccountRepositoryMemory) ChangeUsername(id string, username string)
account.Username = username account.Username = username
return nil return nil
} }
func (repo *AccountRepositoryMemory) ChangePassword(id string, password string) error { func (repo *AccountRepositoryMemory) UpdatePassword(id string, password string) error {
account, err := repo.GetByID(id) account, err := repo.GetByID(id)
if err != nil { return err } if err != nil { return err }
if account == nil { return errors.New("Account does not exist") } if account == nil { return errors.New("Account does not exist") }
@ -113,7 +113,7 @@ func (repo *AccountRepositoryMemory) ChangePassword(id string, password string)
account.Password = password account.Password = password
return nil return nil
} }
func (repo *AccountRepositoryMemory) ChangeEmail(id string, email string) error { func (repo *AccountRepositoryMemory) UpdateEmail(id string, email string) error {
account, err := repo.GetByID(id) account, err := repo.GetByID(id)
if err != nil { return err } if err != nil { return err }
if account == nil { return errors.New("Account does not exist") } if account == nil { return errors.New("Account does not exist") }
@ -131,7 +131,7 @@ func (repo *AccountRepositoryMemory) RemoveEmail(id string) error {
account.Email.String = "" account.Email.String = ""
return nil return nil
} }
func (repo *AccountRepositoryMemory) ChangeAvatarURL(id string, avatarURL string) error { func (repo *AccountRepositoryMemory) UpdateAvatarURL(id string, avatarURL string) error {
account, err := repo.GetByID(id) account, err := repo.GetByID(id)
if err != nil { return err } if err != nil { return err }
if account == nil { return errors.New("Account does not exist") } if account == nil { return errors.New("Account does not exist") }
@ -182,15 +182,9 @@ func (repo *AccountRepositoryMemory) ResetFails(id string) error {
account.FailAttempts = 0 account.FailAttempts = 0
return nil return nil
} }
func (repo *AccountRepositoryMemory) Lock(id string) error { func (repo *AccountRepositoryMemory) SetLocked(id string, locked bool) error {
account, err := repo.GetByID(id) account, err := repo.GetByID(id)
if err != nil { return err } if err != nil { return err }
account.Locked = true account.Locked = locked
return nil
}
func (repo *AccountRepositoryMemory) Unlock(id string) error {
account, err := repo.GetByID(id)
if err != nil { return err }
account.Locked = false
return nil return nil
} }

View file

@ -120,21 +120,21 @@ func (repo *AccountRepositoryPostgres) Update(
return err return err
} }
func (repo *AccountRepositoryPostgres) ChangeUsername(id string, username string) error { func (repo *AccountRepositoryPostgres) UpdateUsername(id string, username string) error {
_, err := repo.db.Exec( _, err := repo.db.Exec(
"UPDATE account SET username=$2 WHERE id=$1", "UPDATE account SET username=$2 WHERE id=$1",
id, username, id, username,
) )
return err return err
} }
func (repo *AccountRepositoryPostgres) ChangePassword(id string, password string) error { func (repo *AccountRepositoryPostgres) UpdatePassword(id string, password string) error {
_, err := repo.db.Exec( _, err := repo.db.Exec(
"UPDATE account SET password=$2 WHERE id=$1", "UPDATE account SET password=$2 WHERE id=$1",
id, password, id, password,
) )
return err return err
} }
func (repo *AccountRepositoryPostgres) ChangeEmail(id string, email string) error { func (repo *AccountRepositoryPostgres) UpdateEmail(id string, email string) error {
_, err := repo.db.Exec( _, err := repo.db.Exec(
"UPDATE account SET email=$2 WHERE id=$1", "UPDATE account SET email=$2 WHERE id=$1",
id, email, id, email,
@ -145,7 +145,7 @@ func (repo *AccountRepositoryPostgres) RemoveEmail(id string) error {
_, err := repo.db.Exec("UPDATE account SET email=NULL WHERE id=$1", id) _, err := repo.db.Exec("UPDATE account SET email=NULL WHERE id=$1", id)
return err return err
} }
func (repo *AccountRepositoryPostgres) ChangeAvatarURL(id string, avatarURL string) error { func (repo *AccountRepositoryPostgres) UpdateAvatarURL(id string, avatarURL string) error {
_, err := repo.db.Exec( _, err := repo.db.Exec(
"UPDATE account SET avatar_url=$2 WHERE id=$1", "UPDATE account SET avatar_url=$2 WHERE id=$1",
id, avatarURL, id, avatarURL,
@ -175,12 +175,7 @@ func (repo *AccountRepositoryPostgres) ResetFails(id string) error {
return err return err
} }
func (repo *AccountRepositoryPostgres) Lock(id string) error { func (repo *AccountRepositoryPostgres) SetLocked(id string, locked bool) error {
_, err := repo.db.Exec("UPDATE account SET locked = true WHERE id=$1", id) _, err := repo.db.Exec("UPDATE account SET locked = $2 WHERE id=$1", id, locked)
return err
}
func (repo *AccountRepositoryPostgres) Unlock(id string) error {
_, err := repo.db.Exec("UPDATE account SET locked = false, fail_attempts = 0 WHERE id=$1", id)
return err return err
} }

View file

@ -81,7 +81,7 @@ func (s *AccountService) Create(
func (s *AccountService) ChangeUsername(id string, username string) error { func (s *AccountService) ChangeUsername(id string, username string) error {
if len(username) == 0 { return errors.New("Username cannot be empty") } if len(username) == 0 { return errors.New("Username cannot be empty") }
if err := s.repo.ChangeUsername(id, username); err != nil { if err := s.repo.UpdateAvatarURL(id, username); err != nil {
return err return err
} }
@ -90,7 +90,7 @@ func (s *AccountService) ChangeUsername(id string, username string) error {
} }
func (s *AccountService) ChangePassword(id string, password string) error { func (s *AccountService) ChangePassword(id string, password string) error {
if len(password) == 0 { return errors.New("Password cannot be empty") } if len(password) == 0 { return errors.New("Password cannot be empty") }
if err := s.repo.ChangePassword(id, password); err != nil { if err := s.repo.UpdateAvatarURL(id, password); err != nil {
return err return err
} }
@ -99,7 +99,7 @@ func (s *AccountService) ChangePassword(id string, password string) error {
} }
func (s *AccountService) ChangeEmail(id string, email string) error { func (s *AccountService) ChangeEmail(id string, email string) error {
if len(email) == 0 { return s.repo.RemoveEmail(id) } if len(email) == 0 { return s.repo.RemoveEmail(id) }
if err := s.repo.ChangeEmail(id, email); err != nil { if err := s.repo.UpdateAvatarURL(id, email); err != nil {
return err return err
} }
@ -108,7 +108,7 @@ func (s *AccountService) ChangeEmail(id string, email string) error {
} }
func (s *AccountService) ChangeAvatarURL(id string, avatarURL string) error { func (s *AccountService) ChangeAvatarURL(id string, avatarURL string) error {
if len(avatarURL) == 0 { return s.repo.RemoveAvatar(id) } if len(avatarURL) == 0 { return s.repo.RemoveAvatar(id) }
if err := s.repo.ChangeAvatarURL(id, avatarURL); err != nil { if err := s.repo.UpdateAvatarURL(id, avatarURL); err != nil {
return err return err
} }
@ -136,13 +136,13 @@ func (s *AccountService) ResetFails(id string) (error) {
} }
func (s *AccountService) Lock(id string) error { func (s *AccountService) Lock(id string) error {
if err := s.repo.Lock(id); err != nil { return err } if err := s.repo.SetLocked(id, true); err != nil { return err }
s.log.Printf("Locked account %s", id) s.log.Printf("Locked account %s", id)
return nil return nil
} }
func (s *AccountService) Unlock(id string) error { func (s *AccountService) Unlock(id string) error {
if err := s.repo.Unlock(id); err != nil { return err } if err := s.repo.SetLocked(id, false); err != nil { return err }
s.log.Printf("Locked account %s", id) s.log.Printf("Unlocked account %s", id)
return nil return nil
} }