# Index: Post-order (aftersales, reviews) Domain design: `docs/domains/aftersales-reviews.md`. Specs: `openspec/specs/aftersale/`, `reviews/`. ## Backend (`apps/api`) | File | Holds | |---|---| | `src/modules/aftersale/service.rs` | state machine, refund completion (ledger-backed), arbitration, messages | | `src/modules/aftersale/handlers.rs` | `/aftersales*`, `/shop/aftersales*`, `/admin/aftersales*` | | `src/modules/review/service.rs` | create/reply/moderate, listing, rating summary, reviewable lines | | `src/modules/review/handlers.rs` | `/products/{id}/reviews*`, `/me/reviewable`, `/reviews`, shop/admin routes | | `migrations/0016_aftersales.sql` | aftersales + messages, `orders.refund_total_minor` | | `migrations/0018_product_reviews.sql` | product_reviews | | `tests/aftersales.rs`, `tests/reviews.rs` | integration coverage | ## Shared contract `types.ts`: `Aftersale*`, `Review*`, `ReviewableItem`. `api.ts`: customer aftersale/review methods, `shop.*` processing, `admin.*` arbitration/moderation. ## Frontends - Mall: `pages/user/aftersales/{index,[id],apply}.vue`, `pages/user/reviews.vue`, `pages/user/orders/[id].vue` (apply entry), `pages/goods/[id].vue` (reviews tab); mock fixtures in `mock/api.ts` (persisted `v6` state) - Shop-admin: `pages/aftersales/{index,[id]}.vue`, `pages/reviews.vue` - Admin: `pages/aftersales.vue`, `pages/reviews.vue`