package user
import (
"sync"
)
type Store struct {
users map[int64]*User
nextID int64
mu sync.RWMutex
}
func NewStore() *Store {
return &Store{
users: make(map[int64]*User),
nextID: 1,
}
}
func (s *Store) AddUser(user *User) error {
s.mu.Lock()
defer s.mu.Unlock()
user.ID = s.nextID
s.users[s.nextID] = user
s.nextID++
return nil
}
func (s *Store) GetUser(id int64) (*User, bool) {
s.mu.RLock()
defer s.mu.RUnlock()
user, exists := s.users[id]
return user, exists
}
func (s *Store) GetUserByName(name string) (*User, bool) {
s.mu.RLock()
defer s.mu.RUnlock()
for _, user := range s.users {
if user.Name == name {
return user, true
}
}
return nil, false
}
func (s *Store) GetAllUsers() []*User {
s.mu.RLock()
defer s.mu.RUnlock()
users := make([]*User, 0, len(s.users))
for _, user := range s.users {
users = append(users, user)
}
return users
}
func (s *Store) GetUsersCount() int64 {
s.mu.RLock()
defer s.mu.RUnlock()
return int64(len(s.users))
}
func (s *Store) CheckPassword(username, password string) bool {
user, exists := s.GetUserByName(username)
if !exists {
return false
}
return user.Password == password
}
func (s *Store) UpdateUser(user *User) error {
s.mu.Lock()
defer s.mu.Unlock()
if _, exists := s.users[user.ID]; !exists {
return nil
}
s.users[user.ID] = user
return nil
}
func (s *Store) DeleteUser(id int64) error {
s.mu.Lock()
defer s.mu.Unlock()
if _, exists := s.users[id]; !exists {
return nil
}
delete(s.users, id)
return nil
}