Skip to content

Commit 3a47a68

Browse files
committed
added basic endpoints
1 parent 1aeabf5 commit 3a47a68

File tree

15 files changed

+224
-44
lines changed

15 files changed

+224
-44
lines changed

dist/index.js

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,45 @@ let device_service = new Device.Service();
1515
var router = express.Router();
1616
router.post("/signup", (req, res) => {
1717
let user = { username: req.body.username, password: req.body.password };
18-
user_service.signup(user).then(() => res.json(true)).catch(() => res.json(false));
18+
user_service.signup(user).then(() => res.json({ success: user.username })).catch((reason) => res.json({ error: reason }));
1919
});
2020
router.post('/login', function (req, res) {
21-
res.json({ token: 'youmadeit' });
21+
return user_service.login(req.body.username, req.body.password).then(user => {
22+
let token = session_service.acquire(user.username);
23+
res.json({ token: token });
24+
})
25+
.catch(reason => res.json({ error: reason }));
26+
});
27+
router.post("/lost-password", function (req, res) {
28+
res.json({ success: "An email will be sent to your address." });
2229
});
2330
router.get('/switch', function (req, res) {
24-
res.json({ status: switch_status });
31+
session_service.retrieve(req.query.token).then(user => res.json({ status: switch_status }))
32+
.catch(reason => res.json({ error: reason }));
2533
});
2634
router.post('/switch', function (req, res) {
27-
switch_status = req.body.status;
28-
res.json({ status: switch_status });
35+
session_service.retrieve(req.query.token).then(user => {
36+
switch_status = req.body.status;
37+
res.json({ status: switch_status });
38+
})
39+
.catch(reason => res.json({ error: reason }));
40+
});
41+
router.post("/history", function (req, res) {
42+
session_service.retrieve(req.query.token).then(user => {
43+
res.json({ user: user,
44+
history: [
45+
{ date: new Date(2016, 8, 1, 10, 10), status: { switch: true, presence: true } },
46+
{ date: new Date(2016, 8, 1, 10, 16), status: { switch: true, presence: true } },
47+
{ date: new Date(2016, 8, 1, 10, 30), status: { switch: false, presence: false } },
48+
{ date: new Date(2016, 8, 1, 11, 10), status: { switch: false, presence: false } },
49+
{ date: new Date(2016, 8, 1, 11, 16), status: { switch: true, presence: false } },
50+
{ date: new Date(2016, 8, 1, 15, 22), status: { switch: true, presence: true } },
51+
{ date: new Date(2016, 8, 1, 15, 30), status: { switch: true, presence: true } },
52+
{ date: new Date(2016, 8, 1, 15, 35), status: { switch: false, presence: true } },
53+
{ date: new Date(2016, 8, 1, 15, 55), status: { switch: true, presence: true } },
54+
] });
55+
})
56+
.catch(reason => res.json({ error: reason }));
2957
});
3058
app.use('/', router);
3159
app.listen(port);

dist/models/user.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"use strict";
2+
class Model {
3+
}
4+
exports.Model = Model;
5+
;

dist/services/session.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,33 @@
11
"use strict";
2+
const Datastore = require("nedb");
3+
const shortid = require("shortid");
4+
class Token {
5+
}
6+
exports.Token = Token;
7+
;
28
class Service {
9+
constructor() {
10+
this.db = new Datastore({ filename: "./sessions.db", autoload: true });
11+
}
12+
acquire(username) {
13+
let token = new Token();
14+
token.__id = shortid.generate();
15+
token.username = username;
16+
this.db.insert(token);
17+
return token.__id;
18+
}
19+
retrieve(token) {
20+
return new Promise((resolve, reject) => {
21+
this.db.findOne({ __id: token }, (err, document) => {
22+
if (err)
23+
return reject(err.message);
24+
if (document) {
25+
return resolve(document.username);
26+
}
27+
return reject("Token not found.");
28+
});
29+
});
30+
}
331
}
432
exports.Service = Service;
533
;

dist/services/user.js

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,38 @@
11
"use strict";
22
const Datastore = require("nedb");
3-
class Model {
4-
}
5-
exports.Model = Model;
6-
;
73
class Service {
84
constructor() {
95
this.db = new Datastore({ filename: "./users.db", autoload: true });
106
}
117
signup(user) {
12-
return new Promise((resolve, reject) => this.db.insert(user, (err, document) => {
13-
if (err) {
14-
return reject(err);
15-
}
16-
return resolve();
17-
}));
8+
return new Promise((resolve, reject) => {
9+
this.db.findOne({ username: user.username }, (err, doc) => {
10+
if (err)
11+
return reject(err);
12+
if (doc) {
13+
return reject("The user already exists.");
14+
}
15+
this.db.insert(user, (err, document) => {
16+
if (err) {
17+
return reject(err.message);
18+
}
19+
return resolve(true);
20+
});
21+
});
22+
});
1823
}
19-
;
2024
login(username, password) {
2125
return new Promise((resolve, reject) => this.db.findOne({
2226
username: username, password: password
2327
}, (err, document) => {
2428
if (err) {
25-
return reject(err);
29+
return reject(err.message);
2630
}
2731
else {
28-
return resolve(document);
32+
if (document) {
33+
return resolve(document);
34+
}
35+
return reject("Not found.");
2936
}
3037
}));
3138
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
"dependencies": {
2525
"body-parser": "^1.15.2",
2626
"express": "^4.14.0",
27-
"nedb": "^1.8.0"
27+
"nedb": "^1.8.0",
28+
"shortid": "^2.2.6"
2829
},
2930
"devDependencies": {
3031
"gulp": "^3.9.1",

sessions.db

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{"__id":"HkZEj0-j","username":"ignacio","_id":"Iey1FPz1W2a26EJT"}
2+
{"__id":"SkWp9Cbi","username":"ignacio","_id":"uL5rllhEIEVAIjyn"}
3+
{"__id":"B1d8GyGj","username":"ignacio","_id":"TprKNb94X88OnZSQ"}

src/index.ts

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import express = require("express");
44
import bodyParser = require("body-parser");
55

6+
import * as UserModel from "./models/user";
7+
68
import * as Device from "./services/device";
79
import * as User from "./services/user";
810
import * as Session from "./services/session";
@@ -22,18 +24,47 @@ let device_service = new Device.Service();
2224

2325
var router = express.Router();
2426
router.post("/signup", (req,res) => {
25-
let user: User.Model = { username: req.body.username, password: req.body.password };
26-
user_service.signup(user).then(() => res.json(true)).catch(() => res.json(false));
27+
let user: UserModel.Model = { username: req.body.username, password: req.body.password };
28+
user_service.signup(user).then(() => res.json({success: user.username})).catch((reason) => res.json({error: reason}));
2729
});
2830
router.post('/login', function(req, res) {
29-
res.json({ token: 'youmadeit' });
31+
return user_service.login(req.body.username, req.body.password).then(user =>
32+
{
33+
let token = session_service.acquire(user.username);
34+
res.json({ token: token });
35+
})
36+
.catch(reason => res.json({ error: reason }));
37+
});
38+
router.post("/lost-password", function(req,res) {
39+
res.json({success: "An email will be sent to your address."});
3040
});
3141
router.get('/switch', function(req, res) {
32-
res.json({ status: switch_status });
42+
session_service.retrieve(req.query.token).then(user => res.json({ status: switch_status }))
43+
.catch(reason => res.json({error: reason}));
3344
});
3445
router.post('/switch', function(req, res) {
35-
switch_status = req.body.status;
36-
res.json({ status: switch_status });
46+
session_service.retrieve(req.query.token).then(user => {
47+
switch_status = req.body.status;
48+
res.json({ status: switch_status });
49+
})
50+
.catch(reason => res.json({error: reason}));
51+
});
52+
router.post("/history", function(req,res) {
53+
session_service.retrieve(req.query.token).then(user => {
54+
res.json({user: user,
55+
history: [
56+
{ date: new Date(2016,8,1,10,10), status: {switch: true, presence: true} },
57+
{ date: new Date(2016,8,1,10,16), status: {switch: true, presence: true} },
58+
{ date: new Date(2016,8,1,10,30), status: {switch: false, presence: false} },
59+
{ date: new Date(2016,8,1,11,10), status: {switch: false, presence: false} },
60+
{ date: new Date(2016,8,1,11,16), status: {switch: true, presence: false} },
61+
{ date: new Date(2016,8,1,15,22), status: {switch: true, presence: true} },
62+
{ date: new Date(2016,8,1,15,30), status: {switch: true, presence: true} },
63+
{ date: new Date(2016,8,1,15,35), status: {switch: false, presence: true} },
64+
{ date: new Date(2016,8,1,15,55), status: {switch: true, presence: true} },
65+
]});
66+
})
67+
.catch(reason => res.json({error: reason}));
3768
});
3869

3970
app.use('/', router);

src/models/user.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export class Model {
2+
username: string;
3+
password: string;
4+
};

src/services/session.ts

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,34 @@
1+
import Datastore = require("nedb");
2+
import shortid = require("shortid");
3+
4+
export class Token {
5+
__id : string;
6+
username : string;
7+
expiration : Date;
8+
};
9+
110
export class Service {
2-
11+
db: Datastore;
12+
constructor() {
13+
this.db = new Datastore({filename: "./sessions.db", autoload: true});
14+
}
15+
acquire(username: string): string {
16+
let token = new Token();
17+
token.__id = shortid.generate();
18+
token.username = username;
19+
this.db.insert(token);
20+
return token.__id;
21+
}
22+
retrieve(token: string): Promise<string> {
23+
return new Promise((resolve,reject) => {
24+
this.db.findOne({__id: token}, (err,document: Token) => {
25+
if (err)
26+
return reject(err.message);
27+
if (document) {
28+
return resolve(document.username);
29+
}
30+
return reject("Token not found.");
31+
});
32+
});
33+
}
334
};

src/services/user.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,40 @@
11
import Datastore = require("nedb");
2-
3-
export class Model {
4-
username: string;
5-
password: string;
6-
};
2+
import * as UserModel from "../models/user";
73

84
export class Service {
95
db: Datastore;
106
constructor() {
117
this.db = new Datastore({filename: "./users.db", autoload: true});
128
}
13-
signup(user: Model): Promise<any> {
14-
return new Promise((resolve,reject) => this.db.insert(user, (err,document) => {
15-
if (err) {
16-
return reject(err);
17-
}
18-
return resolve();
19-
}));
20-
};
21-
login(username: string, password: string): Promise<Model> {
22-
return new Promise<Model>((resolve,reject) => this.db.findOne({
9+
signup(user: UserModel.Model): Promise<any> {
10+
return new Promise((resolve,reject) => {
11+
this.db.findOne({username: user.username}, (err,doc) => {
12+
if (err) return reject(err);
13+
if (doc) {
14+
return reject("The user already exists.");
15+
}
16+
this.db.insert(user, (err,document) => {
17+
if (err) {
18+
return reject(err.message);
19+
}
20+
return resolve(true);
21+
}
22+
);
23+
});
24+
});
25+
}
26+
login(username: string, password: string): Promise<UserModel.Model> {
27+
return new Promise<UserModel.Model>((resolve,reject) => this.db.findOne({
2328
username: username, password: password
2429
}, (err,document) => {
2530
if (err) {
26-
return reject(err);
31+
return reject(err.message);
2732
}
2833
else {
29-
return resolve(document as Model);
34+
if (document) {
35+
return resolve(document as UserModel.Model);
36+
}
37+
return reject("Not found.");
3038
}
3139
}));
3240
};

0 commit comments

Comments
 (0)