go-guess/backend/internal/service/model/models.go
Daniel Noulet 75e3c73a61 feat: add collaborative interview scheduling
Add candidate decisions, co-interviewer accounts, scheduled interview inbox and calendar views, candidate-safe meeting links, shared documents, and private live notes backed by RabbitMQ.

Extend the disposable integration environment to validate PostgreSQL migrations, seeded users, interview lifecycle behavior, and RabbitMQ fanout.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-19 21:58:24 +02:00

124 lines
2.3 KiB
Go

package model
import "time"
type User struct {
ID uint
Email string
PasswordHash string
DisplayName string
Role string
}
type Trait struct {
ID uint
Name string
}
type JobPosting struct {
ID uint
Title string
Description string
Seniority string
Position string
Status string
DurationMinutes int
Labels []Trait
RequiredSkills []Trait
AdditionalSkills []Trait
Questions []Question
CreatedAt time.Time
}
type Question struct {
ID uint
Text string
Type string
Options []string
CodeSnippet string
ReferenceAnswer string
Deprecated bool
}
type Participant struct {
ID uint
FirstName string
LastName string
Birthday *time.Time
Email string
ContactInfo string
Photo []byte
PhotoType string
CV []byte
CVFilename string
Traits []Trait
CreatedAt time.Time
}
type CandidateMatch struct {
Participant Participant
Score float64
Matched []string
Missing []string
}
type Invitation struct {
ID uint
JobID uint
ParticipantID uint
ParticipantName string
ParticipantEmail string
Token string
Status string
Outcome string
DurationMinutes int
AcceptedAt *time.Time
CompletedAt *time.Time
CreatedAt time.Time
}
type ScheduledInterview struct {
ID uint
JobID uint
InvitationID uint
ParticipantID uint
CreatorID uint
StartsAt time.Time
Location string
CandidateToken string
SharedDocument string
Status string
Job JobPosting
Invitation Invitation
Participant Participant
Creator User
Attendees []InterviewAttendee
Notes []InterviewNote
CreatedAt time.Time
UpdatedAt time.Time
}
type InterviewAttendee struct {
ID uint
InterviewID uint
UserID uint
Status string
User User
CreatedAt time.Time
UpdatedAt time.Time
}
type InterviewNote struct {
ID uint
InterviewID uint
AuthorID uint
Author User
Body string
CreatedAt time.Time
}
type Interview struct {
Invitation Invitation
Job JobPosting
Answers map[uint]string
}