-
Notifications
You must be signed in to change notification settings - Fork 73
/
ConferenceResolver.ts
159 lines (133 loc) · 4.31 KB
/
ConferenceResolver.ts
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
import kebabCase from "just-kebab-case";
import * as path from "path";
import {
Arg,
Ctx,
FieldResolver,
ID,
Query,
Resolver,
Root,
} from "type-graphql";
import conferences from "../../conferences";
import { Conference, getConference } from "../Conference";
import { Contact, getSessionSpeakers } from "../Contact";
import { IContext } from "../Context";
import { resolveSessions } from "../Schedule";
import { Series } from "../Series";
import { Session, SessionType } from "../Session";
import series from "./conferenceSeries";
import loadAttendees from "./load-attendees";
@Resolver(_ => Conference)
class ConferenceResolver {
@Query(_ => Conference)
public conference(@Arg("id", _ => ID) id: string) {
return getConference(id);
}
@Query(_ => [Conference])
public conferences() {
return Object.values(conferences);
}
@Query(_ => [Conference], { deprecationReason: "Use `conferences` instead" })
public allConferences() {
return Object.values(conferences);
}
@FieldResolver(_ => Series)
public series(@Root() conference: Conference) {
const id = conference.id;
for (const seriesId of Object.keys(series)) {
const oneSeries = series[seriesId];
if (oneSeries.conferences.indexOf(id) !== -1) {
return oneSeries;
}
}
return;
}
@FieldResolver(_ => [Contact])
public allSpeakers(@Root() conference: Conference) {
const talks = resolveSessions(conference.schedules, [
SessionType.TALK,
SessionType.KEYNOTE,
SessionType.LIGHTNING_TALK,
]);
return getSessionSpeakers(conference, talks);
}
@FieldResolver(_ => [Contact])
public speakers(@Root() conference: Conference) {
const talks = resolveSessions(conference.schedules, [SessionType.TALK]);
return getSessionSpeakers(conference, talks);
}
@FieldResolver(_ => [Contact])
public async attendees(@Root() conference: Conference, @Ctx() ctx: IContext) {
const speakers = getSessionSpeakers(
conference,
resolveSessions(conference.schedules, [
SessionType.KEYNOTE,
SessionType.LIGHTNING_TALK,
SessionType.TALK,
SessionType.WORKSHOP,
])
);
return conference.organizers.concat(
speakers,
await loadAttendees(
conference,
`${path.join(
ctx.projectRoot,
"attendees",
kebabCase(conference.name)
)}.csv`
)
);
}
@FieldResolver(_ => [Session], {
deprecationReason:
"Use `keynotes`,s `fullTalks` and `lightningTalks` instead",
})
public talks(@Root() conference: Conference) {
return resolveSessions(conference.schedules, [
SessionType.LIGHTNING_TALK,
SessionType.TALK,
SessionType.KEYNOTE,
]);
}
@FieldResolver(_ => [Session])
public keynotes(@Root() conference: Conference) {
return resolveSessions(conference.schedules, [SessionType.KEYNOTE]);
}
@FieldResolver(_ => [Session])
public keynoteSpeakers(@Root() conference: Conference) {
const talks = resolveSessions(conference.schedules, [SessionType.KEYNOTE]);
return getSessionSpeakers(conference, talks);
}
@FieldResolver(_ => [Session])
public fullTalks(@Root() conference: Conference) {
return resolveSessions(conference.schedules, [SessionType.TALK]);
}
@FieldResolver(_ => [Session])
public fullTalkSpeakers(@Root() conference: Conference) {
const talks = resolveSessions(conference.schedules, [SessionType.TALK]);
return getSessionSpeakers(conference, talks);
}
@FieldResolver(_ => [Session])
public lightningTalks(@Root() conference: Conference) {
return resolveSessions(conference.schedules, [SessionType.LIGHTNING_TALK]);
}
@FieldResolver(_ => [Session])
public lightningTalkSpeakers(@Root() conference: Conference) {
const talks = resolveSessions(conference.schedules, [
SessionType.LIGHTNING_TALK,
]);
return getSessionSpeakers(conference, talks);
}
@FieldResolver(_ => [Session])
public workshops(@Root() conference: Conference) {
return resolveSessions(conference.schedules, [SessionType.WORKSHOP]);
}
@FieldResolver(_ => [Session])
public workshopInstructors(@Root() conference: Conference) {
const talks = resolveSessions(conference.schedules, [SessionType.WORKSHOP]);
return getSessionSpeakers(conference, talks);
}
}
export default ConferenceResolver;