09f6f5a5e1
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-school (push) Successful in 29s
CI / test-go-edu-search (push) Successful in 29s
CI / test-python-klausur (push) Failing after 2m25s
CI / test-python-agent-core (push) Successful in 19s
CI / test-nodejs-website (push) Successful in 21s
81 lines
4.0 KiB
Go
81 lines
4.0 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// PublicEvent is a holiday or school-vacation row imported from
|
|
// OpenHolidaysAPI. Global (no owner) — same for every school per region.
|
|
type PublicEvent struct {
|
|
ID uuid.UUID `json:"id" db:"id"`
|
|
Region string `json:"region" db:"region"` // e.g. "DE-NI"
|
|
EventType string `json:"event_type" db:"event_type"` // public_holiday | school_holiday
|
|
NameDe string `json:"name_de" db:"name_de"`
|
|
NameEn string `json:"name_en,omitempty" db:"name_en"`
|
|
StartDate string `json:"start_date" db:"start_date"` // YYYY-MM-DD
|
|
EndDate string `json:"end_date" db:"end_date"`
|
|
Source string `json:"source,omitempty" db:"source"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
}
|
|
|
|
// SchoolCalendarConfig stores the Bundesland selection for one school
|
|
// (= one Rektor account). One row per user.
|
|
type SchoolCalendarConfig struct {
|
|
UserID uuid.UUID `json:"user_id" db:"user_id"`
|
|
Bundesland string `json:"bundesland" db:"bundesland"` // DE-NI ...
|
|
SchoolYearStart *string `json:"school_year_start,omitempty" db:"school_year_start"`
|
|
SchoolYearEnd *string `json:"school_year_end,omitempty" db:"school_year_end"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
|
}
|
|
|
|
// SchoolEvent is a user-managed event (Fortbildung, Schulfeier, …).
|
|
type SchoolEvent struct {
|
|
ID uuid.UUID `json:"id" db:"id"`
|
|
CreatedByUserID uuid.UUID `json:"created_by_user_id" db:"created_by_user_id"`
|
|
Title string `json:"title" db:"title"`
|
|
Description string `json:"description,omitempty" db:"description"`
|
|
EventType string `json:"event_type" db:"event_type"`
|
|
IsSchoolFree bool `json:"is_school_free" db:"is_school_free"`
|
|
StartDate string `json:"start_date" db:"start_date"`
|
|
EndDate string `json:"end_date" db:"end_date"`
|
|
StartTime *string `json:"start_time,omitempty" db:"start_time"`
|
|
EndTime *string `json:"end_time,omitempty" db:"end_time"`
|
|
AffectedClassIDs []uuid.UUID `json:"affected_class_ids" db:"affected_class_ids"`
|
|
VisibleToParents bool `json:"visible_to_parents" db:"visible_to_parents"`
|
|
NotifyParents bool `json:"notify_parents" db:"notify_parents"`
|
|
NotifyStudents bool `json:"notify_students" db:"notify_students"`
|
|
NotificationLeadDays []int `json:"notification_lead_days" db:"notification_lead_days"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
|
}
|
|
|
|
// Request DTOs
|
|
|
|
// UpsertSchoolCalendarConfigRequest sets or updates the Bundesland for the
|
|
// authenticated user. Both school-year dates are optional (defaults to the
|
|
// running year based on today's date).
|
|
type UpsertSchoolCalendarConfigRequest struct {
|
|
Bundesland string `json:"bundesland" binding:"required,len=5"`
|
|
SchoolYearStart *string `json:"school_year_start,omitempty"`
|
|
SchoolYearEnd *string `json:"school_year_end,omitempty"`
|
|
}
|
|
|
|
type CreateSchoolEventRequest struct {
|
|
Title string `json:"title" binding:"required"`
|
|
Description string `json:"description"`
|
|
EventType string `json:"event_type" binding:"required,oneof=fortbildung schulfeier klassenfahrt projekttag eltern_info andere"`
|
|
IsSchoolFree bool `json:"is_school_free"`
|
|
StartDate string `json:"start_date" binding:"required"`
|
|
EndDate string `json:"end_date" binding:"required"`
|
|
StartTime *string `json:"start_time,omitempty"`
|
|
EndTime *string `json:"end_time,omitempty"`
|
|
AffectedClassIDs []string `json:"affected_class_ids"`
|
|
VisibleToParents bool `json:"visible_to_parents"`
|
|
NotifyParents bool `json:"notify_parents"`
|
|
NotifyStudents bool `json:"notify_students"`
|
|
NotificationLeadDays []int `json:"notification_lead_days"`
|
|
}
|