school-timetracker/backend/models.go
Patryk Hegenberg 3ac1947106 feat: improve app security and error handling
Improve overall app security by:
- using dynamic statements for all sql querries
- introducing environment variables for initial admin password
- introducing enironment variable for cors address
- improving error handling
2025-11-09 12:13:47 +01:00

103 lines
2.8 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"` // NEU
YearlyActual float64 `json:"yearly_actual"` // NEU
WeeklyTarget float64 `json:"weekly_target"` // NEU
RemainingYearly float64 `json:"remaining_yearly"` // NEU
}
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
}