package domain import ( "time" ) type User struct { ID string `db:"id" json:"id"` Firstname string `db:"firstname" json:"firstname,omitempty"` Lastname string `db:"lastname" json:"lastname,omitempty"` Password string `db:"password" json:"-"` Email string `db:"email" json:"email,omitempty"` PictureID string `db:"picture" json:"picture,omitempty"` Enabled bool `db:"enabled" json:"enabled"` Theme string `db:"theme" json:"theme"` Lang string `db:"lang" json:"lang"` DateCreated time.Time `db:"_date_created" json:"_date_created"` DateUpdated time.Time `db:"_date_updated" json:"_date_updated"` VersionId string `db:"_version" json:"_version"` } type Team struct { ID string `db:"id" json:"id"` Label string `db:"label" json:"label"` DefaultModelID *string `db:"default_model_id" json:"default_model_id"` DateCreated *time.Time `db:"_date_created" json:"_date_created"` DateUpdated *time.Time `db:"_date_updated" json:"_date_updated"` VersionId string `db:"_version" json:"_version"` } type UserTeam struct { ID string `db:"id" json:"id"` UserID string `db:"user_id" json:"user_id"` TeamID string `db:"team_id" json:"team_id"` Administrator bool `db:"administrator" json:"administrator"` DateCreated *time.Time `db:"_date_created" json:"_date_created"` DateUpdated *time.Time `db:"_date_updated" json:"_date_updated"` VersionId string `db:"_version" json:"_version"` } type UserAddress struct { ID string `db:"id" json:"id"` UserID string `db:"user_id" json:"user_id"` Type string `db:"type" json:"type"` Address string `db:"address_id" json:"address"` DateCreated *time.Time `db:"_date_created" json:"_date_created"` DateUpdated *time.Time `db:"_date_updated" json:"_date_updated"` VersionId string `db:"_version" json:"_version"` } type TeamRelation struct { IsAdministrator bool `json:"administrator"` Team *Team `json:"team"` } type UserWithTeams struct { User *User `json:"user"` Teams []*TeamRelation `json:"teams"` } type UserRepository interface { FindUser(id string) (*User, error) FindUserByEmail(email string) (*User, error) ListUsers() ([]*User, error) CreateUser(user *User) (*User, error) UpdateUser(user *User) (*User, error) DeleteUser(id string) error FindTeam(userid string, teamid string) (*Team, error) ListTeams(userid string) ([]*Team, error) CreateTeam(userid string, team *Team) (*Team, error) UpdateTeam(userid string, team *Team) (*Team, error) DeleteTeam(userid string, teamid string) error FindUserTeam(userid string, teamid string) (*UserTeam, error) ListUserTeams(userid string) ([]*UserTeam, error) CreateUserTeam(userid string, team *UserTeam) (*UserTeam, error) UpdateUserTeam(userid string, team *UserTeam) (*UserTeam, error) DeleteUserTeam(userid string, teamid string) error PopulateUserWithTeams(user *User) (*UserWithTeams, error) ListUserAddresses(userid string) ([]*UserAddress, error) CreateUserAddress(userid string, addr *UserAddress) (*UserAddress, error) UpdateUserAddress(userid string, addr *UserAddress) (*UserAddress, error) DeleteUserAddress(userid string, addrID string) error }