|
| 1 | +const {isAuthenticated, isRole} = require("../tools/api.js"); |
| 2 | + |
1 | 3 | module.exports = function(app) { |
2 | 4 |
|
3 | 5 | const {db} = app.settings; |
4 | 6 |
|
5 | | - app.get("/api/codeBlocks", (req, res) => { |
6 | | - |
| 7 | + // Used by Island.jsx to get each codeblock by island |
| 8 | + app.get("/api/codeBlocks", isAuthenticated, (req, res) => { |
7 | 9 | db.codeblocks.findAll({where: {uid: req.user.id}}).then(u => res.json(u).end()); |
8 | | - |
9 | 10 | }); |
10 | 11 |
|
| 12 | + // Used by Home.jsx to get hand-picked featured blocks |
11 | 13 | app.get("/api/codeBlocks/featured", (req, res) => { |
12 | | - |
13 | 14 | const q = "SELECT codeblocks.id, codeblocks.snippetname, codeblocks.studentcontent, codeblocks.status, userprofiles.sharing, (select count(*) FROM likes where likes.likeid = codeblocks.id) AS likes, (select count(*) from reports where reports.status = 'new' AND reports.report_id = codeblocks.id AND reports.type = 'codeblock') as reports, codeblocks.previewblob, codeblocks.lid, codeblocks.uid, users.username FROM codeblocks, users, userprofiles WHERE userprofiles.uid = codeblocks.uid AND users.id = codeblocks.uid AND (codeblocks.id = 863 OR codeblocks.id = 834 OR codeblocks.id = 921 OR codeblocks.id = 30)"; |
14 | 15 | db.query(q, {type: db.QueryTypes.SELECT}).then(u => res.json(u).end()); |
15 | | - |
16 | | - }); |
17 | | - |
18 | | - app.get("/api/codeBlocks/bylid", (req, res) => { |
19 | | - |
20 | | - db.codeblocks.findAll({where: {uid: req.user.id, lid: req.query.lid}}).then(u => res.json(u).end()); |
21 | | - |
22 | | - }); |
23 | | - |
24 | | - app.get("/api/codeBlocks/byid", (req, res) => { |
25 | | - |
26 | | - db.codeblocks.findAll({where: {uid: req.user.id, id: req.query.id}}).then(u => res.json(u).end()); |
27 | | - |
28 | 16 | }); |
29 | 17 |
|
30 | | - app.get("/api/codeBlocks/byuser", (req, res) => { |
31 | | - |
| 18 | + // Used by UserCodeBlocks.jsx to get codeblock list for profile page |
| 19 | + app.get("/api/codeBlocks/byuser", isAuthenticated, (req, res) => { |
32 | 20 | const id = req.query.uid; |
33 | 21 | const q = "SELECT codeblocks.id, codeblocks.snippetname, codeblocks.studentcontent, codeblocks.status, userprofiles.sharing, (select count(*) FROM likes where likes.likeid = codeblocks.id) AS likes, (select count(*) from reports where reports.status = 'new' AND reports.report_id = codeblocks.id AND reports.type = 'codeblock') as reports, codeblocks.previewblob, codeblocks.lid, codeblocks.uid, users.username FROM codeblocks, users, userprofiles WHERE codeblocks.uid = userprofiles.uid AND users.id = codeblocks.uid AND users.id = '" + id + "'"; |
34 | 22 | db.query(q, {type: db.QueryTypes.SELECT}).then(u => res.json(u).end()); |
35 | | - |
36 | 23 | }); |
37 | 24 |
|
| 25 | + // Used by Share.jsx to publicly share code |
38 | 26 | app.get("/api/codeBlocks/byUsernameAndFilename", (req, res) => { |
39 | | - |
40 | 27 | const q = "select codeblocks.id, codeblocks.snippetname, codeblocks.studentcontent, codeblocks.status, userprofiles.sharing, (select count(*) from reports where reports.status = 'new' AND reports.report_id = codeblocks.id AND reports.type = 'codeblock') as reports, codeblocks.likes, codeblocks.previewblob, codeblocks.lid, codeblocks.uid from codeblocks, users, userprofiles where codeblocks.uid = users.id AND users.id = userprofiles.uid AND codeblocks.snippetname = '" + req.query.filename + "' AND users.username = '" + req.query.username + "'"; |
41 | 28 | db.query(q, {type: db.QueryTypes.SELECT}).then(u => res.json(u).end()); |
42 | | - |
43 | 29 | }); |
44 | 30 |
|
45 | | - // todo: maybe change these into a single "upsert" |
46 | | - |
47 | | - app.post("/api/codeBlocks/update", (req, res) => { |
| 31 | + // Used by Codeblock.jsx to save new Codeblocks |
| 32 | + app.post("/api/codeBlocks/new", isAuthenticated, (req, res) => { |
| 33 | + db.codeblocks.create({studentcontent: req.body.studentcontent, snippetname: req.body.name, uid: req.body.uid, lid: req.body.iid}) |
| 34 | + .then(u => res.json(u).end()); |
| 35 | + }); |
48 | 36 |
|
| 37 | + // Used by CodeBlock.jsx to update the CodeBlock Test |
| 38 | + app.post("/api/codeBlocks/update", isAuthenticated, (req, res) => { |
49 | 39 | db.codeblocks.update({studentcontent: req.body.studentcontent, snippetname: req.body.name}, {where: {uid: req.body.uid, lid: req.body.iid}}) |
50 | 40 | .then(u => res.json(u).end()); |
51 | | - |
52 | 41 | }); |
53 | 42 |
|
54 | | - app.post("/api/codeBlocks/setstatus", (req, res) => { |
| 43 | + // Used by ReportBox and ReportViewer to ban codeblocks, Admin Only |
| 44 | + app.post("/api/codeBlocks/setstatus", isRole(2), (req, res) => { |
55 | 45 | const {status, id} = req.body; |
56 | | - |
57 | | - /* |
58 | | - if (status === "banned") { |
59 | | - const studentcontent = ""; |
60 | | - db.codeblocks.update({status, studentcontent}, {where: {id}}).then(u => res.json(u).end()); |
61 | | - } |
62 | | - else { |
63 | | - db.codeblocks.update({status}, {where: {id}}).then(u => res.json(u).end()); |
64 | | - } |
65 | | - */ |
66 | | - |
67 | | - db.codeblocks.update({status}, {where: {id}}).then(u => res.json(u).end()); |
68 | | - |
69 | | - }); |
70 | | - |
71 | | - app.post("/api/codeBlocks/new", (req, res) => { |
72 | | - |
73 | | - db.codeblocks.create({studentcontent: req.body.studentcontent, snippetname: req.body.name, uid: req.body.uid, lid: req.body.iid}) |
74 | | - .then(u => res.json(u).end()); |
75 | | - |
| 46 | + db.codeblocks.update({status}, {where: {id}}).then(u => { |
| 47 | + db.reports.update({status}, {where: {type: "codeblock", report_id: id}}).then(() => res.json(u).end()); |
| 48 | + }); |
76 | 49 | }); |
77 | 50 |
|
78 | | - app.get("/api/codeBlocks/allbylid", (req, res) => { |
79 | | - |
| 51 | + // Used by Level.jsx to fetch ALL codeblocks for this level (so students can browse) |
| 52 | + app.get("/api/codeBlocks/allbylid", isAuthenticated, (req, res) => { |
80 | 53 | const q = "SELECT codeblocks.id, codeblocks.snippetname, codeblocks.studentcontent, codeblocks.status, userprofiles.sharing, (select count(*) FROM likes where likes.likeid = codeblocks.id) AS likes, (select count(*) from reports where reports.status = 'new' AND reports.report_id = codeblocks.id AND reports.type = 'codeblock') as reports, codeblocks.previewblob, codeblocks.lid, codeblocks.uid, users.username FROM codeblocks, users, userprofiles WHERE userprofiles.uid = codeblocks.uid AND users.id = codeblocks.uid AND codeblocks.lid = '" + req.query.lid + "'"; |
81 | 54 | db.query(q, {type: db.QueryTypes.SELECT}).then(u => res.json(u).end()); |
82 | | - |
83 | | - // db.codeblocks.findAll({where: {uid: {$not: req.user.id}, lid: req.query.lid}}).then(u => res.json(u).end()); |
84 | | - |
85 | 55 | }); |
86 | 56 |
|
87 | | - app.get("/api/codeBlocks/all", (req, res) => { |
88 | | - |
| 57 | + // Used by CodeBlockList.jsx to get ALL codeblocks (for the sidebar in Studio) |
| 58 | + app.get("/api/codeBlocks/all", isAuthenticated, (req, res) => { |
89 | 59 | const q = "SELECT codeblocks.id, codeblocks.snippetname, codeblocks.studentcontent, codeblocks.status, userprofiles.sharing, (select count(*) FROM likes where likes.likeid = codeblocks.id) AS likes, (select count(*) from reports where reports.status = 'new' AND reports.report_id = codeblocks.id AND reports.type = 'codeblock') as reports, codeblocks.previewblob, codeblocks.lid, codeblocks.uid, users.username FROM codeblocks, users, userprofiles WHERE userprofiles.uid = codeblocks.uid AND users.id = codeblocks.uid"; |
90 | 60 | db.query(q, {type: db.QueryTypes.SELECT}).then(u => res.json(u).end()); |
91 | | - |
92 | 61 | }); |
93 | 62 |
|
94 | | - app.get("/api/codeBlocks/allgeos", (req, res) => { |
95 | | - |
| 63 | + // Not currently used |
| 64 | + app.get("/api/codeBlocks/allgeos", isAuthenticated, (req, res) => { |
96 | 65 | const q = "SELECT * FROM geos WHERE sumlevel = 'MUNICIPALITY' AND substring(id, 1, 3) = '4mg' ORDER BY name"; |
97 | 66 | db.query(q, {type: db.QueryTypes.SELECT}).then(u => res.json(u).end()); |
98 | | - |
99 | 67 | }); |
100 | 68 |
|
101 | | - app.get("/api/codeBlocks/allschools", (req, res) => { |
102 | | - |
| 69 | + // Not currently used |
| 70 | + app.get("/api/codeBlocks/allschools", isAuthenticated, (req, res) => { |
103 | 71 | const q = "SELECT DISTINCT name FROM schools ORDER BY name"; |
104 | 72 | db.query(q, {type: db.QueryTypes.SELECT}).then(u => res.json(u).end()); |
105 | | - |
106 | 73 | }); |
107 | 74 |
|
108 | 75 | }; |
0 commit comments