Add init
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package entities
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Candidate struct {
|
||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
|
||||
VoteEventID uuid.UUID `gorm:"type:uuid;not null" json:"vote_event_id"`
|
||||
Name string `gorm:"not null;size:255" json:"name" validate:"required,min=1,max=255"`
|
||||
ImageURL string `gorm:"size:500" json:"image_url"`
|
||||
Description string `gorm:"type:text" json:"description"`
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
||||
VoteEvent VoteEvent `gorm:"foreignKey:VoteEventID;references:ID" json:"vote_event,omitempty"`
|
||||
Votes []Vote `gorm:"foreignKey:CandidateID;references:ID" json:"votes,omitempty"`
|
||||
}
|
||||
|
||||
func (c *Candidate) BeforeCreate(tx *gorm.DB) error {
|
||||
if c.ID == uuid.Nil {
|
||||
c.ID = uuid.New()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (Candidate) TableName() string {
|
||||
return "candidates"
|
||||
}
|
||||
@@ -14,6 +14,10 @@ type DispositionRoute struct {
|
||||
AllowedActions JSONB `gorm:"type:jsonb" json:"allowed_actions,omitempty"`
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
||||
|
||||
// Relationships
|
||||
FromDepartment Department `gorm:"foreignKey:FromDepartmentID;references:ID" json:"from_department,omitempty"`
|
||||
ToDepartment Department `gorm:"foreignKey:ToDepartmentID;references:ID" json:"to_department,omitempty"`
|
||||
}
|
||||
|
||||
func (DispositionRoute) TableName() string { return "disposition_routes" }
|
||||
|
||||
@@ -16,6 +16,9 @@ type LetterDiscussion struct {
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
||||
EditedAt *time.Time `json:"edited_at,omitempty"`
|
||||
|
||||
// Relationships
|
||||
User *User `gorm:"foreignKey:UserID;references:ID" json:"user,omitempty"`
|
||||
}
|
||||
|
||||
func (LetterDiscussion) TableName() string { return "letter_incoming_discussions" }
|
||||
|
||||
@@ -6,32 +6,36 @@ import (
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type LetterDispositionStatus string
|
||||
|
||||
const (
|
||||
DispositionPending LetterDispositionStatus = "pending"
|
||||
DispositionRead LetterDispositionStatus = "read"
|
||||
DispositionRejected LetterDispositionStatus = "rejected"
|
||||
DispositionCompleted LetterDispositionStatus = "completed"
|
||||
)
|
||||
|
||||
type LetterDisposition struct {
|
||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
|
||||
LetterID uuid.UUID `gorm:"type:uuid;not null" json:"letter_id"`
|
||||
FromUserID *uuid.UUID `json:"from_user_id,omitempty"`
|
||||
FromDepartmentID *uuid.UUID `json:"from_department_id,omitempty"`
|
||||
ToUserID *uuid.UUID `json:"to_user_id,omitempty"`
|
||||
ToDepartmentID *uuid.UUID `json:"to_department_id,omitempty"`
|
||||
Notes *string `json:"notes,omitempty"`
|
||||
Status LetterDispositionStatus `gorm:"not null;default:'pending'" json:"status"`
|
||||
CreatedBy uuid.UUID `gorm:"not null" json:"created_by"`
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
ReadAt *time.Time `json:"read_at,omitempty"`
|
||||
CompletedAt *time.Time `json:"completed_at,omitempty"`
|
||||
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
||||
type LetterIncomingDisposition struct {
|
||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
|
||||
LetterID uuid.UUID `gorm:"type:uuid;not null" json:"letter_id"`
|
||||
DepartmentID *uuid.UUID `json:"department_id,omitempty"`
|
||||
Notes *string `json:"notes,omitempty"`
|
||||
ReadAt *time.Time `json:"read_at,omitempty"`
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
CreatedBy uuid.UUID `gorm:"not null" json:"created_by"`
|
||||
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
||||
Department Department `gorm:"foreignKey:DepartmentID;references:ID" json:"department,omitempty"`
|
||||
Departments []LetterIncomingDispositionDepartment `gorm:"foreignKey:LetterIncomingDispositionID;references:ID" json:"departments,omitempty"`
|
||||
ActionSelections []LetterDispositionActionSelection `gorm:"foreignKey:DispositionID;references:ID" json:"action_selections,omitempty"`
|
||||
DispositionNotes []DispositionNote `gorm:"foreignKey:DispositionID;references:ID" json:"disposition_notes,omitempty"`
|
||||
}
|
||||
|
||||
func (LetterDisposition) TableName() string { return "letter_dispositions" }
|
||||
func (LetterIncomingDisposition) TableName() string { return "letter_incoming_dispositions" }
|
||||
|
||||
type LetterIncomingDispositionDepartment struct {
|
||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
|
||||
LetterIncomingDispositionID uuid.UUID `gorm:"type:uuid;not null" json:"letter_incoming_disposition_id"`
|
||||
DepartmentID uuid.UUID `gorm:"type:uuid;not null" json:"department_id"`
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
|
||||
// Relationships
|
||||
Department *Department `gorm:"foreignKey:DepartmentID;references:ID" json:"department,omitempty"`
|
||||
}
|
||||
|
||||
func (LetterIncomingDispositionDepartment) TableName() string {
|
||||
return "letter_incoming_dispositions_department"
|
||||
}
|
||||
|
||||
type DispositionNote struct {
|
||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
|
||||
@@ -39,6 +43,9 @@ type DispositionNote struct {
|
||||
UserID *uuid.UUID `json:"user_id,omitempty"`
|
||||
Note string `gorm:"not null" json:"note"`
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
|
||||
// Relationships
|
||||
User *User `gorm:"foreignKey:UserID;references:ID" json:"user,omitempty"`
|
||||
}
|
||||
|
||||
func (DispositionNote) TableName() string { return "disposition_notes" }
|
||||
@@ -50,6 +57,9 @@ type LetterDispositionActionSelection struct {
|
||||
Note *string `json:"note,omitempty"`
|
||||
CreatedBy uuid.UUID `gorm:"not null" json:"created_by"`
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
|
||||
// Relationships
|
||||
Action *DispositionAction `gorm:"foreignKey:ActionID;references:ID" json:"action,omitempty"`
|
||||
}
|
||||
|
||||
func (LetterDispositionActionSelection) TableName() string { return "letter_disposition_actions" }
|
||||
|
||||
@@ -48,6 +48,7 @@ type User struct {
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
||||
Profile *UserProfile `gorm:"foreignKey:UserID;references:ID" json:"profile,omitempty"`
|
||||
Departments []Department `gorm:"many2many:user_department;foreignKey:ID;joinForeignKey:user_id;References:ID;joinReferences:department_id" json:"departments,omitempty"`
|
||||
}
|
||||
|
||||
func (u *User) BeforeCreate(tx *gorm.DB) error {
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package entities
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Vote struct {
|
||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
|
||||
VoteEventID uuid.UUID `gorm:"type:uuid;not null" json:"vote_event_id"`
|
||||
CandidateID uuid.UUID `gorm:"type:uuid;not null" json:"candidate_id"`
|
||||
UserID uuid.UUID `gorm:"type:uuid;not null" json:"user_id"`
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
VoteEvent VoteEvent `gorm:"foreignKey:VoteEventID;references:ID" json:"vote_event,omitempty"`
|
||||
Candidate Candidate `gorm:"foreignKey:CandidateID;references:ID" json:"candidate,omitempty"`
|
||||
User User `gorm:"foreignKey:UserID;references:ID" json:"user,omitempty"`
|
||||
}
|
||||
|
||||
func (v *Vote) BeforeCreate(tx *gorm.DB) error {
|
||||
if v.ID == uuid.Nil {
|
||||
v.ID = uuid.New()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (Vote) TableName() string {
|
||||
return "votes"
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package entities
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type VoteEvent struct {
|
||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
|
||||
Title string `gorm:"not null;size:255" json:"title" validate:"required,min=1,max=255"`
|
||||
Description string `gorm:"type:text" json:"description"`
|
||||
StartDate time.Time `gorm:"not null" json:"start_date" validate:"required"`
|
||||
EndDate time.Time `gorm:"not null" json:"end_date" validate:"required"`
|
||||
IsActive bool `gorm:"default:true" json:"is_active"`
|
||||
ResultsOpen bool `gorm:"default:false" json:"results_open"`
|
||||
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
||||
Candidates []Candidate `gorm:"foreignKey:VoteEventID;references:ID" json:"candidates,omitempty"`
|
||||
Votes []Vote `gorm:"foreignKey:VoteEventID;references:ID" json:"votes,omitempty"`
|
||||
}
|
||||
|
||||
func (ve *VoteEvent) BeforeCreate(tx *gorm.DB) error {
|
||||
if ve.ID == uuid.Nil {
|
||||
ve.ID = uuid.New()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (VoteEvent) TableName() string {
|
||||
return "vote_events"
|
||||
}
|
||||
|
||||
func (ve *VoteEvent) IsVotingOpen() bool {
|
||||
now := time.Now()
|
||||
return ve.IsActive && now.After(ve.StartDate) && now.Before(ve.EndDate)
|
||||
}
|
||||
Reference in New Issue
Block a user