Spaces:
Paused
Paused
|
Download apps/api/src/modules/README.md from nenbuj/we-superapp: direct link, hf CLI and curl.
- Browser
- Download file 1.81 kB
-
https://huggingface.co/spaces/nenbuj/we-superapp/resolve/main/apps/api/src/modules/README.md
- Command line
-
hf download hf://spaces/nenbuj/we-superapp/apps/api/src/modules/README.md
-
curl -L -o README.md https://huggingface.co/spaces/nenbuj/we-superapp/resolve/main/apps/api/src/modules/README.md
1.81 kB
Модули Кодекса
Сюда Кодекс кладёт файлы-плагины Fastify: finance.js, tasks.js, social.js, calendar.js.
Сервер (src/server.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.