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"` Timezone string `db:"timezone" json:"timezone"` DateCreated time.Time `db:"_date_created" json:"_dateCreated"` DateUpdated *time.Time `db:"_date_updated" json:"_dateUpdated"` 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:"defaultModelId"` DateCreated time.Time `db:"_date_created" json:"_dateCreated"` DateUpdated *time.Time `db:"_date_updated" json:"_dateUpdated"` VersionId string `db:"_version" json:"_version"` } type UserTeam struct { ID string `db:"id" json:"id"` UserID string `db:"user_id" json:"userId"` TeamID string `db:"team_id" json:"teamId"` Administrator bool `db:"administrator" json:"administrator"` DateCreated time.Time `db:"_date_created" json:"_dateCreated"` DateUpdated *time.Time `db:"_date_updated" json:"_dateUpdated"` 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" json:"address"` DateCreated time.Time `db:"_date_created" json:"_dateCreated"` DateUpdated *time.Time `db:"_date_updated" json:"_dateUpdated"` VersionId string `db:"_version" json:"_version"` } type TeamRelation struct { IsAdministrator bool `json:"administrator"` Team *Team `json:"team"` } type UserWithTeams struct { User *User `json:"user"` UserTeams []*UserTeam `json:"user_teams"` Teams []*Team `json:"teams"` } func AddressTypes() []string { return []string{ "email", "telegram", "whatsapp", "signal", } } 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 ListUserAddresses(userid string) ([]*UserAddress, error) GetUserAddress(addrID string) (*UserAddress, error) CreateUserAddress(addr *UserAddress) (*UserAddress, error) UpdateUserAddress(addr *UserAddress) (*UserAddress, error) DeleteUserAddress(addrID string) error }