feat: add Logging Middleware, saving Token and better Handling

This commit is contained in:
Patryk Hegenberg 2025-11-05 07:16:38 +01:00
parent 2c4fc7869a
commit d74046522b
8 changed files with 926 additions and 236 deletions

View file

@ -45,8 +45,10 @@ func createTables(db *sql.DB) {
schedule_id INTEGER NOT NULL,
date TEXT NOT NULL,
type TEXT NOT NULL,
start_time TEXT NOT NULL,
end_time TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (schedule_id) REFERENCES schedules(id)
)`,
}
@ -58,9 +60,7 @@ func createTables(db *sql.DB) {
}
// Create default admin user (password: admin123)
// Hash generated with bcrypt
hash, _ := bcrypt.GenerateFromPassword([]byte("admin123"), bcrypt.DefaultCost)
fmt.Println(string(hash))
_, err := db.Exec(`
INSERT OR IGNORE INTO users (id, username, password, is_admin)
VALUES (?, ?, ?, ?)`,
@ -135,11 +135,17 @@ func DeleteSchedule(db *sql.DB, id int) error {
}
func CreateTimeEntry(db *sql.DB, entry *TimeEntry) error {
_, err := db.Exec("INSERT INTO time_entries (user_id, schedule_id, date, type) VALUES (?, ?, ?, ?)",
entry.UserID, entry.ScheduleID, entry.Date, entry.Type)
_, err := db.Exec("INSERT INTO time_entries (user_id, schedule_id, date, type, start_time, end_time) VALUES (?, ?, ?, ?, ?, ?)",
entry.UserID, entry.ScheduleID, entry.Date, entry.Type, entry.StartTime, entry.EndTime)
return err
}
// func CreateTimeEntry(db *sql.DB, entry *TimeEntry) error {
// _, err := db.Exec("INSERT INTO time_entries (user_id, schedule_id, date, type) VALUES (?, ?, ?, ?)",
// entry.UserID, entry.ScheduleID, entry.Date, entry.Type)
// return err
// }
func GetTimeEntriesByUser(db *sql.DB, userID int) ([]TimeEntry, error) {
rows, err := db.Query("SELECT id, user_id, schedule_id, date, type, created_at FROM time_entries WHERE user_id = ? ORDER BY date DESC, created_at DESC",
userID)
@ -160,7 +166,12 @@ func GetTimeEntriesByUser(db *sql.DB, userID int) ([]TimeEntry, error) {
}
func GetAllTimeEntries(db *sql.DB) ([]TimeEntry, error) {
rows, err := db.Query("SELECT id, user_id, schedule_id, date, type, created_at FROM time_entries ORDER BY date DESC, created_at DESC")
rows, err := db.Query(`
SELECT te.id, te.user_id, te.schedule_id, te.date, te.type, te.start_time, te.end_time, te.created_at, u.username
FROM time_entries te
JOIN users u ON te.user_id = u.id
ORDER BY te.date DESC, te.created_at DESC
`)
if err != nil {
return nil, err
}
@ -169,10 +180,67 @@ func GetAllTimeEntries(db *sql.DB) ([]TimeEntry, error) {
var entries []TimeEntry
for rows.Next() {
var e TimeEntry
if err := rows.Scan(&e.ID, &e.UserID, &e.ScheduleID, &e.Date, &e.Type, &e.CreatedAt); err != nil {
if err := rows.Scan(&e.ID, &e.UserID, &e.ScheduleID, &e.Date, &e.Type, &e.StartTime, &e.EndTime, &e.CreatedAt, &e.Username); err != nil {
continue
}
entries = append(entries, e)
}
return entries, nil
}
// func GetAllTimeEntries(db *sql.DB) ([]TimeEntry, error) {
// rows, err := db.Query("SELECT id, user_id, schedule_id, date, type, created_at FROM time_entries ORDER BY date DESC, created_at DESC")
// if err != nil {
// return nil, err
// }
// defer rows.Close()
// var entries []TimeEntry
// for rows.Next() {
// var e TimeEntry
// if err := rows.Scan(&e.ID, &e.UserID, &e.ScheduleID, &e.Date, &e.Type, &e.CreatedAt); err != nil {
// continue
// }
// entries = append(entries, e)
// }
// return entries, nil
// }
func GetWeeklyHours(db *sql.DB) ([]WeeklyHours, error) {
rows, err := db.Query(`
SELECT
te.user_id,
u.username,
CAST(strftime('%W', te.date) AS INTEGER) as week,
CAST(strftime('%Y', te.date) AS INTEGER) as year,
SUM(
(CAST(substr(te.end_time, 1, 2) AS REAL) + CAST(substr(te.end_time, 4, 2) AS REAL) / 60.0) -
(CAST(substr(te.start_time, 1, 2) AS REAL) + CAST(substr(te.start_time, 4, 2) AS REAL) / 60.0)
) as total_hours
FROM time_entries te
JOIN users u ON te.user_id = u.id
GROUP BY te.user_id, u.username, week, year
ORDER BY year DESC, week DESC, u.username
`)
if err != nil {
return nil, err
}
defer rows.Close()
var hours []WeeklyHours
for rows.Next() {
var h WeeklyHours
if err := rows.Scan(&h.UserID, &h.Username, &h.Week, &h.Year, &h.TotalHours); err != nil {
continue
}
hours = append(hours, h)
}
return hours, nil
}
func DeleteUser(db *sql.DB, id int) error {
if id == 1 {
return fmt.Errorf("cannot delete admin user")
}
_, err := db.Exec("DELETE FROM users WHERE id = ?", id)
return err
}