popertots and Sisyphus
f7cc278423
feat(backend): update main entry and test DB utilities
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:50 +01:00
popertots and Sisyphus
2dbb1486b0
feat(backend): update Square integration, validators, and image validation
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:47 +01:00
popertots and Sisyphus
bc6a5461c1
feat(backend): update webhooks and DAV service
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:45 +01:00
popertots and Sisyphus
cd12317ff7
feat(backend): update user handlers and tests
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:44 +01:00
popertots and Sisyphus
5e795b6291
feat(backend): update services and today handlers
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:40 +01:00
popertots and Sisyphus
6c89fea118
feat(backend): update scheduling handlers
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:39 +01:00
popertots and Sisyphus
6ff35a5cc7
feat(backend): update portfolio images handler
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:37 +01:00
popertots and Sisyphus
aeab289be9
feat(backend): add payment discount preview and status tests
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:34 +01:00
popertots and Sisyphus
3cb5a3e360
feat(backend): add loyalty and refund features
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:32 +01:00
popertots and Sisyphus
31cc3ef5c3
feat(backend): update payments handlers and service
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:29 +01:00
popertots and Sisyphus
81e2005114
feat(backend): update notifications handler
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:27 +01:00
popertots and Sisyphus
e1f51420f7
feat(backend): add booking dedup, deposit tests and test main
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:24 +01:00
popertots and Sisyphus
c805fea7df
feat(backend): update reservations
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:22 +01:00
popertots and Sisyphus
2493137c39
feat(backend): update bookings tests
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:21 +01:00
popertots and Sisyphus
493e2ae76f
feat(backend): update bookings core handlers
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:18 +01:00
popertots and Sisyphus
032a6dedf7
feat(backend): update admin reserve handler
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:17 +01:00
popertots and Sisyphus
3582965492
feat(backend): update admin settings and test infrastructure
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:12 +01:00
popertots and Sisyphus
f689202984
feat(backend): update admin custom services handler
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:11 +01:00
popertots and Sisyphus
7ef3f6dcf7
feat(backend): update admin discount campaigns handler
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:09 +01:00
popertots and Sisyphus
b253ab9732
feat(backend): update rate limiting middleware
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:06 +01:00
popertots and Sisyphus
b6a23f8889
feat(backend): update local auth handler and tests
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:05 +01:00
popertots and Sisyphus
37e1069404
feat(backend): update auth middleware
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:02 +01:00
popertots and Sisyphus
b5c1eef8c2
feat(backend): update JWT auth implementation and tests
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:26:00 +01:00
popertots and Sisyphus
2d0071c453
feat(backend): update DB layer with tests
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:25:57 +01:00
popertots and Sisyphus
982eb64098
deps(backend): update Go module dependencies
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-18 16:25:47 +01:00
popertots and Sisyphus
e46df47a8f
fix(backend): delete admin_notifications before booking hard-delete
...
The admin_notifications.booking_id FK has no ON DELETE CASCADE, so hard-deleting a booking with existing notifications fails with a FK constraint violation. Fix by explicitly deleting related notifications before the booking DELETE.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-15 23:19:35 +01:00
popertots and Sisyphus
2574baf099
feat(backend): fetch standard and custom services in bookings list
...
Populate booking.Services with a UNION query across booking_services and booking_custom_services tables, returning service name, price, duration, and override values.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-15 21:27:29 +01:00
popertots and Sisyphus
459adf7001
feat(backend): increase per_page cap to 500 in bookings list handler
...
Raise per_page limit from 100 to 500 in parseGetAllBookingsRequest to support large booking lists. Add test coverage for per_page=500 acceptance and per_page=600 rejection (fallback to 10).
Ultraworked with Sisyphus
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-15 20:27:41 +01:00
popertots and Sisyphus
2b942a48bd
feat(backend): add done-for-day summary with DailySummary, week aggregation, exceptional hours support
...
Introduce DoneForDay state and DailySummary struct in current-next endpoint. Adds computeAggregateSummary for daily/weekly revenue, tips, duration, customer stats, and new booking services. Adds isDayOpen, findWeekSummaryRange, and getClosingTime with exceptional hours lookup. Scopes all current/next queries to today's date range.
Ultraworked with Sisyphus
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-15 20:27:36 +01:00
popertots and Sisyphus
c62e8322b5
test(backend): add comprehensive test suite for custom services feature
...
Add 18 test functions for admin custom services CRUD handlers, 6 tests for admin booking creation with custom services, and 5 tests for booking custom service integrations (confirm overrides, get, validation, progress). Also fix FK constraint issues in test request creation.
Ultraworked with Sisyphus (https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-15 16:58:19 +01:00
popertots and Sisyphus
ad0af39237
feat(backend): integrate custom services across booking, payment, scheduling, today, and user modules
...
Update booking create/confirm/progress/reserve handlers to support custom_service_ids and custom overrides. Add UNION ALL queries to include custom_services in booking detail, payment summary, scheduling availability, today dashboard, and customer relationship queries.
Ultraworked with Sisyphus (https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-15 16:58:10 +01:00
popertots and Sisyphus
ede0873c08
feat(backend): implement custom services CRUD handlers
...
Add 6 admin endpoints for custom services: list (with search/popular/pagination), create, get, update, promote to regular service, and delete. Each handler validates admin role via middleware.
Ultraworked with Sisyphus (https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-15 16:58:01 +01:00
popertots and Sisyphus
baecc9c8ea
chore: add custom_services and booking_custom_services to test DB cleanup lists
...
Add custom_services and booking_custom_services to testdb dropOrder and TruncateTables lists, and add CreateTestCustomService/DeleteCustomService fixture helpers.
Ultraworked with Sisyphus (https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-15 16:57:42 +01:00
popertots and Sisyphus
6902eabf47
feat(backend): add idempotency key cleanup scheduler
...
CleanupOldIdempotencyKeys clears stale idempotency keys from bookings, payments, and till_sales older than 24h (non-pending status). Wired into daily cleanup cycle in default-hours.go.
Tests: clears old bookings/payments/till_sales, preserves recent and pending entries.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-12 10:50:54 +01:00
popertots and Sisyphus
3c447a5c33
fix(backend): address gift card review findings
...
Fix #1 : remove expiry_date from gift card INSERTs (rolling 24-month via last_used_at only)
Fix #2 : add FOR UPDATE to RedeemGiftCard SELECT (race condition)
Fix #6 : add ?type=customer|inventory filter to GetGiftCards
Fix #7 : add admin_audit_log INSERT to GetUserGiftCardBalanceAdmin
Fix #10 : refactor normalizeCode to validators.NormalizeGiftCardCode
Schema: add admin_audit_log table (GDPR Article 30), update testdb.go
Tests: expiry-date-null, inventory-filter, audit-log, db table references
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-12 10:50:49 +01:00
popertots and Sisyphus
e7fd9c89eb
style(backend): lowercase error messages across handlers
...
Normalize error message casing to lowercase for consistency across auth, bookings, services, customer relationship, and profile handlers.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-12 10:50:43 +01:00
popertots and Sisyphus
b36d8aded8
test(backend): add phone injection-security tests
...
Verify ValidateUKPhoneNumber rejects SQLi, XSS, command injection, and control character payloads. Also verifies mixed injection-wrapped numbers are rejected (libphonenumber doesn't extract digits from noise).
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-12 10:50:39 +01:00
popertots and Sisyphus
5f0248540f
feat(backend): add email validator package
...
Add ValidateEmail and NormalizeGiftCardCode functions with comprehensive tests. Migrate guest.go from inline mail.ParseAddress to validators.ValidateEmail.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-12 10:50:34 +01:00
popertots and Sisyphus
834c0f1da0
chore: remove Go test binary artifacts
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-11 22:08:34 +01:00
popertots and Sisyphus
56d91ba4ef
chore(tests): add advisory locks and statement parser for test infrastructure
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-11 22:08:23 +01:00
popertots and Sisyphus
6de0371e1d
feat(user): add email check endpoint for registered user detection
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-11 22:08:22 +01:00
popertots and Sisyphus
b750b3c203
feat(scheduling): add gift card expiry and idle account cleanup
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-11 22:08:21 +01:00
popertots and Sisyphus
44895a3697
feat(admin): add business settings API and routing for gift card config
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-11 22:08:21 +01:00
popertots and Sisyphus
30ded0bb95
feat(payments): add gift card system v2 with management, expiry, inventory, audit log
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-11 22:08:18 +01:00
popertots
4e174a6123
Fixes for giftcards and phone input
2026-06-06 15:10:48 +01:00
popertots
5258f90b06
Add giftcard management
2026-06-06 14:26:42 +01:00
popertots
310e6aaa80
Add giftcard management
2026-06-06 14:26:33 +01:00
popertots
0d4a74bd4a
feat: caret preservation and Luhn validation in card inputs
...
- Added generic formatAndPreserveCursor() helper on frontend to track
and restore selection caret position during dynamic input sanitization
- Applied to all card inputs, gift card code inputs, and expiry inputs
- Added Luhn validation (isValidLuhn) for saved cards and gift cards
- Rebuilt payments test DB and got 100% green tests
2026-06-05 21:05:36 +01:00
popertots
f4a6033715
feat: financial data retention & aggregation system
...
Add CleanupExpiredFinancialRecords to enforce HMRC + Limitation Act
compliance (7-year retention, 1-year post-anonymization buffer).
- financial_aggregates table: monthly totals by payment method/type (no PII)
- CleanupExpiredFinancialRecords(): aggregates expired payments/refunds,
deletes granular records, idempotent via ON CONFLICT DO UPDATE
- Wired into GET /api/availability alongside existing cleanup functions
- 8 tests: 7yr expiry, 1yr buffer, 9yr override, aggregation totals,
idempotency, active user protection, both-thresholds elapsed, refunds
- testdb.go: financial_aggregates in drop-order and truncate lists
- README + Technical Manual updated
2026-06-05 16:37:04 +01:00
popertots and Sisyphus
f88854e5c2
feat(scheduling): add expired loyalty cleanup and extend guest anonymization
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-06-05 15:40:38 +01:00