3.3 KiB
3.3 KiB
Project notes
- dashboard: src/app/page.tsx lists open orders from GET /api/orders and finished orders from GET /api/orders?status=finished; order cards navigate to order detail; close order via PATCH /api/orders/:id; uses src/components/Navbar.tsx for sticky header/settings menu.
- car edit/delete: cars list rows in src/app/cars/page.tsx are clickable cards; src/app/cars/[id]/page.tsx offers Edit/Save and Delete, posting PATCH/DELETE to src/app/api/cars/[id]/route.ts.
- car create/lookup: src/app/orders/new/page.tsx → POST /api/cars with
lookup: true→ src/lib/vehicle-lookup.ts (DVLA for UK plates; ROI parser / MotorCheck for Irish plates); reg input uses a ref so programmatic fills work. - order detail + tasks: src/app/orders/[id]/page.tsx uses SWR to GET /api/orders/:id; task toggle/edit/delete via /api/tasks/:id; pricing recalculated server-side in PATCH; parts modal posts to /api/parts; close order via PATCH.
- pricing: task total = selected saved parts (qty × price) + laborHours × hourlyRate, manual
priceoverrides; order total stored in prisma/schema.prisma Order.total and recalculated in src/app/api/tasks/[id]/route.ts. - parts library: src/app/parts/page.tsx → /api/parts and /api/scrape-part using src/lib/scrape.ts (Cheerio on fetched page); add-part modal supports scraping a URL first. Parts page now has two tabs: Global (default) and Car Specific. Car-specific tab includes a car reg search field and shows only parts linked to that car.
- parts API: src/app/api/parts/route.ts GET supports
includeGlobalquery param; whencarIdis passed withincludeGlobal=true, it returns both car-specific and global parts; withincludeGlobal=false, it returns only car-specific parts. Default withoutcarIdshows only global parts. - parts in task edit: src/app/orders/[id]/page.tsx when editing a task, the available parts list defaults to car-specific parts only (via
includeGlobal=false). A "Show global parts" checkbox togglesshowGlobalPartsstate to also include global parts in the list. - quick tasks: seeded in prisma/seed.js, managed in src/app/quick-tasks/page.tsx, used when adding tasks in order detail; useCount incremented on add/finish.
- print: src/app/orders/[id]/print/page.tsx fetches GET /api/print/:id with type=service|invoice, day/range/prices params. Service report shows labour per task column, no prices by default. Invoice shows tasks list with Parts/Labour totals separated at bottom (no per-task labour column). Print stylesheet hides
.no-print. - car history: src/app/api/cars/[id]/history/route.ts returns finished tasks flat (no prices); src/app/cars/[id]/history/page.tsx bundles same-title tasks; src/app/cars/[id]/history/print/page.tsx is the printable bundled view.
- navbar: src/components/Navbar.tsx sticky header on all pages, includes settings menu panel with site name field and quick-tabs toggles; links Dashboard/Cars/Parts/Quick tasks and New order button.
- database: Prisma
DATABASE_URLin .env isfile:./dev.db, resolved relative to prisma/schema.prisma →prisma/dev.db. - test ids: data-testid attributes added to dashboard search/clear, order cards, reg input/lookup, car details fields, car edit/save/delete, car cards/search, task add/edit/toggle/delete, parts modal/scrape/fields, print and close-order buttons.