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.
 
 

62 lines
1.0 KiB

package main
import "errors"
type User struct {
ID int64
Email string
Password string
}
type UserDB interface {
FindByID(id int64) (*User, error)
FindByEmail(email string) (*User, error)
Save(*User) error
}
type inMemoryUserDB struct {
UserDB
nextID int
users []*User
}
func newInMemoryUserDB() *inMemoryUserDB {
return &inMemoryUserDB{
nextID: 1,
users: make([]*User, 0),
}
}
func (m *inMemoryUserDB) FindByID(id int64) (*User, error) {
for _, u := range m.users {
if u.ID == id {
return u, nil
}
}
return nil, errors.New("User not found.")
}
func (m *inMemoryUserDB) FindByEmail(email string) (*User, error) {
for _, u := range m.users {
if u.Email == email {
return u, nil
}
}
return nil, errors.New("User not found.")
}
func (m *inMemoryUserDB) Save(user *User) error {
for i, u := range m.users {
if u.ID == user.ID || u.Email == user.Email {
m.users[i] = user
return nil
}
}
user.ID = m.nextID
m.users = append(m.users, user)
m.nextID++
return nil
}