we-superapp / apps /api /src /modules /README.md
nenbuj
Initial deploy: «МЫ» супер-апп
c562e21
|
Raw History Blame Contribute Delete
1.81 kB
# Модули Кодекса
Сюда Кодекс кладёт файлы-плагины Fastify: `finance.js`, `tasks.js`, `social.js`, `calendar.js`.
Сервер (`src/server.js`) подхватывает их автоматически — все `*.js` отсюда.
## Шаблон модуля
```js
// src/modules/finance.js
import crypto from 'node:crypto';
import { db } from '../core/db.js';
import { bus } from '../core/bus.js';
import { requireMember } from '../core/guards.js';
export default async function financeRoutes(fastify) {
fastify.get('/spaces/:id/transactions', async (request) => {
await requireMember(request, request.params.id);
const transactions = db
.prepare('SELECT * FROM transactions WHERE space_id = ? ORDER BY created_at DESC')
.all(request.params.id);
return { transactions };
});
fastify.post('/spaces/:id/transactions', async (request, reply) => {
await requireMember(request, request.params.id);
// ... валидация по CONTRACT.md ...
const tx = { /* ... */ };
// db.prepare(...).run(...)
bus.emit(request.params.id, { type: 'tx.created', space_id: request.params.id, payload: tx });
return reply.code(201).send({ transaction: tx });
});
}
```
Доступно из ядра:
- `db` — better-sqlite3 (см. `core/db.js`)
- `bus` — реалтайм-шина: `bus.emit(spaceId, { type, space_id, payload })`
- `requireMember(request, spaceId)` — бросает 403/404 (ядро ловит и форматирует ошибку)
Не трогай `core/`, `server.js`. Ошибки из `requireMember` ядро обрабатывает само
(глобальный errorHandler), поэтому можно просто `await requireMember(...)` без try/catch.