initial commit
This commit is contained in:
commit
6ffc0d2c99
54 changed files with 11900 additions and 0 deletions
92
backend/internal/database/entity/models.go
Normal file
92
backend/internal/database/entity/models.go
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
package entity
|
||||
|
||||
import "time"
|
||||
|
||||
type User struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
Email string `gorm:"uniqueIndex;size:320;not null"`
|
||||
PasswordHash string `gorm:"not null"`
|
||||
Role string `gorm:"size:32;not null"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
type JobPosting struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
Title string `gorm:"size:200;not null"`
|
||||
Description string `gorm:"type:text;not null"`
|
||||
Seniority string `gorm:"size:50;not null"`
|
||||
Position string `gorm:"size:120;not null"`
|
||||
Status string `gorm:"size:32;not null;default:draft"`
|
||||
DurationMinutes int `gorm:"not null;default:60"`
|
||||
Labels []Trait `gorm:"many2many:job_posting_labels"`
|
||||
RequiredSkills []Trait `gorm:"many2many:job_required_skills"`
|
||||
AdditionalSkills []Trait `gorm:"many2many:job_additional_skills"`
|
||||
Questions []Question `gorm:"many2many:job_posting_questions"`
|
||||
Invitations []Invitation `gorm:"foreignKey:JobID;constraint:OnDelete:CASCADE"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
type Trait struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
Name string `gorm:"uniqueIndex;size:100;not null"`
|
||||
Normalized string `gorm:"uniqueIndex;size:100;not null"`
|
||||
}
|
||||
|
||||
type Question struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
Text string `gorm:"type:text;not null"`
|
||||
Type string `gorm:"size:32;not null"`
|
||||
ReferenceAnswer string `gorm:"type:text;not null;default:''"`
|
||||
Deprecated bool `gorm:"not null;default:false"`
|
||||
Options []QuestionOption `gorm:"foreignKey:QuestionID;constraint:OnDelete:CASCADE"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
type QuestionOption struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
QuestionID uint `gorm:"index;not null"`
|
||||
Text string `gorm:"type:text;not null"`
|
||||
}
|
||||
|
||||
type Participant struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
FirstName string `gorm:"size:100;not null"`
|
||||
LastName string `gorm:"size:100;not null"`
|
||||
Birthday *time.Time
|
||||
Email string `gorm:"uniqueIndex;size:320;not null"`
|
||||
ContactInfo string `gorm:"type:text"`
|
||||
Photo []byte `gorm:"type:bytea"`
|
||||
PhotoType string `gorm:"size:100"`
|
||||
CV []byte `gorm:"type:bytea"`
|
||||
CVFilename string `gorm:"size:255"`
|
||||
Traits []Trait `gorm:"many2many:participant_traits"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
type Invitation struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
JobID uint `gorm:"index;not null"`
|
||||
ParticipantID uint `gorm:"index;not null"`
|
||||
Token string `gorm:"uniqueIndex;size:64;not null"`
|
||||
Status string `gorm:"size:32;not null;default:pending"`
|
||||
DurationMinutes int `gorm:"not null"`
|
||||
AcceptedAt *time.Time
|
||||
CompletedAt *time.Time
|
||||
Answers []InvitationAnswer `gorm:"foreignKey:InvitationID;constraint:OnDelete:CASCADE"`
|
||||
Job JobPosting
|
||||
Participant Participant
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
type InvitationAnswer struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
InvitationID uint `gorm:"uniqueIndex:invitation_question;not null"`
|
||||
QuestionID uint `gorm:"uniqueIndex:invitation_question;not null"`
|
||||
Answer string `gorm:"type:text;not null"`
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue