diff --git a/backend/handlers/scheduling/default-hours.go b/backend/handlers/scheduling/default-hours.go index f52c28f..f672892 100644 --- a/backend/handlers/scheduling/default-hours.go +++ b/backend/handlers/scheduling/default-hours.go @@ -34,7 +34,7 @@ type DayWorkingHours struct { // --- Default Hours Handlers --- func GetDefaultHours(w http.ResponseWriter, r *http.Request) { rows, err := db.Conn.Query(r.Context(), ` - SELECT weekday, start_time::text, end_time::text, is_open + SELECT weekday, start_time::text, end_time, is_open FROM working_hours ORDER BY weekday `) if err != nil { @@ -140,7 +140,7 @@ func GetWorkingHours(w http.ResponseWriter, r *http.Request) { // Load default hours defaultMap := map[int]DefaultHours{} defRows, _ := db.Conn.Query(r.Context(), ` - SELECT weekday, start_time::text, end_time::text, is_open + SELECT weekday, start_time::text, end_time, is_open FROM working_hours `) for defRows.Next() { @@ -183,7 +183,7 @@ func GetWorkingHours(w http.ResponseWriter, r *http.Request) { exHoursMap := map[int]map[int]ExceptionalHours{} if len(groupIDs) > 0 { - query, args, _ := sqlIn("SELECT group_id, weekday, start_time::text, end_time::text, is_open FROM exceptional_working_hours WHERE group_id IN (%s)", groupIDs) + query, args, _ := sqlIn("SELECT group_id, weekday, start_time::text, end_time, is_open FROM exceptional_working_hours WHERE group_id IN (%s)", groupIDs) rows, _ := db.Conn.Query(r.Context(), query, args...) for rows.Next() { var h ExceptionalHours @@ -365,7 +365,7 @@ func GetAvailableHours(w http.ResponseWriter, r *http.Request) { // Load default hours defaultMap := map[int]DefaultHours{} - defRows, _ := db.Conn.Query(r.Context(), `SELECT weekday, start_time::text, end_time::text, is_open FROM working_hours`) + defRows, _ := db.Conn.Query(r.Context(), `SELECT weekday, start_time::text, end_time, is_open FROM working_hours`) for defRows.Next() { var d DefaultHours if err := defRows.Scan(&d.Weekday, &d.StartTime, &d.EndTime, &d.IsOpen); err == nil { @@ -406,7 +406,7 @@ func GetAvailableHours(w http.ResponseWriter, r *http.Request) { exHoursMap := map[int]map[int]ExceptionalHours{} if len(groupIDs) > 0 { - query, args, _ := sqlIn("SELECT group_id, weekday, start_time::text, end_time::text, is_open FROM exceptional_working_hours WHERE group_id IN (%s)", groupIDs) + query, args, _ := sqlIn("SELECT group_id, weekday, start_time::text, end_time, is_open FROM exceptional_working_hours WHERE group_id IN (%s)", groupIDs) rows, _ := db.Conn.Query(r.Context(), query, args...) for rows.Next() { var h ExceptionalHours @@ -427,38 +427,10 @@ func GetAvailableHours(w http.ResponseWriter, r *http.Request) { bookingRows, _ := db.Conn.Query(r.Context(), ` SELECT b.start_time, - COALESCE((SELECT SUM(dur) FROM ( - SELECT CASE - WHEN bs.override_duration_minutes IS NOT NULL AND bs.override_duration_minutes > 0 - THEN bs.override_duration_minutes - ELSE s.duration_minutes - END AS dur - FROM booking_services bs LEFT JOIN services s ON bs.service_id = s.id WHERE bs.booking_id = b.id - UNION ALL - SELECT CASE - WHEN bcs.override_duration_minutes IS NOT NULL AND bcs.override_duration_minutes > 0 - THEN bcs.override_duration_minutes - ELSE cs.duration_minutes - END - FROM booking_custom_services bcs LEFT JOIN custom_services cs ON bcs.custom_service_id = cs.id WHERE bcs.booking_id = b.id - ) sub), 0) AS total_duration + b.total_duration_minutes AS total_duration FROM bookings b WHERE b.start_time < $2 - AND b.start_time + (COALESCE((SELECT SUM(dur) FROM ( - SELECT CASE - WHEN bs.override_duration_minutes IS NOT NULL AND bs.override_duration_minutes > 0 - THEN bs.override_duration_minutes - ELSE s.duration_minutes - END AS dur - FROM booking_services bs LEFT JOIN services s ON bs.service_id = s.id WHERE bs.booking_id = b.id - UNION ALL - SELECT CASE - WHEN bcs.override_duration_minutes IS NOT NULL AND bcs.override_duration_minutes > 0 - THEN bcs.override_duration_minutes - ELSE cs.duration_minutes - END - FROM booking_custom_services bcs LEFT JOIN custom_services cs ON bcs.custom_service_id = cs.id WHERE bcs.booking_id = b.id - ) sub), 0) * INTERVAL '1 minute') > $1 + AND b.end_time > $1 AND b.status NOT IN ('client_cancelled', 'we_cancelled', 'no_show', 'pending_release', 'deposit_lapsed') ORDER BY b.start_time `, start, end) diff --git a/backend/handlers/scheduling/exceptional-hours.go b/backend/handlers/scheduling/exceptional-hours.go index e4750f4..5e7f474 100644 --- a/backend/handlers/scheduling/exceptional-hours.go +++ b/backend/handlers/scheduling/exceptional-hours.go @@ -62,7 +62,7 @@ func ListExceptionalGroups(w http.ResponseWriter, r *http.Request) { for i := range groups { // Load 7-day hours hoursRows, err := db.Conn.Query(r.Context(), ` - SELECT id, weekday, start_time::text, end_time::text, is_open + SELECT id, weekday, start_time::text, end_time, is_open FROM exceptional_working_hours WHERE group_id=$1 ORDER BY weekday `, groups[i].ID) diff --git a/backend/handlers/scheduling/time-blockers.go b/backend/handlers/scheduling/time-blockers.go index 621cb38..a44db2f 100644 --- a/backend/handlers/scheduling/time-blockers.go +++ b/backend/handlers/scheduling/time-blockers.go @@ -380,16 +380,8 @@ func AnonymizeStaleGuestAccounts(ctx context.Context) error { data_retention_consent = FALSE, updated_at = NOW() WHERE account_role = 'guest' - AND id NOT IN ( - SELECT user_id FROM bookings WHERE status IN ('pending', 'confirmed') - ) - AND id IN ( - SELECT user_id - FROM bookings - WHERE user_id IS NOT NULL - GROUP BY user_id - HAVING MAX(start_time) < NOW() - INTERVAL '6 months' - ) + AND NOT EXISTS (SELECT 1 FROM bookings WHERE user_id = users.id AND status IN ('pending', 'confirmed')) + AND EXISTS (SELECT 1 FROM bookings WHERE user_id = users.id GROUP BY user_id HAVING MAX(start_time) < NOW() - INTERVAL '6 months') `) if err != nil { return err