directus

Форк
0
86 строк · 2.1 Кб
1
import { format } from 'date-fns';
2
import { Router } from 'express';
3
import { RouteNotFoundError } from '@directus/errors';
4
import { respond } from '../middleware/respond.js';
5
import { ServerService } from '../services/server.js';
6
import { SpecificationService } from '../services/specifications.js';
7
import asyncHandler from '../utils/async-handler.js';
8

9
const router = Router();
10

11
router.get(
12
	'/specs/oas',
13
	asyncHandler(async (req, res, next) => {
14
		const service = new SpecificationService({
15
			accountability: req.accountability,
16
			schema: req.schema,
17
		});
18

19
		res.locals['payload'] = await service.oas.generate(req.headers.host);
20
		return next();
21
	}),
22
	respond,
23
);
24

25
router.get(
26
	'/specs/graphql/:scope?',
27
	asyncHandler(async (req, res) => {
28
		const service = new SpecificationService({
29
			accountability: req.accountability,
30
			schema: req.schema,
31
		});
32

33
		const serverService = new ServerService({
34
			accountability: req.accountability,
35
			schema: req.schema,
36
		});
37

38
		const scope = req.params['scope'] || 'items';
39

40
		if (['items', 'system'].includes(scope) === false) throw new RouteNotFoundError({ path: req.path });
41

42
		const info = await serverService.serverInfo();
43
		const result = await service.graphql.generate(scope as 'items' | 'system');
44
		const filename = info['project'].project_name + '_' + format(new Date(), 'yyyy-MM-dd') + '.graphql';
45

46
		res.attachment(filename);
47
		res.send(result);
48
	}),
49
);
50

51
router.get(
52
	'/info',
53
	asyncHandler(async (req, res, next) => {
54
		const service = new ServerService({
55
			accountability: req.accountability,
56
			schema: req.schema,
57
		});
58

59
		const data = await service.serverInfo();
60
		res.locals['payload'] = { data };
61
		return next();
62
	}),
63
	respond,
64
);
65

66
router.get(
67
	'/health',
68
	asyncHandler(async (req, res, next) => {
69
		const service = new ServerService({
70
			accountability: req.accountability,
71
			schema: req.schema,
72
		});
73

74
		const data = await service.health();
75

76
		res.setHeader('Content-Type', 'application/health+json');
77

78
		if (data['status'] === 'error') res.status(503);
79
		res.locals['payload'] = data;
80
		res.locals['cache'] = false;
81
		return next();
82
	}),
83
	respond,
84
);
85

86
export default router;
87

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.