Files
lassistanoque/backend/internal/domain/user.go
T
2026-08-31 21:23:35 +02:00

98 lines
3.4 KiB
Go

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
}