Bug: portal pet save 404s — implement PATCH /api/portal/pets/:petId + enrich GET (GRO-1480/GRO-1470) #162
Open
opened 2026-06-08 03:31:05 +00:00 by Flea Flicker
·
0 comments
No Branch/Tag Specified
main
flea/uat-to-main-gro-2359-api
uat
dev
release/main-GRO-2342-api
release/main-GRO-2319-api
flea/promote-main-gro-2311
promote/GRO-2319-api-to-uat
feat/GRO-2319-portal-waitlist-surfacing
flea/promote-main-gro-2172
dev-to-uat-gro-2311
flea/gro-2311-seed-portal-statusbadge-appts
promote/gro-2172-pets-to-uat
fix/gro-2172-pet-extended-fields
uat-to-main-gro-2299
flea/promote-main-gro-2294
promote/dev-to-uat-gro-2299
gro-2299-redact-patch-settings
flea/promote-gro-2294-uat
flea/gro-2294-route-opt-hardening
flea/uat-to-main-gro-2157-frozen
promote/dev-to-uat-gro-2225
flea/gro-2157-navigation-export
flea/gro-2235-waitlist-duplicate-409
feat/gro-2225-uat-seed-route-cohort
flea/uat-to-main-gro-2234-api
flea/dev-to-uat-gro-2156
flea-flicker/gro-2234-portal-session-sliding-ttl
release/main-6120b96
flea/gro-2156-travel-buffer-reorder
release/main-eb92f99
fix/gro-2214-portal-waitlist-validation
fix/gro-2203-portal-pet-patch-uuid-validation
dev-to-uat-gro-2155
feat/gro-2155-route-optimize-endpoints-dev
fix/gro-2163-migrate-pre-dns-wait
fix/gro-2187-portal-photokey-hijack
dev-to-uat-gro-2154
feat/gro-2154-geocoding-endpoints-dev
flea-flicker/gro-2197-ci-api-gate
dev-to-uat-gro-2153
dev-to-uat-gro-2187
fix/gro-2187-portal-pets-patch
dev-to-uat-gro-2129
flea-flicker/gro-2123-cleanup-stale-seed-duplicate
dev-to-uat-gro-2123
flea-flicker/gro-2123-seed-advisory-lock
promote/dev-to-uat-gro-2100
flea/gro-2100-uat-groomer-pet-linkage
flea/gro-2062-owner-bypass-audit
flea/gro-2052-rbac-betterauth-user-autoprovision
dogfather/gro-2013-promote-uat
flea/gro-2013-owner-bypass-deployed-tree
flea/gro-2033-idempotent-pet-profile-migrations
fix/gro-2014-profile-summary-error-handling
flea/gro-2000-uat-password-source-doc
fix/gro-1999-uat-seed-extra-large
fix/gro-1983-seed-pnpm-baked
fix/GRO-1979-coat-type-pet-size-enum-fix
fleaflicker/GRO-1962-deterministic-testcoopper-rocky
flea/gro-1977-seed-idempotency
fix/GRO-1977-seed-credential-idempotency
promote/dev-to-uat-gro-1971
fix/gro-1971-coat-type-enum-missing-short
fix/GRO-1962-uat-seed-pet-medicalalerts
flea/GRO-1955-fix-uc-undefined-seed
fix/GRO-1909-migrate-corepack-offline
fix/GRO-1953-coat-type-short-missing
fleaflicker/gro-medical-alert-types-behavioral-skin
fleaflicker/gro-1921-uat-reset-full-seed
flea/GRO-1945-pets-visitcount-hotfix
fix/GRO-1935-uat-customer-client-seed
fix/GRO-1914-seed-typeof
feature/GRO-1898-extended-pet-profile-seed
seed/extended-profile-fields-gro-1898
fix/gro-1889-reset-demo-data-pnpm
promote/dev-to-uat-gro-1866
fix/gro-1866-qa-fixes
fix/gro-1866-sso-bridge
fix/gro-1850-pet-profile-migration
promote/dev-to-uat-gro-1790
flea-flicker/pet-profile-summary
ff/gro-1765-trigger-ci
promo/gro-1764-uat
ci/gro-1757-build
fix/gro-1757-sso-auto-provision
fix/gro-1754-uat-ci
fix/gro-1754-trigger-ci-v2
fix/gro-1752-factories-v2
fix/gro-1752-factories-only
fix/gro-1746-apply-uat-seed-to-root-src
fix/gro-1752-extended-pet-profile-fields
promo/gro-1749-uat
fix/gro-1749-uat-seed-sync
fix/gro-1743-uat-seed-data
fix/gro-1480-portal-pets-patch
fix/gro-1678-econnreset-robustness
fix/gro-1576-ci-provenance-false
fix/gro-1575-ci-provenance
fix/gro-1566-api-health-auth-bypass
fix/gro-1544-api-health-endpoint
fix/gro-1533-migration-0031-coat-type
fix/gro-1533-missing-migration-0032
fix/gro-1533-missing-migration-journal
revert/gro-1533-dockerfile-fix
fix/gro-1533-revert-dockefile-build-change
flea-flicker/gro-1531-seed-db-filter
fix/gro-1522-ci-images-node22
pr-44
flea-flicker/gro-1509-better-auth-account-not-linked
flea-flicker/gro-1162-pet-buffer-time
fix/gro-1461-uat-playbook-auto-provision
flea-flicker/pet-profile-editor
fix/gro-1441-remove-duplicate-coat-props
fix/gro-1390-pets-test-mock-hoisting
fix/gro-1395-drizzle-orm-root-dep
gitea/migrate-workflows
flea-flicker/fix-gro-1370-ts-and-test-errors
fix/api/add-devdep-drizzle-orm-fix-vitest
pr-19
flea-flicker/uat-email-password-seed
fleaflicker/gro-1272-v2
fleaflicker/gro-1272-auto-provision-staff
add-renovate-config
flea-flicker/gro-1231-pnpm-workspace-dockerfile
fix/GRO-1202-rate-limit-override
fix/typescript-errors
flea-flicker/pet-profile-extended-fields
fix/uat-tester-oidc-sub
flea-flicker/fix-authprovider-mock-path
flea-flicker/auto-create-staff-oauth-users-v2
flea-flicker/auto-create-staff-oauth-users
docs/GRO-1099-uat-playbook-api
flea-flicker/fix-ci-install-deps-v2
flea-flicker/fix-ci-install-deps
No results found.
Labels
Clear labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
Something isn't working
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Good for newcomers
Extra attention is needed
This doesn't seem right
Further information is requested
This will not be worked on
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
ai-review (AI Review)
gb_barkley (Barkley Trimsworth)
cpfarhood (Chris Farhood)
ci (Continuous Integration [bot])
gb_flea (Flea Flicker)
flux (Flux CD)
admin (Gitea Admin)
gb_lint (Lint Roller)
renovate (Mend Renovate)
gb_pawla (Pawla Abdul)
gb_scrubs (Scrubs McBarkley)
gb_shedward (Shedward Scissorhands)
gb_dogfather (The Dogfather)
Clear assignees
No Assignees
Flea Flicker
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: groombook/api#162
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bug: customer portal pet save 404s —
PATCH /api/portal/pets/:petIdnot implementedFound during UAT §5.23 (Paperclip GRO-1480, feature GRO-1470). The web fix (groombook/web PR #13) added a pet-profile save handler that calls
PATCH /api/portal/pets/{petId}, but the API never implemented that route, so every customer save returns 404 and nothing persists.Evidence (UAT)
PATCH https://uat.groombook.dev/api/portal/pets/c0000001-0000-0000-0000-000000000003→ 404 Not Found (req body correct, incl."coatType":"curly").Root cause (deployed tree =
src/, per Dockerfile)src/routes/portal.tsonly registers portal PATCH routes for/appointments/:id/notesand/waitlist/:id. There is noportalRouter.patch("/pets/:petId", …).Required changes (
src/routes/portal.ts)portalRouter.patch("/pets/:petId", zValidator("json", schema), …):pet.clientId === c.get("portalClientId")(else 404, mirroring the appointments-notes handler).petscolumns:name→name,breed→breed,weightKg/weight→weightKg(numeric/string|null),birthDate→dateOfBirth(Date|null),notes→groomingNotes,photoUrl→photoKey,healthAlerts→healthAlerts,coatType→coatType(enum),petSizeCategory→petSizeCategory(enum; web "xlarge" → DBextra_large),preferredCuts→preferredCuts(string[]),medicalAlerts→medicalAlerts(jsonb).updatedAt. Return the updated pet.GET /portal/petsto returncoatType,petSizeCategory,healthAlerts,preferredCuts,medicalAlerts(currently only id/name/breed/weight/birthDate/photoUrl/notes) so a successful write is visible on reload.coatTypeEnum= short|medium|long|double|wire|silky|curly|hairless;petSizeCategoryEnum= small|medium|large|extra_large (packages/db/src/schema.ts).Pipeline
Engineer (Flea Flicker): branch off
dev, PR →dev(CI), then promotedev→uat. Once deployed to UAT, QA (Shedward) re-runs §5.23.Secondary (web, lower priority — separate)
TC-WEB-5.23.3 partial: only the Save button disables during save; input fields stay enabled. Spec wants all form controls disabled. Track in groombook/web.
Paperclip: GRO-1480 (UAT), parent GRO-1470.