70 lines
2.0 KiB
Markdown
70 lines
2.0 KiB
Markdown
---
|
|
name: dyolink-add-feature
|
|
description: Adds a new Dyolink feature end-to-end (permission, backend module, frontend tab, i18n). Use when the user asks for a new tab, module, screen, or CRUD feature in Dyolink.
|
|
---
|
|
|
|
# Add a Dyolink feature
|
|
|
|
Follow this checklist. Adapt steps if the feature is read-only or org-type-specific.
|
|
|
|
## Checklist
|
|
|
|
```
|
|
- [ ] 1. Permissions & org type
|
|
- [ ] 2. Backend module
|
|
- [ ] 3. Frontend UI + thin page
|
|
- [ ] 4. i18n (en, fa, nl)
|
|
- [ ] 5. Verify build / tsc
|
|
```
|
|
|
|
## 1. Permissions & org type
|
|
|
|
- Add `TAB_{FEATURE}_READ` and `TAB_{FEATURE}_EDIT` to:
|
|
- `backend/src/common/permissions.ts` (`ALL_TAB_PERMISSIONS`, `EDIT_TO_READ`)
|
|
- `backend/prisma/seed.ts` (owner defaults per org type)
|
|
- `backend/src/modules/auth/auth.service.ts` if listed there
|
|
- Frontend: `components/staff/staff-permission-form.ts`, `components/shared/permissions.ts` route prefix if needed.
|
|
- Sidebar: `components/ui/shared/Sidebar.tsx` with `orgTypes` filter.
|
|
|
|
## 2. Backend module
|
|
|
|
```
|
|
backend/src/modules/{feature}/
|
|
{feature}.module.ts
|
|
{feature}.controller.ts
|
|
{feature}.service.ts
|
|
dto/
|
|
```
|
|
|
|
- Apply guards (`JwtAuthGuard`, org-type guard as needed).
|
|
- Service-level permission checks with `hasEffectivePermission`.
|
|
- DTOs use `ErrorCode` validation messages.
|
|
- Register in `app.module.ts`.
|
|
|
|
## 3. Frontend
|
|
|
|
- API client: `frontend/src/lib/api/{feature}.ts`
|
|
- Types: `frontend/src/types/{feature}.ts`
|
|
- UI: `frontend/src/components/ui/{feature}/`
|
|
- Non-UI helpers: `frontend/src/components/{feature}/`
|
|
- Page: thin `app/[locale]/(dashboard)/{feature}/page.tsx` → `{Feature}Page.tsx`
|
|
|
|
## 4. i18n
|
|
|
|
Add keys to `en.json`, `fa.json`, `nl.json` under a feature namespace (e.g. `"patients": { ... }`).
|
|
|
|
## 5. Verify
|
|
|
|
```bash
|
|
cd backend && npm run build
|
|
cd frontend && npx tsc --noEmit
|
|
```
|
|
|
|
## Reference implementations
|
|
|
|
| Pattern | Look at |
|
|
|---------|---------|
|
|
| Thin page + workspace | `treatment/page.tsx`, `TreatmentWorkspace.tsx` |
|
|
| CRUD + permissions | `modules/patients/` |
|
|
| Lab feature | `modules/cases/`, `ui/lab/` |
|