-
Notifications
You must be signed in to change notification settings - Fork 55
/
project.js
130 lines (113 loc) 路 3.34 KB
/
project.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
'use strict';
const YAML = require('yamljs');
const filesize = require('filesize');
const getStream = require('get-stream');
const Controller = require('egg').Controller;
const swaggerConvert = require('../../util').swaggerConvert;
class ProjectController extends Controller {
async showAll() {
const ctx = this.ctx;
const res = [];
const _res = await ctx.service.project.queryAllProject();
for (const _item of _res) {
const item = _item.get({ plain: true });
res.push(item);
}
ctx.success(res);
}
async statistics() {
const ctx = this.ctx;
const res = [];
const _res = await ctx.service.project.queryAllProject();
for (const _item of _res) {
const item = _item.get({ plain: true });
const interfaceList = await ctx.service.interface.queryInterfaceByProjectUniqId({
projectUniqId: item.uniqId,
});
const allSceneList = await Promise.all(interfaceList.map(({ uniqId: interfaceUniqId }) => {
return ctx.service.scene.querySceneByInterfaceUniqId({ interfaceUniqId });
}));
let bufSize = 0;
for (const sceneList of allSceneList) {
for (const scene of sceneList) {
const buf = new Buffer.from(JSON.stringify(scene.data));
bufSize += buf.length;
}
}
item.capacity = {
count: interfaceList.length,
size: filesize(bufSize),
};
res.push(item);
}
ctx.success(res);
}
async show() {
const ctx = this.ctx;
const { uniqId } = ctx.params;
const res = await ctx.service.project.queryProjectByUniqId({ uniqId });
ctx.success(res);
}
async create() {
const ctx = this.ctx;
const {
projectName,
description,
globalProxy,
} = ctx.request.body;
ctx.assertParam({ projectName, description });
const res = await ctx.service.project.createProject({
projectName,
description,
globalProxy,
});
ctx.success(res);
}
async update() {
const ctx = this.ctx;
const { uniqId } = ctx.params;
const payload = {};
[ 'description', 'projectName', 'globalProxy' ].forEach(i => {
if (ctx.request.body[i]) payload[i] = ctx.request.body[i];
});
const res = await ctx.service.project.updateProject({
uniqId,
payload,
});
ctx.success(res);
}
async delete() {
const ctx = this.ctx;
const { uniqId } = ctx.params;
const res = await ctx.service.project.deleteProjectByUniqId({ uniqId });
ctx.success(res);
}
async download() {
const ctx = this.ctx;
const { uniqId } = ctx.params;
const res = await ctx.service.transfer.downloadProject({ uniqId });
ctx.body = JSON.stringify(res.dataGroupList, null, 2);
ctx.attachment(res.fileName);
}
async upload() {
const ctx = this.ctx;
const stream = await this.ctx.getFileStream();
const projectUniqId = stream.fieldname;
let projectData = null;
const projectString = await getStream(stream);
if (/.yaml$/.test(stream.filename)) {
projectData = YAML.parse(projectString);
} else {
projectData = JSON.parse(projectString);
}
if (projectData.swagger) {
projectData = swaggerConvert(projectData);
}
const res = await ctx.service.transfer.uploadProject({
projectData,
projectUniqId,
});
ctx.body = res;
}
}
module.exports = ProjectController;