forked from FreeCodeCamp-Chengdu/HOP-service
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQuestionnaire.ts
More file actions
105 lines (88 loc) · 2.84 KB
/
Questionnaire.ts
File metadata and controls
105 lines (88 loc) · 2.84 KB
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
import {
Authorized,
Body,
CurrentUser,
Get,
JsonController,
NotFoundError,
OnNull,
Param,
Put
} from 'routing-controllers';
import { ResponseSchema } from 'routing-controllers-openapi';
import { dataSource, Hackathon, Questionnaire, Standard, User } from '../model';
import { ActivityLogController } from './ActivityLog';
import { HackathonController } from './Hackathon';
const questionnaireStore = dataSource.getRepository(Questionnaire),
standardStore = dataSource.getRepository(Standard),
hackathonStore = dataSource.getRepository(Hackathon);
@JsonController('/hackathon/:name')
export class SurveyController {
@Get('/questionnaire')
@OnNull(404)
@ResponseSchema(Questionnaire)
getQuestionnaire(@Param('name') name: string) {
return questionnaireStore.findOneBy({ hackathon: { name } });
}
@Put('/questionnaire')
@Authorized()
@ResponseSchema(Questionnaire)
async updateQuestionnaire(
@CurrentUser() user: User,
@Param('name') name: string,
@Body() form: Questionnaire
) {
const hackathon = await hackathonStore.findOneBy({ name });
if (!hackathon) throw new NotFoundError();
await HackathonController.ensureAdmin(user.id, name);
const old = await this.getQuestionnaire(name);
const saved = await questionnaireStore.save({
...old,
...form,
hackathon,
...(old ? { updatedBy: user } : { createdBy: user })
});
if (old)
await ActivityLogController.logUpdate(
user,
'Questionnaire',
saved.id
);
else
await ActivityLogController.logCreate(
user,
'Questionnaire',
saved.id
);
return saved;
}
@Get('/standard')
@OnNull(404)
@ResponseSchema(Standard)
getStandard(@Param('name') name: string) {
return standardStore.findOneBy({ hackathon: { name } });
}
@Put('/standard')
@Authorized()
@ResponseSchema(Standard)
async updateStandard(
@CurrentUser() user: User,
@Param('name') name: string,
@Body() form: Standard
) {
const hackathon = await hackathonStore.findOneBy({ name });
if (!hackathon) throw new NotFoundError();
await HackathonController.ensureAdmin(user.id, name);
const old = await this.getStandard(name);
const saved = await standardStore.save({
...old,
...form,
hackathon,
...(old ? { updatedBy: user } : { createdBy: user })
});
if (old)
await ActivityLogController.logUpdate(user, 'Standard', saved.id);
else await ActivityLogController.logCreate(user, 'Standard', saved.id);
return saved;
}
}