feat: add Logging Middleware, saving Token and better Handling
This commit is contained in:
parent
2c4fc7869a
commit
d74046522b
8 changed files with 926 additions and 236 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue