Files
daily-timer/internal/models/types.go
2026-02-10 18:15:18 +03:00

100 lines
3.8 KiB
Go

package models
type SpeakerStatus string
const (
SpeakerStatusPending SpeakerStatus = "pending"
SpeakerStatusSpeaking SpeakerStatus = "speaking"
SpeakerStatusDone SpeakerStatus = "done"
SpeakerStatusSkipped SpeakerStatus = "skipped"
)
type TimerState struct {
Running bool `json:"running"`
Paused bool `json:"paused"`
CurrentSpeakerID uint `json:"currentSpeakerId"`
CurrentSpeaker string `json:"currentSpeaker"`
SpeakerElapsed int `json:"speakerElapsed"` // seconds
SpeakerLimit int `json:"speakerLimit"` // seconds
MeetingElapsed int `json:"meetingElapsed"` // seconds
MeetingLimit int `json:"meetingLimit"` // seconds
SpeakerOvertime bool `json:"speakerOvertime"`
MeetingOvertime bool `json:"meetingOvertime"`
Warning bool `json:"warning"`
WarningSeconds int `json:"warningSeconds"` // seconds before end for warning
TotalSpeakersTime int `json:"totalSpeakersTime"` // sum of all speaker limits
SpeakingOrder int `json:"speakingOrder"`
TotalSpeakers int `json:"totalSpeakers"`
RemainingQueue []QueuedSpeaker `json:"remainingQueue"`
AllSpeakers []SpeakerInfo `json:"allSpeakers"`
}
type SpeakerInfo struct {
ID uint `json:"id"`
Name string `json:"name"`
TimeLimit int `json:"timeLimit"`
TimeSpent int `json:"timeSpent"`
Order int `json:"order"`
Status SpeakerStatus `json:"status"`
}
type QueuedSpeaker struct {
ID uint `json:"id"`
Name string `json:"name"`
TimeLimit int `json:"timeLimit"`
Order int `json:"order"`
}
type SessionStats struct {
SessionID uint `json:"sessionId"`
Date string `json:"date"`
TotalDuration int `json:"totalDuration"`
MeetingLimit int `json:"meetingLimit"`
Overtime bool `json:"overtime"`
ParticipantCount int `json:"participantCount"`
PresentCount int `json:"presentCount"`
AbsentCount int `json:"absentCount"`
OvertimeCount int `json:"overtimeCount"`
SkippedCount int `json:"skippedCount"`
ParticipantStats []ParticipantStats `json:"participantStats"`
}
type ParticipantStats struct {
ParticipantID uint `json:"participantId"`
Name string `json:"name"`
Duration int `json:"duration"`
TimeLimit int `json:"timeLimit"`
Overtime bool `json:"overtime"`
Skipped bool `json:"skipped"`
Present bool `json:"present"`
SpeakingOrder int `json:"speakingOrder"`
}
type AggregatedStats struct {
TotalSessions int `json:"totalSessions"`
TotalMeetingTime int `json:"totalMeetingTime"`
AverageMeetingTime float64 `json:"averageMeetingTime"`
OvertimeSessions int `json:"overtimeSessions"`
OvertimePercentage float64 `json:"overtimePercentage"`
AverageAttendance float64 `json:"averageAttendance"`
ParticipantBreakdown []ParticipantBreakdown `json:"participantBreakdown"`
}
type ParticipantBreakdown struct {
ParticipantID uint `json:"participantId"`
Name string `json:"name"`
SessionsAttended int `json:"sessionsAttended"`
TotalSpeakingTime int `json:"totalSpeakingTime"`
AverageSpeakingTime float64 `json:"averageSpeakingTime"`
OvertimeCount int `json:"overtimeCount"`
SkipCount int `json:"skipCount"`
AttendanceRate float64 `json:"attendanceRate"`
}
type ExportData struct {
ExportedAt string `json:"exportedAt"`
Participants []Participant `json:"participants"`
Sessions []SessionStats `json:"sessions"`
Statistics AggregatedStats `json:"statistics"`
}