package model

import "time"

type User struct {
	ID           string     `json:"id" orm:"column(id)"`
	UserName     string     `json:"userName"`
	Name         string     `json:"name"`
	Email        string     `json:"email"`
	Password     string     `json:"password"`
	IsAdmin      bool       `json:"isAdmin"`
	LastLoginAt  *time.Time `json:"lastLoginAt"`
	LastAccessAt *time.Time `json:"lastAccessAt"`
	CreatedAt    time.Time  `json:"createdAt"`
	UpdatedAt    time.Time  `json:"updatedAt"`
	// TODO ChangePassword string     `json:"password"`
}

type Users []User

type UserRepository interface {
	CountAll(...QueryOptions) (int64, error)
	Get(id string) (*User, error)
	Put(*User) error
	// FindByUsername must be case-insensitive
	FindByUsername(username string) (*User, error)
	UpdateLastLoginAt(id string) error
	UpdateLastAccessAt(id string) error
}