Commit | Line | Data |
---|---|---|
89021f18 BA |
1 | var db = require("../utils/database"); |
2 | ||
3 | /* | |
4 | * Structure: | |
5 | * id: integer | |
6 | * added: datetime | |
7 | * uid: user id (int) | |
8 | * vid: variant id (int) | |
9 | * fen: varchar (optional) | |
10 | * instruction: text | |
11 | * solution: text | |
12 | */ | |
13 | ||
14 | const ProblemModel = | |
15 | { | |
16 | checkProblem: function(p) | |
17 | { | |
604b951e BA |
18 | if (!p.id.toString().match(/^[0-9]+$/)) |
19 | return "Wrong problem ID"; | |
89021f18 BA |
20 | if (!p.vid.toString().match(/^[0-9]+$/)) |
21 | return "Wrong variant ID"; | |
22 | if (!p.fen.match(/^[a-zA-Z0-9, /-]*$/)) | |
23 | return "Bad FEN string"; | |
24 | return ""; | |
25 | }, | |
26 | ||
27 | create: function(p, cb) | |
28 | { | |
29 | db.serialize(function() { | |
30 | const query = | |
31 | "INSERT INTO Problems " + | |
32 | "(added, uid, vid, fen, instruction, solution) " + | |
33 | "VALUES " + | |
604b951e BA |
34 | "(" + Date.now() + "," + p.uid + "," + p.vid + ",'" + p.fen + "',?,?)"; |
35 | db.run(query, [p.instruction,p.solution], function(err) { | |
89021f18 BA |
36 | return cb(err, {pid: this.lastID}); |
37 | }); | |
38 | }); | |
39 | }, | |
40 | ||
41 | getAll: function(cb) | |
42 | { | |
43 | db.serialize(function() { | |
44 | const query = | |
45 | "SELECT * " + | |
46 | "FROM Problems"; | |
47 | db.all(query, (err,problems) => { | |
48 | return cb(err, problems); | |
49 | }); | |
50 | }); | |
51 | }, | |
52 | ||
53 | getOne: function(id, cb) | |
54 | { | |
55 | db.serialize(function() { | |
56 | const query = | |
57 | "SELECT * " + | |
58 | "FROM Problems " + | |
59 | "WHERE id = " + id; | |
60 | db.get(query, (err,problem) => { | |
61 | return cb(err, problem); | |
62 | }); | |
63 | }); | |
64 | }, | |
65 | ||
604b951e | 66 | update: function(prob, cb) |
89021f18 BA |
67 | { |
68 | db.serialize(function() { | |
69 | let query = | |
70 | "UPDATE Problems " + | |
71 | "SET " + | |
72 | "vid = " + prob.vid + "," + | |
604b951e BA |
73 | "fen = '" + prob.fen + "'," + |
74 | "instruction = ?," + | |
75 | "solution = ? " + | |
76 | "WHERE id = " + prob.id; | |
77 | db.run(query, [prob.instruction,prob.solution], cb); | |
89021f18 BA |
78 | }); |
79 | }, | |
80 | ||
81 | remove: function(id) | |
82 | { | |
83 | db.serialize(function() { | |
84 | const query = | |
85 | "DELETE FROM Problems " + | |
86 | "WHERE id = " + id; | |
87 | db.run(query); | |
88 | }); | |
89 | }, | |
90 | ||
91 | safeRemove: function(id, uid, cb) | |
92 | { | |
93 | db.serialize(function() { | |
94 | const query = | |
95 | "SELECT 1 " + | |
96 | "FROM Problems " + | |
97 | "WHERE id = " + id + " AND uid = " + uid; | |
98 | db.get(query, (err,prob) => { | |
99 | if (!prob) | |
100 | return cb({errmsg: "Not your problem"}); | |
604b951e | 101 | ProblemModel.remove(id); |
89021f18 BA |
102 | cb(null); |
103 | }); | |
104 | }); | |
105 | }, | |
106 | } | |
107 | ||
108 | module.exports = ProblemModel; |