munch-ease-frontend/README.md
jableader fd35640fd8
Some checks failed
CI / build-test (push) Has been cancelled
Squashed commit of the following:
commit a94394866d9e957693c7380b846cfee98739b8be
Author: jableader <jacobdunk@gmail.com>
Date:   Mon Oct 20 00:11:28 2025 +1100

    Ran codegen

commit affaa0e4a80edbb5185f06b3a252e1790e349ee3
Author: jableader <jacobdunk@gmail.com>
Date:   Mon Oct 20 00:09:36 2025 +1100

    Moved shopping.ts into composable

commit 83ced27a549784a35fa2715630d6fdca7f12f4aa
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 23:43:09 2025 +1100

    Purchase fixed

commit 2fff14016eedaeb773c0f8b4ee9ccf08a1027449
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 22:54:36 2025 +1100

    typescript migration complete

commit 17651bcc8b0f40ac1579563379c8fc45aba1997d
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 22:38:22 2025 +1100

    Removing redundant null checks and type checking

commit 0cc3a508cd5c7d723eb76d665443b4d0fdad493f
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 22:30:52 2025 +1100

    Moving date to sdk layer

commit 35d1189009b27876dd167f353c04f217b7c2805e
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 21:42:47 2025 +1100

    No components re-parse dates already decoded by the boundary.

commit c4b82a31fad75bd5ec987847847076b537d35a7d
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 21:09:03 2025 +1100

    Update spec and types

commit 55984bf7c9d51e76eaa6713a3ca86e9a73eb6b03
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 20:22:01 2025 +1100

    Disallow casting entirely

commit eb02dc6a7b52048281a87924765d9aab1303150f
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 19:24:57 2025 +1100

    Replaced components[schemas] outside sdk

commit 2f4c1bed56724e4f8a0d586921367604ce127a1a
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 19:06:38 2025 +1100

    removed persons.ts

commit ae966db8a330c9f521f3c3cb7417c4f201467661
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 18:56:27 2025 +1100

    Remove casts from sdk

commit 42c253021e504b45963834e56551ded55be377f1
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 18:38:05 2025 +1100

    Remove *Like types

commit b0a4e21f19005fd69c0e9e16edaa9c10b1ca8567
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 18:32:26 2025 +1100

    Defined quantity construct

commit bf4666b89e2d395bdd091ffb6ee66a9cfb866c6d
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 18:27:55 2025 +1100

    Moved shopping view-model mapping (DTO → UI groups/meals) into `useShopping` (`mapItemToUI`, `groupsFrom`, `mealsFrom`).
    - Refactored `CurrentShoppingListPage.vue` to consume composable helpers (less duplication, no local cast-heavy mapping).
    - Refactored `PurchasedShoppingListPage.vue` to consume composable helpers and return typed SDK result; removed casts.

commit e7f84b453509a8fcffbb9923ec001f5be85e67e4
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 18:17:29 2025 +1100

    Removing casts, any, unknown and runtime type checking

commit 6346eef4aff4d64b04f7dfa837c5b988645c242c
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 17:42:14 2025 +1100

    domain/decoders.ts: removed casts; `purchaseDate` and `quantity` now trust API shapes.

commit 8b62eb9a9f2c0fe058d2dd37cc80071089379c34
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 17:36:50 2025 +1100

    Plan alignment

commit dd81fd454b8e14874930cfc44828abddffd50c41
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 17:10:11 2025 +1100

    More cast removals

commit 377d143ffc8596f46a3b32746d3710d99eb257cd
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 16:53:30 2025 +1100

    Type tightening in sdk

commit ce2577f22190b18a52ae0fa4238c6d1beb7e3bb7
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 16:24:51 2025 +1100

    All mappers removed/neutralized

commit 177205561a2d44aae2683e046960ef5fe8992255
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 16:20:34 2025 +1100

    Replace ingredientnormalized with ingredient

commit fc75b24977cc89d420dc768fb4dc4ade84ed32c2
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 16:16:03 2025 +1100

    More type safety tweaks and changes

commit c35cc2d3d58307290bbc2d5978baa48c1eda97b6
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 15:46:13 2025 +1100

    Update vue-tsc

commit 2cd429804ca34a42c83ea81a3ae68e2cfccb5e36
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 15:28:01 2025 +1100

    Ongoing SDK changes to tighten datatypes

commit e11847ae515eadf1bd33e88e154125fe361a5191
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 14:31:03 2025 +1100

    Enforce template type checking

commit 777b8dee7e9ef0807a2b2c039443920671fe9c2d
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 14:28:52 2025 +1100

    Boilerplate Collapse mappers to “decoders” and delete ad‑hoc view types

commit 4169c69d59cc16a24298351c38a60b4d4845f0c9
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 14:25:04 2025 +1100

    Plan updates

commit de65164c91d9dc641ec86424bd4fe40f91bb4ada
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 14:16:37 2025 +1100

    More camelCase changes

commit 4121c2157511f706b4704c5d5f769034d9bce5a0
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 14:00:48 2025 +1100

    Remove unused js shims and autoformat project

commit d475565529bd0c12f06f85f0bcbf19c857176fa7
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 13:59:10 2025 +1100

    camelCase conversions and api type propogation

commit 7b3b633a9d21c74977d4de120138fff192faaa78
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 13:11:22 2025 +1100

    Strategise ts improvements

commit 9396e4928abcf9d8a74a656ad21913f95e8e3e41
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 13:06:19 2025 +1100

    Linting errors

commit 528fa3bc2f6c42de6de37d9593d2ed31630d0e81
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 12:59:21 2025 +1100

    Recipe search pagination

commit 4993c3e53f540e098f3275715c86754dee9392af
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 12:33:13 2025 +1100

    Removed redundant nonnull check

commit c03d0b582d0a8b17e675cdf9bdab09eac4091d44
Author: jableader <jacobdunk@gmail.com>
Date:   Sun Oct 19 12:29:57 2025 +1100

    Persons api pagination

commit 67008b4a94a90295ed811594ca0e7f37c80a8305
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 22:44:32 2025 +1100

    ts pages starting to work

commit 0144e7f70d19289007d6b035594786ce573cbc70
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 22:39:17 2025 +1100

    More typescript fixes

commit dc429f84b48ca5892c6043db81b89fa6431d872d
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 18:28:54 2025 +1100

    5) API client and codegen guardrails — DONE (scripts) / PARTIAL (CI wiring)

commit 36ba555d9a600ca8cca4c18571e0d96584243556
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 18:26:30 2025 +1100

    Tighten composable and UI types (remove last anys) — DONE

commit 97523a9ef6aa972497e62d63c6f666453bb7eefc
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 18:24:11 2025 +1100

    Align OpenAPI params to remove residual casts, Strengthen MSW tests for the typed client

commit 608f6b751cb982487e90560792aec33317981c60
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 18:14:11 2025 +1100

    ts complete, rerun codegen

commit ca28376ed7bcb4ff4c7669210ce6eebfd9cb6eaa
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 18:09:29 2025 +1100

    Document All JS under `src/` is now removed; the source tree is TS-only.

commit ff3338b108bbf094f987302a21f1779d8f23368f
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 17:59:49 2025 +1100

    Ts tests

commit ce4555a279c715f427f9d00c346561efd74705f8
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 17:56:18 2025 +1100

    Completed Generate real OpenAPI types and wire them

commit b7304aa7390f33a372acda46c593d6592aabf3f7
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 17:02:27 2025 +1100

    DatePicker ts conversion

commit cb6ebdba286d44dbaae522ee29d95aa3ccfb5dc1
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 16:56:38 2025 +1100

    Removed js files

commit 549eefd369499e0a1d35ff88a659c8aecd955a02
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 16:49:31 2025 +1100

    - Utilities converted to TS: `src/dateformats.ts`, `src/units.ts`; imports updated accordingly.
    - Router converted to TS: `src/router/index.ts`; legacy `index.js` removed.

commit 6f7731287f4166df5c02164ec4220e370c6d7a35
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 16:48:58 2025 +1100

    alerts ts conversion

commit 4b1baec85a74b75e94d2392fea3b5abee294089c
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 16:27:35 2025 +1100

    use v1 api

commit da11976b96d791935cb16c7b1fdb074a2c87f53c
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 16:18:17 2025 +1100

     - Shopping pages converted to TS: `MyShoppingPage.vue`, `CurrentShoppingListPage.vue`, `PurchasedShoppingListPage.vue` (typed refs/computed; stable keys; wired to helpers).

commit acf740380bf53386e12e108ba09a507141176733
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 16:08:22 2025 +1100

    Shopping MyShoppingPage converted to TS with typed refs.

commit 744d7e792d013f0ed04f11280f3351950925beee
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 16:05:19 2025 +1100

    Shopping gets types

commit 4e576dca94424383bdf753403d7764e22a28f377
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:57:50 2025 +1100

    Error tests

commit ac6ae41b840c30196a370a077e02953c63977908
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:56:20 2025 +1100

    More datatypes

commit d7ea6538b1af6144933a2603d330cb17e04809db
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:45:49 2025 +1100

    spec updates

commit 0d6cfc1328df8ab4a4baf8f31a7a4e1ea50fd850
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:44:34 2025 +1100

    `codegen:check` warns when backend spec is newer than generated types

commit 54bff353b8e7429961364803300b38bc70f963c2
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:42:24 2025 +1100

    PersonList ts

commit e5ffcdde7e9538525704581a82606261596d31f5
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:40:53 2025 +1100

    MealCard ts

commit 5432d8333c023b0c6e25c9a6ac31519c818e6a58
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:39:29 2025 +1100

    ue CLI now serves/builds with TypeScript entry, ESLint configured to parse TS, use ts code

commit aba3fd532550a90adeb957b4ddbb43798bcf9e5a
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:23:16 2025 +1100

    composables typescript

commit 28ba44cc951fddfe64c386e77a91c2f46060cfb8
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:19:09 2025 +1100

    let the typescriptin begin

commit 98e57e4d65cecdd1ed5ed3fbf6b1ebf46ae6af10
Author: jableader <jacobdunk@gmail.com>
Date:   Sat Oct 18 15:13:58 2025 +1100

    Added typescript
2025-10-20 00:12:40 +11:00

100 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Munch Ease — Plan, Cook, Shop, Repeat
Munch Ease is a snappy Vue 3 app that helps you plan meals, manage recipes, and turn plans into stress-free shopping lists. Search and save recipes, build your weekly meal plan, and seamlessly check items off your shopping list—everything stays in sync so you can focus on whats cooking.
Built with modern Vue patterns, a clean API layer, and lightweight tests, the project is easy to extend and fun to work on.
---
## Quick start
1) Install dependencies
```bash
npm install
```
2) Run the dev server
```bash
npm run serve
```
3) Run unit tests (Vitest)
```bash
npm run test
```
4) Build for production
```bash
npm run build
```
Environment
- API base URL: set VUE_APP_API_BASE (e.g. http://localhost:8081)
---
## Architecture and conventions
Strict TypeScript, Vue 3 Composition API, and a single typed API boundary.
Key axioms
- OpenAPI (generated `src/api/types.ts`) is the single source of truth for shapes.
- SDK (`src/api/sdk.ts`) is the only data access surface; UI uses domain types from `src/domain/types.ts`.
- Domain normalization is minimal in `src/domain/decoders.ts` (e.g., date strings → `Date`).
- No casts (`as`, angle brackets) and no `any`/`unknown` in app code. Generated files are exempt.
- Arrays that are required in OpenAPI are non-nullable in domain types (e.g., `Meal.recipes`).
- Disallow runtime type checks in app code; acceptable exceptions: DOM event narrowing, error/env handling in the boundary.
Layout
- `src/api/` — Typed client and SDK boundary
- `src/domain/` — Domain types and decoders
- `src/composables/` — Reusable app logic (auth, meals, shopping, pagination, alert)
- `src/components/` — UI components and pages
- `src/router/` — Routes and helpers (`parseRouteId`, `parseQueryString`)
Testing and tooling
- Vitest + MSW under `tests/`
- ESLint (type-aware) + Prettier + Volar
---
## Development tips
- Prefer composables for shared logic; keep components thin.
- Use computed for derived values; avoid mutating props directly.
- Use discriminated unions for UI-only shapes when helpful (e.g., shopping `Group`).
- Add/adjust tests when changing behavior.
---
## Troubleshooting
- API errors: verify `VUE_APP_API_BASE` is set and reachable.
- Type/IDE help: ensure Volar is enabled and ESLint is not conflicting with Prettier.
- Build issues: this project uses Vue CLI 5. If migrating to Vite, update scripts and configs accordingly.
---
## Type checking and codegen
- Type check (TS strict + vue-tsc):
```bash
npm run typecheck
```
- Generate API types (consumed by SDK):
```bash
npm run codegen
```
Environment
- VUE_APP_API_BASE (Vue CLI) or VITE_API_BASE_URL (Vite) for API base URL
Testing
- Unit tests use MSW; the client defaults to a localhost base in tests for easy mocking