42 lines
1.6 KiB
JavaScript
42 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* src/api/index.js — REST API v1.
|
|
*
|
|
* Монтируется в server.js ДО общего auth.middleware:
|
|
* app.use('/api/v1', createApiRouter({ auth, q }))
|
|
*
|
|
* Аутентификация: только Bearer JWT (без сессий, без CSRF).
|
|
* Ответы: JSON везде.
|
|
* Переиспользует: src/queries.js, src/auth.js (middleware для валидации токена).
|
|
*
|
|
* Эндпоинты:
|
|
* GET /api/v1/entries — список записей компании
|
|
* POST /api/v1/entries — создать запись
|
|
* PATCH /api/v1/entries/:id — обновить запись
|
|
* DELETE /api/v1/entries/:id — удалить запись
|
|
* GET /api/v1/companies — все компании (admin)
|
|
* PATCH /api/v1/companies/:id/limit — установить лимит (admin)
|
|
*/
|
|
|
|
const express = require('express');
|
|
const { requireBearer } = require('./middleware/bearerAuth');
|
|
const { createEntriesRouter } = require('./routes/entries');
|
|
const { createAdminRouter } = require('./routes/admin');
|
|
|
|
function createApiRouter({ auth, q }) {
|
|
const router = express.Router();
|
|
|
|
// Все /api/v1/* требуют Bearer — 401 JSON если нет токена
|
|
router.use(requireBearer);
|
|
// Валидация токена — Bearer-only (игнорирует сессию, всегда проверяет JWT)
|
|
router.use(auth.bearerMiddleware);
|
|
|
|
router.use('/entries', createEntriesRouter({ q }));
|
|
router.use('/', createAdminRouter({ q }));
|
|
|
|
return router;
|
|
}
|
|
|
|
module.exports = { createApiRouter };
|