fix: remove redundant rollback, document asymmetry in cancellation notifications
CI / Go build (push) Successful in 1m42s
CI / Secrets scan (push) Successful in 1m56s
CI / Env docs check (push) Successful in 1m55s
CI / Frontend major deps (push) Successful in 2m6s
CI / Frontend deps check (push) Successful in 1m30s
CI / Nginx config check (push) Successful in 2m48s
CI / Docker compose check (push) Successful in 2m50s
CI / Frontend build (push) Successful in 3m7s
CI / Go vet (dev) (push) Successful in 1m14s
CI / go mod tidy (push) Successful in 33s
CI / Knip (push) Successful in 1m15s
CI / Go vulnerabilities (push) Successful in 1m46s
CI / Frontend QC (audit) (push) Successful in 46s
CI / Staticcheck (prod) (push) Successful in 3m36s
CI / Frontend a11y check (push) Successful in 2m17s
CI / Staticcheck (dev) (push) Successful in 3m51s
CI / golangci-lint (push) Failing after 4m8s
CI / Frontend QC (typecheck) (push) Successful in 1m25s
CI / Go vet (prod) (push) Has been cancelled
CI / Security scan (dev) (push) Has been cancelled
CI / Security scan (prod) (push) Has been cancelled
CI / Tests (prod) (push) Has been cancelled
CI / Tests (dev) (push) Has been cancelled
CI / Race (prod) (push) Has been cancelled
CI / Race (dev) (push) Has been cancelled
CI / Svelte strict check (push) Has been cancelled
CI / Frontend QC (lint) (push) Has been cancelled
CI / Go build (push) Successful in 1m42s
CI / Secrets scan (push) Successful in 1m56s
CI / Env docs check (push) Successful in 1m55s
CI / Frontend major deps (push) Successful in 2m6s
CI / Frontend deps check (push) Successful in 1m30s
CI / Nginx config check (push) Successful in 2m48s
CI / Docker compose check (push) Successful in 2m50s
CI / Frontend build (push) Successful in 3m7s
CI / Go vet (dev) (push) Successful in 1m14s
CI / go mod tidy (push) Successful in 33s
CI / Knip (push) Successful in 1m15s
CI / Go vulnerabilities (push) Successful in 1m46s
CI / Frontend QC (audit) (push) Successful in 46s
CI / Staticcheck (prod) (push) Successful in 3m36s
CI / Frontend a11y check (push) Successful in 2m17s
CI / Staticcheck (dev) (push) Successful in 3m51s
CI / golangci-lint (push) Failing after 4m8s
CI / Frontend QC (typecheck) (push) Successful in 1m25s
CI / Go vet (prod) (push) Has been cancelled
CI / Security scan (dev) (push) Has been cancelled
CI / Security scan (prod) (push) Has been cancelled
CI / Tests (prod) (push) Has been cancelled
CI / Tests (dev) (push) Has been cancelled
CI / Race (prod) (push) Has been cancelled
CI / Race (dev) (push) Has been cancelled
CI / Svelte strict check (push) Has been cancelled
CI / Frontend QC (lint) (push) Has been cancelled
This commit is contained in:
@@ -3173,11 +3173,13 @@ func ConfirmBookingHandler(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("ALERT: failed to scan total_duration_minutes for booking %s: %v", bookingID, err)
|
||||
durationMinutes = 60
|
||||
}
|
||||
_ = dav.Service.CreateEvent(1, dav.EventInput{
|
||||
if err := dav.Service.CreateEvent(1, dav.EventInput{
|
||||
Summary: "Crussell Booking",
|
||||
Start: booking.StartTime,
|
||||
End: booking.StartTime.Add(time.Duration(durationMinutes) * time.Minute),
|
||||
})
|
||||
}); err != nil {
|
||||
log.Printf("Failed to create DAV calendar event for booking %s: %v", bookingID, err)
|
||||
}
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
@@ -232,6 +232,9 @@ func AdminCancelBookingHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// No admin notification needed for pending/admin-initiated cancellations —
|
||||
// the admin is the one performing the cancellation, so notifying them would
|
||||
// be self-referential.
|
||||
// Only notify on cancellation if booking was not pending (e.g. confirmed, in_progress)
|
||||
if originalStatus != "pending" {
|
||||
notificationQuery := `
|
||||
|
||||
@@ -1802,7 +1802,6 @@ func CreateTipPayment(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
paymentID, err := service.CreatePaymentRecordTx(r.Context(), tx, record, nil)
|
||||
if err != nil {
|
||||
_ = tx.Rollback(r.Context())
|
||||
log.Printf("Failed to create payment record: %v", err)
|
||||
http.Error(w, "internal server error", http.StatusInternalServerError)
|
||||
return
|
||||
|
||||
@@ -1019,11 +1019,6 @@ func TestCreateBookingPayment_MultiplePartialAllowed(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSquareWebhook_DevMode_NoSignature(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip("webhook handler tested in webhooks package")
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// User Booking Payment Tests — deposit, full, partial, balance
|
||||
// ============================================================
|
||||
|
||||
@@ -322,7 +322,7 @@ func computeAggregateSummary(r *http.Request, rangeStart, rangeEnd time.Time) *D
|
||||
) sub ON true
|
||||
WHERE b.start_time >= $1 AND b.start_time < $2
|
||||
`
|
||||
_ = db.Conn.QueryRow(r.Context(), query, rangeStart, rangeEnd).Scan(
|
||||
if err := db.Conn.QueryRow(r.Context(), query, rangeStart, rangeEnd).Scan(
|
||||
&summary.TotalPaymentsToday,
|
||||
&summary.TotalTipsToday,
|
||||
&summary.TotalVATCollected,
|
||||
@@ -335,7 +335,9 @@ func computeAggregateSummary(r *http.Request, rangeStart, rangeEnd time.Time) *D
|
||||
&summary.LastCustomerName,
|
||||
&summary.LastCustomerVisits,
|
||||
&summary.GuestCustomers,
|
||||
)
|
||||
); err != nil {
|
||||
log.Printf("Failed to scan today summary: %v", err)
|
||||
}
|
||||
|
||||
// Customers served = new + returning + guest (distinct people, not bookings)
|
||||
summary.CustomersServed = summary.NewCustomers + summary.ReturningCustomers + summary.GuestCustomers
|
||||
|
||||
@@ -563,10 +563,8 @@ func TestDeleteAccount_WithProfilePicture(t *testing.T) {
|
||||
|
||||
// Handler returns 204 regardless of goroutine result
|
||||
assert.Equal(t, http.StatusNoContent, w.Code)
|
||||
// Allow goroutines to start before test cleanup
|
||||
assert.Eventually(t, func() bool {
|
||||
return true
|
||||
}, 100*time.Millisecond, 10*time.Millisecond)
|
||||
// Best-effort wait for background goroutine to initiate
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
@@ -592,7 +590,7 @@ func TestDeleteAccount_WithSquareClient(t *testing.T) {
|
||||
handler.ServeHTTP(w, req)
|
||||
|
||||
assert.Equal(t, http.StatusNoContent, w.Code)
|
||||
assert.Eventually(t, func() bool {
|
||||
return true
|
||||
}, 100*time.Millisecond, 10*time.Millisecond)
|
||||
// Best-effort wait for background goroutine to initiate
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user