Committed by
GitHub
Merge pull request #28 from FacerAin/feature/rest_api
Feature/rest api
Showing
3 changed files
with
84 additions
and
35 deletions
... | @@ -132,10 +132,10 @@ exports.list = async (ctx) => { | ... | @@ -132,10 +132,10 @@ exports.list = async (ctx) => { |
132 | const status = ctx.params.status; | 132 | const status = ctx.params.status; |
133 | if (status !== "all") { | 133 | if (status !== "all") { |
134 | const challenges = await Challenge.find({ status: status }); | 134 | const challenges = await Challenge.find({ status: status }); |
135 | - ctx.body = challenges.serialize(); | 135 | + ctx.body = challenges; |
136 | } else { | 136 | } else { |
137 | const challenges = await Challenge.find({}); | 137 | const challenges = await Challenge.find({}); |
138 | - ctx.body = challenges.serialize(); | 138 | + ctx.body = challenges; |
139 | } | 139 | } |
140 | } catch (e) { | 140 | } catch (e) { |
141 | ctx.throw(500, e); | 141 | ctx.throw(500, e); | ... | ... |
1 | +const Participation = require("../../models/participation"); | ||
2 | +const Session = require("../../models/session"); | ||
3 | +const Group = require("../../models/group"); | ||
4 | +const User = require("../../models/user"); | ||
5 | +const mongoose = require("mongoose"); | ||
6 | + | ||
7 | +const {ObjectId} = mongoose.Types; | ||
8 | + | ||
1 | /* POST /api/session/createproblem/:how | 9 | /* POST /api/session/createproblem/:how |
2 | { | 10 | { |
3 | - problemList:[Number] | 11 | + sessionId: ObjectId, |
12 | + groupId: ObjectId, | ||
13 | + problemList:[Number], | ||
4 | } | 14 | } |
5 | */ | 15 | */ |
6 | exports.createProblem = async (ctx)=>{ | 16 | exports.createProblem = async (ctx)=>{ |
7 | try{ | 17 | try{ |
18 | + let {sessionId,groupId,problemList} = ctx.request.body; | ||
19 | + if(typeof(sessionId)==='string'){ | ||
20 | + sessionId=new ObjectId(sessionId); | ||
21 | + } | ||
22 | + if(typeof(groupId)==='string'){ | ||
23 | + groupId=new ObjectId(groupId); | ||
24 | + } | ||
25 | + if(typeof(problemList)==='string'){ | ||
26 | + problemList=JSON.parse(problemList); | ||
27 | + } | ||
28 | + const participation = await Participation.findOne({sessionId:sessionId,groupId:groupId}); | ||
29 | + const group = await Group.findById(groupId); | ||
8 | const how=ctx.params.how; | 30 | const how=ctx.params.how; |
9 | if(how==='self'){ | 31 | if(how==='self'){ |
10 | - | 32 | + let check = true; |
33 | + for(let i=0;i<group.members.length;i++){ | ||
34 | + const user = await User.findById(group.members[i]); | ||
35 | + console.log(user); | ||
36 | + console.log(typeof(user.solvedBJ_date.solvedBJbyDATE)); | ||
37 | + let userProblemList = []; | ||
38 | + for(let key in user.solvedBJ_date.solvedBJbyDATE){ | ||
39 | + userProblemList.push(user.solvedBJ_date.solvedBJbyDATE[key]); | ||
40 | + } | ||
41 | + userProblemList=userProblemList.flat().map(elem=>elem.problem_number); | ||
42 | + for(let j=0;j<problemList.length;j++){ | ||
43 | + if(userProblemList.includes(problemList[j])){ | ||
44 | + check = false; | ||
45 | + break; | ||
46 | + } | ||
47 | + } | ||
48 | + } | ||
49 | + if(!check){ | ||
50 | + ctx.throw('그룹원이 이미 푼 문제는 등록할 수 없습니다.'); | ||
51 | + return; | ||
52 | + } | ||
53 | + else{ | ||
54 | + problemList.map(async problemNum=>await participation.addProblem({problemNum:problemNum,isSolved:false})); | ||
55 | + ctx.body=participation.serialize(); | ||
56 | + } | ||
11 | } | 57 | } |
12 | else if(how==='recommend'){ | 58 | else if(how==='recommend'){ |
13 | - | 59 | + //TODO |
14 | } | 60 | } |
15 | } | 61 | } |
16 | catch(e){ | 62 | catch(e){ | ... | ... |
... | @@ -2,49 +2,52 @@ const mongoose = require("mongoose"); | ... | @@ -2,49 +2,52 @@ const mongoose = require("mongoose"); |
2 | 2 | ||
3 | const { Schema } = mongoose; | 3 | const { Schema } = mongoose; |
4 | 4 | ||
5 | -const ChallengeSchema=new Schema({ | 5 | +const ChallengeSchema = new Schema( |
6 | - challengeName: {type: String, required: true}, | 6 | + { |
7 | - startDate: {type: Object, required: true}, | 7 | + challengeName: { type: String, required: true }, |
8 | - endDate: {type: Object, required: true}, | 8 | + startDate: { type: Object, required: true }, |
9 | - durationPerSession: {type: String, required: true}, // '1d' means one day per session, '2w' means 2 weeks per session, '3m' means 3 months per session. | 9 | + endDate: { type: Object, required: true }, |
10 | - goalPerSession: {type: Number, required:true}, // number of problems for one session | 10 | + durationPerSession: { type: String, required: true }, // '1d' means one day per session, '2w' means 2 weeks per session, '3m' means 3 months per session. |
11 | - status: { type: String } | 11 | + goalPerSession: { type: Number, required: true }, // number of problems for one session |
12 | -},{ | 12 | + status: { type: String }, |
13 | - collection: 'challenge' | 13 | + }, |
14 | -}); | 14 | + { |
15 | - | 15 | + collection: "challenge", |
16 | -ChallengeSchema.statics.findByChallengeName=function(challengeName){ | 16 | + } |
17 | - return this.findOne({challengeName:challengeName}); | 17 | +); |
18 | -} | 18 | + |
19 | - | 19 | +ChallengeSchema.statics.findByChallengeName = function (challengeName) { |
20 | -ChallengeSchema.methods.getChallengeName=function(){ | 20 | + return this.findOne({ challengeName: challengeName }); |
21 | +}; | ||
22 | + | ||
23 | +ChallengeSchema.methods.getChallengeName = function () { | ||
21 | return this.challengeName; | 24 | return this.challengeName; |
22 | -} | 25 | +}; |
23 | 26 | ||
24 | -ChallengeSchema.methods.getStartDate=function(){ | 27 | +ChallengeSchema.methods.getStartDate = function () { |
25 | return this.startDate; | 28 | return this.startDate; |
26 | -} | 29 | +}; |
27 | 30 | ||
28 | -ChallengeSchema.methods.getEndDate=function(){ | 31 | +ChallengeSchema.methods.getEndDate = function () { |
29 | return this.endDate; | 32 | return this.endDate; |
30 | -} | 33 | +}; |
31 | 34 | ||
32 | -ChallengeSchema.method.getDurationPerSession=function(){ | 35 | +ChallengeSchema.methods.getDurationPerSession = function () { |
33 | return this.durationPerSession; | 36 | return this.durationPerSession; |
34 | -} | 37 | +}; |
35 | 38 | ||
36 | -ChallengeSchema.methods.getGoalPerSession=function(){ | 39 | +ChallengeSchema.methods.getGoalPerSession = function () { |
37 | return this.goalPerSession; | 40 | return this.goalPerSession; |
38 | -} | 41 | +}; |
39 | 42 | ||
40 | -ChallengeSchema.methods.getStatus=function(){ | 43 | +ChallengeSchema.methods.getStatus = function () { |
41 | return this.status; | 44 | return this.status; |
42 | -} | 45 | +}; |
43 | 46 | ||
44 | -ChallengeSchema.methods.serialize=function(){ | 47 | +ChallengeSchema.methods.serialize = function () { |
45 | let challengeJSON = this.toJSON(); | 48 | let challengeJSON = this.toJSON(); |
46 | return challengeJSON; | 49 | return challengeJSON; |
47 | -} | 50 | +}; |
48 | 51 | ||
49 | -const Challenge = mongoose.model('Challenge', ChallengeSchema); | 52 | +const Challenge = mongoose.model("Challenge", ChallengeSchema); |
50 | module.exports = Challenge; | 53 | module.exports = Challenge; | ... | ... |
-
Please register or login to post a comment