Skip to content

Commit dbdf92c

Browse files
authored
Merge pull request #725 from samurotko/Junction-Platform-2.0
BUGFIX: fixed creating team bug on backend
2 parents 924f25e + 711e09e commit dbdf92c

7 files changed

Lines changed: 204 additions & 66 deletions

File tree

backend/modules/team/controller.js

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ controller.createNewTeam = (data, eventId, userId) => {
3232
.getTeamsForEvent(eventId)
3333
.then(teams => {
3434
console.log('Step 1')
35-
if (userHasTeam(teams, userId)) {
35+
if (userHasTeam(teams.data, userId)) {
3636
throw new ForbiddenError('You are already in a team')
3737
}
38-
return removeCandidateApplications(teams, userId)
38+
return removeCandidateApplications(teams.data, userId)
3939
})
4040
.then(teamsToSave => {
4141
console.log('Step 2')
@@ -138,7 +138,6 @@ controller.editTeam = (eventId, userId, edits) => {
138138
const userHasTeam = (teams, userId) => {
139139
let hasTeam = false
140140
const teamMembers = teams.map(team => team.members.concat(team.owner))
141-
console.log('Team members: ', teamMembers)
142141
teamMembers.map(team => {
143142
if (_.includes(team, userId)) {
144143
hasTeam = true
@@ -149,9 +148,7 @@ const userHasTeam = (teams, userId) => {
149148
}
150149
const removeCandidateApplications = (teams, userId) => {
151150
const teamsToSave = []
152-
console.log('Teams to remove candidate: ', teams)
153151
teams.map(team => {
154-
console.log('Team candidates: ', team.candidates)
155152
if (
156153
_.includes(
157154
team.candidates.map(candidate => candidate.userId),
@@ -164,7 +161,6 @@ const removeCandidateApplications = (teams, userId) => {
164161
teamsToSave.push(team)
165162
}
166163
})
167-
console.log('Teams to save after removing candidate: ', teamsToSave)
168164
return teamsToSave
169165
}
170166
controller.joinTeam = (eventId, userId, code) => {
@@ -178,10 +174,10 @@ controller.joinTeam = (eventId, userId, code) => {
178174
.getTeamsForEvent(eventId)
179175
.then(teams => {
180176
console.log('Step 1')
181-
if (userHasTeam(teams, userId)) {
177+
if (userHasTeam(teams.data, userId)) {
182178
throw new ForbiddenError('You are already in a team')
183179
}
184-
return teams
180+
return teams.data
185181
})
186182
.then(teams => {
187183
console.log('Step 2')
@@ -219,7 +215,7 @@ controller.joinTeam = (eventId, userId, code) => {
219215
})
220216
})
221217
}
222-
218+
//TODO: optimize this process, slow with over 200 teams
223219
controller.acceptCandidateToTeam = (eventId, userId, code, candidateId) => {
224220
let teamToReturn
225221
return controller
@@ -231,19 +227,19 @@ controller.acceptCandidateToTeam = (eventId, userId, code, candidateId) => {
231227
)
232228
}
233229
teamToReturn = team
230+
234231
return controller.getTeamsForEvent(eventId)
235232
})
236233
.then(teams => {
237234
console.log('Step 1')
238-
console.log('Teams: ', teams)
239-
if (userHasTeam(teams, candidateId)) {
235+
if (userHasTeam(teams.data, candidateId)) {
240236
teamToReturn.candidates = teamToReturn.candidates.filter(
241237
candidate => candidate.userId !== candidateId,
242238
)
243239
teamToReturn.save()
244240
throw new ForbiddenError('Candidate is already in a team')
245241
}
246-
return teams
242+
return teams.data
247243
})
248244
.then(teams => {
249245
console.log('Step 2')
@@ -485,21 +481,40 @@ controller.attachUserApplicant = (teams, userId) => {
485481
})
486482
}
487483

488-
controller.getTeamsForEvent = async (eventId, userId, page, size) => {
484+
controller.getTeamsForEvent = async (eventId, userId, page, size, filter) => {
489485
if (page && size) {
490-
const found = await Team.find({
491-
event: eventId,
492-
})
493-
.sort({ createdAt: 'desc' })
494-
.skip(parseInt(size * page))
495-
.limit(parseInt(size))
496-
.then(teams => {
497-
if (userId) {
498-
return controller.attachUserApplicant(teams, userId)
499-
}
486+
console.log("filter", filter)
487+
if (filter) {
488+
const found = await Team.find({
489+
event: eventId,
490+
challenge: filter,
500491
})
501-
const count = await Team.find({ event: eventId }).countDocuments()
502-
return { data: found, count: count }
492+
.sort({ createdAt: 'desc' })
493+
.skip(parseInt(size * page))
494+
.limit(parseInt(size))
495+
.then(teams => {
496+
if (userId) {
497+
return controller.attachUserApplicant(teams, userId)
498+
}
499+
})
500+
const count = await Team.find({ event: eventId, challenge: filter }).countDocuments()
501+
console.log("with filter", { data: found, count: count })
502+
return { data: found, count: count }
503+
} else {
504+
const found = await Team.find({
505+
event: eventId,
506+
})
507+
.sort({ createdAt: 'desc' })
508+
.skip(parseInt(size * page))
509+
.limit(parseInt(size))
510+
.then(teams => {
511+
if (userId) {
512+
return controller.attachUserApplicant(teams, userId)
513+
}
514+
})
515+
const count = await Team.find({ event: eventId }).countDocuments()
516+
return { data: found, count: count }
517+
}
503518
} else {
504519
const found = await Team.find({
505520
event: eventId,
@@ -512,6 +527,7 @@ controller.getTeamsForEvent = async (eventId, userId, page, size) => {
512527
return teams
513528
})
514529
const count = await Team.find({ event: eventId }).countDocuments()
530+
console.log("getting all teams", count)
515531
return { data: found, count: count }
516532
}
517533
// TODO make the code not visible to participants on Redux store

backend/modules/team/routes.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,23 @@ const getTeamRoles = asyncHandler(async (req, res) => {
144144
const getTeamsForEvent = asyncHandler(async (req, res) => {
145145
var teams
146146
if (req.query.page && req.query.size) {
147-
teams = await TeamController.getTeamsForEvent(
148-
req.event._id,
149-
req.user.sub,
150-
req.query.page,
151-
req.query.size
152-
)
147+
if (req.query.filter) {
148+
console.log("req with filter", req.query)
149+
teams = await TeamController.getTeamsForEvent(
150+
req.event._id,
151+
req.user.sub,
152+
req.query.page,
153+
req.query.size,
154+
req.query.filter
155+
)
156+
} else {
157+
teams = await TeamController.getTeamsForEvent(
158+
req.event._id,
159+
req.user.sub,
160+
req.query.page,
161+
req.query.size
162+
)
163+
}
153164
} else {
154165
teams = await TeamController.getTeamsForEvent(
155166
req.event._id,

frontend/src/pages/_dashboard/renderDashboard/organiser/edit/other/index.js

Lines changed: 53 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import MetaTagsForm from './MetaTagsForm'
99

1010
import CertificateForm from './CertificateForm'
1111
import PageScriptsForm from './PageScriptsForm'
12+
import FileInput from '../submission/components/inputs/FileInput'
13+
1214

1315
export default () => {
1416
return (
@@ -30,6 +32,57 @@ export default () => {
3032
)}
3133
/>
3234
</Grid>
35+
<Grid item xs={12}>
36+
<Field
37+
name="map"
38+
render={({ field, form }) => {
39+
console.log(field)
40+
return (
41+
<FormControl
42+
label="Venue Map"
43+
hint="Add a venue map that will be shown on participant and partner dashboards as a .jpg."
44+
error={form.errors[field.name]}
45+
touched={form.touched[field.name]}
46+
>
47+
<FileInput
48+
value={field.value}
49+
handleChange={value =>
50+
form.setFieldValue(field.name, value)
51+
}
52+
config={{
53+
settings:
54+
{
55+
allowedTypes: ['jpg'],
56+
},
57+
}}
58+
/>
59+
</FormControl>
60+
)
61+
}}
62+
/>
63+
</Grid>
64+
<Grid item xs={12}>
65+
<Field
66+
name="certificate"
67+
render={({ field, form }) => {
68+
console.log(field)
69+
return (
70+
<FormControl
71+
label="Certificate"
72+
hint="Add a certificate that will be given to the participants. max file size: 10mb"
73+
error={form.errors[field.name]}
74+
touched={form.touched[field.name]}
75+
>
76+
<CertificateForm
77+
value={field.value}
78+
fieldName={field.name}
79+
setFieldValue={form.setFieldValue}
80+
/>
81+
</FormControl>
82+
)
83+
}}
84+
/>
85+
</Grid>
3386
<Grid item xs={12}>
3487
<FastField
3588
name="webhooks"
@@ -81,28 +134,6 @@ export default () => {
81134
)}
82135
/>
83136
</Grid>
84-
<Grid item xs={12}>
85-
<Field
86-
name="certificate"
87-
render={({ field, form }) => {
88-
console.log(field)
89-
return (
90-
<FormControl
91-
label="Certificate"
92-
hint="Add a certificate that will be given to the participants. max file size: 10mb"
93-
error={form.errors[field.name]}
94-
touched={form.touched[field.name]}
95-
>
96-
<CertificateForm
97-
value={field.value}
98-
fieldName={field.name}
99-
setFieldValue={form.setFieldValue}
100-
/>
101-
</FormControl>
102-
)
103-
}}
104-
/>
105-
</Grid>
106137
</Grid>
107138
)
108139
}

frontend/src/pages/_dashboard/renderDashboard/participant/team/teams/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@ export default () => {
6060
)
6161

6262
useEffect(() => {
63-
dispatch(DashboardActions.updateTeams(slug, currentPage, 25))
63+
dispatch(DashboardActions.updateTeams(slug, currentPage, 25, challengeFilter))
6464
}, [currentPage, applying, selected, selectedTeam, joinByCode, challengeFilter])
6565

6666
let teamCards = []
6767
if (challengeFilter !== 'All challenges') {
6868
teamCards = teams?.filter(team => team.challenge === challengeFilter)
6969
} else {
7070
teamCards = teams ? teams : []
71-
71+
console.log("teamCards", teamCards)
7272
}
7373

7474
const handlePrevPage = useCallback(() => {

frontend/src/redux/dashboard/actions.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -181,17 +181,26 @@ export const createPartnerRegistration =
181181
return registration
182182
}
183183

184-
export const updateTeams = (slug, page, size) => async (dispatch, getState) => {
184+
export const updateTeams = (slug, page, size, filter) => async (dispatch, getState) => {
185185
const idToken = AuthSelectors.getIdToken(getState())
186186
if (!slug) return
187-
188-
dispatch({
189-
type: ActionTypes.UPDATE_TEAMS,
190-
promise: TeamsService.getAllTeamsForEventParticipant(idToken, slug, page, size),
191-
meta: {
192-
onFailure: e => console.log('Error updating teams', e),
193-
},
194-
})
187+
if (filter === 'All challenges') {
188+
dispatch({
189+
type: ActionTypes.UPDATE_TEAMS,
190+
promise: TeamsService.getAllTeamsForEventParticipant(idToken, slug, page, size),
191+
meta: {
192+
onFailure: e => console.log('Error updating teams', e),
193+
},
194+
})
195+
} else {
196+
dispatch({
197+
type: ActionTypes.UPDATE_TEAMS,
198+
promise: TeamsService.getAllTeamsForEventParticipant(idToken, slug, page, size, filter),
199+
meta: {
200+
onFailure: e => console.log('Error updating teams', e),
201+
},
202+
})
203+
}
195204
}
196205

197206
export const updateSelectedTeam =

frontend/src/services/teams.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,13 @@ TeamsService.getTeamForEvent = (idToken, eventSlug, populate = false) => {
121121
)
122122
}
123123

124-
TeamsService.getAllTeamsForEventParticipant = (idToken, eventSlug, page, page_size) => {
125-
return _axios.get(`/teams/${eventSlug}/teams?page=${page}&size=${page_size}`, config(idToken))
124+
TeamsService.getAllTeamsForEventParticipant = (idToken, eventSlug, page, page_size, filter) => {
125+
if (filter) {
126+
return _axios.get(`/teams/${eventSlug}/teams?page=${page}&size=${page_size}&filter=${filter}`, config(idToken))
127+
} else {
128+
return _axios.get(`/teams/${eventSlug}/teams?page=${page}&size=${page_size}`, config(idToken))
129+
130+
}
126131
}
127132

128133
TeamsService.getTeamWithMetaForEventParticipant = (

0 commit comments

Comments
 (0)