Planner/models/models.go
2025-01-14 20:14:07 +01:00

45 lines
1.9 KiB
Go

package models
type User struct {
Username string `gorm:"primaryKey" json:"username"`
Password string `json:"password"`
OwnedPlans []Plan `gorm:"foreignKey:Owner;references:Username" json:"-"`
MemberOf []Member `json:"-"`
Votes []Vote `gorm:"foreignKey:UsernameID" json:"-"`
}
type Member struct {
ID uint `gorm:"primaryKey;autoIncrement:true"`
PlanID uint
Plan Plan
Type string `gorm:"check:type in ('member','non-member')"`
Name string `gorm:"check:type=='member' OR name IS NOT NULL" json:"name"`
UserID string
User User `gorm:"foreignKey:UserID"`
}
// CREATE TABLE plans(id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING, owner STRING, FOREIGN KEY(owner) REFERENCES users(username))
// CREATE TABLE plan_user_relations(username STRING, plan INTEGER, PRIMARY KEY(username, plan), FOREIGN KEY username REFERENCES user(username), FOREIGN KEY plan REFERENCES plans(id))
type Plan struct {
ID uint `gorm:"primaryKey;autoIncrement:true" json:"id"`
Name string `json:"name"`
Owner string `json:"owner"`
Description string `json:"description"`
Members []Member `json:"-"`
Polls []Poll `gorm:"foreignKey:PlanID;references:ID" json:"-"`
}
// CREATE TABLE polls(id INTEGER PRIMARY KEY AUTOINCREMENT, plan INTEGER, name STRING, options JSON, FOREIGN KEY plan REFERENCES plans(id))
type Poll struct {
ID uint `gorm:"primaryKey;autoIncrement:true" json:"id"`
PlanID uint `json:"-"`
Options string `json:"options"`
Votes []Vote `gorm:"foreignKey:PollID;references:ID" json:"-"`
}
// CREATE TABLE votes(id INTEGER, poll INTEGER, user STRING, value JSON, FOREIGN KEY poll REFERENCES polls(id), FOREIGN KEY user REFERENCES user(username))
type Vote struct {
PollID uint `gorm:"primaryKey" json:"-"`
UsernameID string `gorm:"primaryKey" json:"username_id"`
Value string `json:"value"`
}