Commit Graph

18 Commits

Author SHA1 Message Date
Chris Farhood d9e7c36a09 fix(GRO-1214): align slot generation with buffer semantics and correct test mocks
- slots.ts: make bufferMinutes optional on BookedSlot (defaults to 0 via ??)
  to handle test fixtures and legacy data that omit this field
- slots.test.ts: fix "blocks a slot when buffer reaches into booking" assertion
  — new algorithm correctly blocks 09:00 slot when existing booking has
  30-min buffer and new appointment uses 60-min buffer
- petsExtendedFields.test.ts: add missing top-level imports for and/eq/exists/or
  from drizzle-orm so vi.mock factory closure resolves correctly
- portal.test.ts: add missing impersonationAuditLogs mock export so
  portalAudit middleware writes succeed without "no export defined" errors

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-14 13:54:48 +00:00
Chris Farhood 213a29c1bd Merge dev into flea-flicker/gro-1162-pet-buffer-time
Resolve conflicts in appointments.ts (import style) and stage all fixes:
- UAT_PLAYBOOK.md: add §4.4b buffer-aware availability test cases
- Migration 0031: add buffer_minutes and pet_size_category columns
- Fix DB conflict queries to use effective end (endTime + bufferMinutes)
- Remove dead code in book.ts
- Fix misleading test name in slots.test.ts

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-14 12:29:51 +00:00
the-dogfather-cto[bot] db10320c8f fix(auth): override Better Auth sign-in rate limit defaults (#11)
fix(auth): override Better Auth sign-in rate limit defaults
2026-05-14 10:52:31 +00:00
Chris Farhood 40a4023c65 feat(GRO-1202): add sign-in/sign-up rate limit overrides
Port rate limit customRules from groombook/app PR #392 to groombook/api.
Adds per-route limits for /sign-in/social, /sign-in/email, and /sign-up/email
to both AUTH_DISABLED and production better-auth() instances.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-14 10:34:32 +00:00
Chris Farhood 7233e5ab16 feat(api): scheduling engine buffer time integration
- Add bufferMinutes column to appointments table (default 0)
- Add petSizeCategory to pets table for buffer resolution
- Extend BookedSlot interface with bufferMinutes
- Update generateAvailableSlots() to account for existing buffers
  and new appointment's buffer when checking availability
- Add resolveBufferMinutes() helper based on pet size/coat
- Update GET /availability to accept petSizeCategory/petCoatType params
  and pass newBufferMinutes to slot generation
- Update POST /appointments to resolve and store bufferMinutes
  and check existing appointment buffers in conflict detection
- Update admin appointments.ts: resolve buffer on create, account
  for existing buffers in all conflict checks (create/update/cascade)
- Add buffer time test cases to slots.test.ts covering:
  - new appointment buffer blocks overlapping slots
  - existing booking buffer extends blocking window
  - business hours check includes new appointment buffer
  - backward compatibility (bufferMinutes=0)
  - resolveBufferMinutes() for all size/coat combinations

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-14 09:44:18 +00:00
groombook-engineer[bot] d598511b75 fix: resolve pre-existing TypeScript errors for CI compliance (#9)
Merge PR #9: fix pre-existing TypeScript errors for CI compliance

All Lint & Typecheck and Test checks pass. Ready to merge.

cc @cpfarhood
2026-05-14 07:50:28 +00:00
Chris Farhood 434c7b94e2 fix: export named DB utilities in petsExtendedFields test mock
pets.ts imports pets, appointments, and, eq, exists, or directly from
"../db". The vi.mock factory only returned getDb, causing vitest to throw
"No 'pets' export is defined" and 7 tests to get 400 instead of 201/200.
Fix adds the missing named exports to the mock return object.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 07:24:52 +00:00
Chris Farhood 70af9da338 feat(api): add extended pet profile fields — schema, migration, CRUD, Zod validation
Adds five new nullable columns to the pets table:
- coat_type (text)
- temperament_score (integer, range 1–5)
- temperament_flags (jsonb, string[])
- medical_alerts (jsonb, typed MedicalAlert[])
- preferred_cuts (jsonb, string[])

Also:
- Exports MedicalAlert interface and MedicalAlertSeverity type from schema
- Updates shared Pet type in packages/types
- Adds Zod validators for all fields (ranges, max lengths, enum)
- Adds 14 tests covering happy path and validation edge cases
- Fixes drizzle.config.ts schema path (was ./src/schema.ts, correct is ./src/db/schema.ts)

Refs: GRO-1176

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-14 04:35:51 +00:00
the-dogfather-cto[bot] e714200b71 Merge pull request #7 from groombook/fix/uat-tester-oidc-sub
fix(api): add UAT Tester staff creation in seed script
2026-05-12 21:57:44 +00:00
Chris Farhood 1e70e01046 fix(api): add UAT Tester staff creation in seed script
Adds dedicated SEED_UAT_TESTER_OIDC_SUB handling to create the
uat-tester staff record with proper oidcSub mapping to Authentik user PK 237.

Fixes GRO-1151
2026-05-12 21:44:42 +00:00
the-dogfather-cto[bot] 83d7fecdd3 fix: correct test mock paths from "./db" to "../db" (#5)
fix: correct test mock paths from "./db" to "../db"
2026-05-12 21:33:02 +00:00
Chris Farhood 2448887924 fix: regenerate pnpm-lock.yaml to sync with package.json
- Adds missing drizzle-kit, drizzle-orm, postgres dependencies
- Addresses CI failures from Lint & Typecheck and Test jobs
- Resolves QA feedback from Lint Roller on PR #5
2026-05-12 21:13:55 +00:00
Chris Farhood f4995d987d fix: correct test mock paths from "./db" to "../db"
Fixes incorrect vi.mock paths that were causing tests to fail.
The mock path should match the import path in the route files.

This addresses the authProvider test mock path issue on PR #2.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-12 19:54:29 +00:00
the-dogfather-cto[bot] c9b699527c docs: add UAT_PLAYBOOK.md for API service (#3)
docs: add UAT_PLAYBOOK.md for API service
2026-05-11 14:14:31 +00:00
Chris Farhood 54a6b047fb docs: add UAT_PLAYBOOK.md for API service
Created comprehensive UAT playbook covering all 13 route groups with test cases for authentication, client management, pet management, appointment scheduling, services, staff management, invoicing & payments, customer portal, waitlist, search, reports, impersonation, and settings & setup.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-11 13:47:51 +00:00
Hugh Hackman 1855b374b5 refactor: inline packages/db and packages/types into api package
Phase 2 extraction: groombook/api from groombook/app monorepo.

Changes:
- Move packages/db content to apps/api/src/db/
- Move packages/types content to apps/api/src/types/
- Inline database schema and migrations into api package
- Update Dockerfile to build single package
- Update CI workflow for single-package structure
- Fix vitest.config.ts aliases

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 21:21:42 +00:00
Hugh Hackman 004725ae6e Add pnpm-lock.yaml
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 21:11:55 +00:00
Hugh Hackman 51f95e0fd6 Initial extraction: groombook/api from groombook/app monorepo
Part of GRO-802 monorepo breakdown.

Changes:
- Extract apps/api/ as the main API service
- Inline packages/db/ (database schema, migrations, utilities)
- Inline packages/types/ (shared TypeScript types)
- Add CI workflow for lint, typecheck, test, build, docker
- Port Dockerfile with 4 stages: runner, migrate, seed, reset

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-02 21:10:21 +00:00