school-timetracker/backend/models.go

150 lines
4.2 KiB
Go

package main
import (
"github.com/golang-jwt/jwt/v5"
"time"
)
type TimeEntry struct {
ID int `json:"id"`
UserID int `json:"user_id"`
ScheduleID int `json:"schedule_id"`
Date string `json:"date"`
Type string `json:"type"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
CreatedAt time.Time `json:"created_at"`
Username string `json:"username"`
}
type WeeklyHours struct {
UserID int `json:"user_id"`
Username string `json:"username"`
Week int `json:"week"`
Year int `json:"year"`
TotalHours float64 `json:"total_hours"`
YearlyTarget float64 `json:"yearly_target"`
YearlyActual float64 `json:"yearly_actual"`
WeeklyTarget float64 `json:"weekly_target"`
RemainingYearly float64 `json:"remaining_yearly"`
}
type User struct {
ID int `json:"id"`
Username string `json:"username"`
Password string `json:"-"`
IsAdmin bool `json:"is_admin"`
YearlyHours float64 `json:"yearly_hours"`
}
type Schedule struct {
ID int `json:"id"`
DayOfWeek int `json:"day_of_week"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
Type string `json:"type"`
Title string `json:"title"`
}
type LoginRequest struct {
Username string `json:"username" validate:"required"`
Password string `json:"password" validate:"required"`
}
type LoginResponse struct {
Token string `json:"token"`
Username string `json:"username"`
IsAdmin bool `json:"is_admin"`
}
type CreateUserRequest struct {
Username string `json:"username" validate:"required"`
Password string `json:"password" validate:"required,min=6"`
IsAdmin bool `json:"is_admin"`
YearlyHours float64 `json:"yearly_hours"`
}
type SchoolYear struct {
ID int `json:"id"`
Name string `json:"name"`
StartDate string `json:"start_date"`
EndDate string `json:"end_date"`
IsActive bool `json:"is_active"`
CreatedAt time.Time `json:"created_at"`
}
type CreateSchoolYearRequest struct {
Name string `json:"name" validate:"required"`
StartDate string `json:"start_date" validate:"required"`
EndDate string `json:"end_date" validate:"required"`
}
type UpdateUserRequest struct {
Username string `json:"username"`
YearlyHours float64 `json:"yearly_hours"`
}
type ResetPasswordRequest struct {
NewPassword string `json:"new_password" validate:"required,min=6"`
}
type UpdateTimeEntryRequest struct {
Date string `json:"date"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
Type string `json:"type"`
}
type Claims struct {
UserID int `json:"user_id"`
Username string `json:"username"`
IsAdmin bool `json:"is_admin"`
jwt.RegisteredClaims
}
type ChangePasswordRequest struct {
OldPassword string `json:"old_password"`
NewPassword string `json:"new_password"`
}
type LicenseData struct {
SchoolName string `json:"school_name"`
MaxUsers int `json:"max_users"`
ExpiresAt string `json:"expires_at"`
}
type LicenseFile struct {
Data LicenseData `json:"data"`
Signature string `json:"signature"`
}
type LicenseStatus struct {
IsValid bool `json:"is_valid"`
SchoolName string `json:"school_name"`
ExpiresAt string `json:"expires_at"`
MaxUsers int `json:"max_users"`
UserCount int `json:"user_count"`
Message string `json:"message"`
}
type Substitution struct {
ID int `json:"id"`
Date string `json:"date"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
Title string `json:"title"`
Notes string `json:"notes"`
ScheduleID int `json:"schedule_id"`
TakenByUserID *int `json:"taken_by_user_id,omitempty"`
TakenByUsername string `json:"taken_by_username,omitempty"`
CreatedAt time.Time `json:"created_at"`
}
type CreateSubstitutionRequest struct {
Date string `json:"date" validate:"required"`
StartTime string `json:"start_time" validate:"required"`
EndTime string `json:"end_time" validate:"required"`
Title string `json:"title" validate:"required"`
Notes string `json:"notes"`
ScheduleID int `json:"schedule_id"`
}