first commit
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
const express = require("express");
|
||||
|
||||
/**
|
||||
* @param {import("../repositories/sqlite3")} repo
|
||||
*/
|
||||
module.exports = function bikeRouter(repo) {
|
||||
const router = express.Router({caseSensitive: false});
|
||||
|
||||
router.get("/", async(_, res) => {
|
||||
try {
|
||||
const bikes = await repo.listBikes();
|
||||
return res.status(200).json(bikes);
|
||||
} catch (err) {
|
||||
return res.status(400).json({code: 400, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/:id", async(req, res) => {
|
||||
try {
|
||||
const bike = await repo.findBike(req.params.id);
|
||||
if (bike == null) {
|
||||
return res.status(404).json({code: 404, message: "bike not found"})
|
||||
}
|
||||
|
||||
return res.status(200).json(bike);
|
||||
} catch (err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/", async(req, res) => {
|
||||
try {
|
||||
const {name, driver, maxLevel, connect} = req.body;
|
||||
const id = await repo.insertBike({name, driver, maxLevel, connect})
|
||||
|
||||
return res.status(200).json({id, name, driver, maxLevel, connect});
|
||||
} catch (err) {
|
||||
return res.status(400).json({code: 400, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.put("/:id", async(req, res) => {
|
||||
try {
|
||||
const bike = await repo.findBike(req.params.id);
|
||||
if (bike == null) {
|
||||
return res.status(404).json({code: 404, message: "bike not found"})
|
||||
}
|
||||
|
||||
bike.name = req.body.name || "";
|
||||
await repo.updateBike(bike);
|
||||
|
||||
return res.status(200).json(bike);
|
||||
} catch (err) {
|
||||
return res.status(400).json({code: 400, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.delete("/:id", async(req, res) => {
|
||||
try {
|
||||
const bike = await repo.findBike(req.params.id);
|
||||
if (bike == null) {
|
||||
return res.status(404).json({code: 404, message: "bike not found"})
|
||||
}
|
||||
|
||||
await repo.deleteBike(bike);
|
||||
|
||||
return res.status(200).json(bike);
|
||||
} catch (err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
return router;
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
const express = require("express");
|
||||
|
||||
/**
|
||||
* @param {import("../repositories/sqlite3")} repo
|
||||
*/
|
||||
module.exports = function programRouter(repo) {
|
||||
const router = express.Router({caseSensitive: false});
|
||||
|
||||
router.get("/", async(_, res) => {
|
||||
try {
|
||||
const programs = await repo.listPrograms();
|
||||
return res.status(200).json(programs);
|
||||
} catch (err) {
|
||||
return res.status(400).json({code: 400, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/:id", async(req, res) => {
|
||||
try {
|
||||
const program = await repo.findProgram(req.params.id);
|
||||
if (program == null) {
|
||||
return res.status(404).json({code: 404, message: "program not found"})
|
||||
}
|
||||
|
||||
return res.status(200).json(program);
|
||||
} catch (err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/", async(req, res) => {
|
||||
try {
|
||||
const {name, cpm, warmupMin, warmupCpm} = req.body;
|
||||
const id = await repo.insertProgram({name, cpm, warmupMin, warmupCpm})
|
||||
|
||||
return res.status(200).json({id, name, cpm, warmupMin, warmupCpm});
|
||||
} catch (err) {
|
||||
return res.status(400).json({code: 400, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.put("/:id", async(req, res) => {
|
||||
try {
|
||||
const program = await repo.findProgram(req.params.id);
|
||||
if (program == null) {
|
||||
return res.status(404).json({code: 404, message: "program not found"})
|
||||
}
|
||||
|
||||
program.name = req.body.name || "";
|
||||
await repo.updateProgram(program);
|
||||
|
||||
return res.status(200).json(program);
|
||||
} catch (err) {
|
||||
return res.status(400).json({code: 400, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.delete("/:id", async(req, res) => {
|
||||
try {
|
||||
const program = await repo.findProgram(req.params.id);
|
||||
if (program == null) {
|
||||
return res.status(404).json({code: 404, message: "program not found"})
|
||||
}
|
||||
|
||||
await repo.deleteProgram(program);
|
||||
|
||||
return res.status(200).json(program);
|
||||
} catch (err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
return router;
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
const express = require("express");
|
||||
const Workout = require("../systems/workout");
|
||||
|
||||
/**
|
||||
* @param {import("../repositories/sqlite3")} repo
|
||||
*/
|
||||
module.exports = function workoutRouter(repo) {
|
||||
const router = express.Router({caseSensitive: false});
|
||||
|
||||
/** @type {Workout[]} */
|
||||
let workouts = [];
|
||||
|
||||
router.get("/", async(req, res) => {
|
||||
if (req.query.active === "true") {
|
||||
return res.status(200).json(workouts.map(w => ({
|
||||
id: w.id,
|
||||
bike: w.bike,
|
||||
program: w.program,
|
||||
date: w.date,
|
||||
active: true,
|
||||
})));
|
||||
}
|
||||
|
||||
try {
|
||||
const dbWorkouts = await repo.listWorkouts();
|
||||
return res.status(200).json(dbWorkouts.map(w => ({
|
||||
...w,
|
||||
active: workouts.find(w2 => w2.id === w.id) != null,
|
||||
})));
|
||||
} catch (err) {
|
||||
return res.status(400).json({code: 400, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/:id", async(req, res) => {
|
||||
let workout = workouts.find(w => w.id == req.params.id);
|
||||
if (workout != null) {
|
||||
return res.status(200).json({id: workout.id, bike: workout.bike, program: workout.program, date: workout.date, active: true})
|
||||
}
|
||||
|
||||
try {
|
||||
workout = await repo.findWorkout(req.params.id);
|
||||
if (workout == null) {
|
||||
return res.status(404).json({code: 404, message: "workout not found"})
|
||||
}
|
||||
|
||||
return res.status(200).json({active: false, ...workout});
|
||||
} catch (err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/:id/measurements/", async(req, res) => {
|
||||
try {
|
||||
const measurements = await repo.listMeasurements(req.params.id);
|
||||
if (measurements == null) {
|
||||
return res.status(404).json({code: 404, message: "measurements not found"})
|
||||
}
|
||||
|
||||
return res.status(200).json(measurements);
|
||||
} catch (err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/", async(req, res) => {
|
||||
try {
|
||||
const {bikeId, programId} = req.body;
|
||||
|
||||
const workout = await Workout.create(repo, bikeId, programId);
|
||||
workouts.push(workout);
|
||||
|
||||
return res.status(200).json({id: workout.id, bike: workout.bike, program: workout.program, date: workout.date});
|
||||
} catch (err) {
|
||||
return res.status(400).json({code: 400, message: err.message || err});
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/:id/continue", async(req, res) => {
|
||||
let workout = workouts.find(w => w.id == req.params.id);
|
||||
if (workout != null) {
|
||||
return res.status(400).json({code: 400, message: "Workout already active."})
|
||||
}
|
||||
|
||||
try {
|
||||
workout = await Workout.continue(repo, req.params.id);
|
||||
workouts.push(workout);
|
||||
|
||||
return res.status(200).json({id: workout.id, bike: workout.bike, program: workout.program, date: workout.date});
|
||||
} catch (err) {
|
||||
return res.status(400).json({code: 400, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/:id/connect", async(req, res) => {
|
||||
const workout = workouts.find(w => w.id == req.params.id);
|
||||
if (workout == null) {
|
||||
return res.status(404).json({code: 404, message: "Workout not found or inactive."})
|
||||
}
|
||||
|
||||
try {
|
||||
await workout.connect();
|
||||
return res.status(200).json({id: workout.id, bike: workout.bike, program: workout.program, date: workout.date});
|
||||
} catch(err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err});
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/:id/start", async(req, res) => {
|
||||
const workout = workouts.find(w => w.id == req.params.id);
|
||||
if (workout == null) {
|
||||
return res.status(404).json({code: 404, message: "Workout not found or inactive."})
|
||||
}
|
||||
|
||||
try {
|
||||
await workout.start();
|
||||
return res.status(200).json({id: workout.id, bike: workout.bike, program: workout.program, date: workout.date});
|
||||
} catch(err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err});
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/:id/pause", async(req, res) => {
|
||||
const workout = workouts.find(w => w.id == req.params.id);
|
||||
if (workout == null) {
|
||||
return res.status(404).json({code: 404, message: "Workout not found or inactive."})
|
||||
}
|
||||
|
||||
try {
|
||||
await workout.pause();
|
||||
return res.status(200).json({id: workout.id, bike: workout.bike, program: workout.program, date: workout.date});
|
||||
} catch(err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err});
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/:id/stop", async(req, res) => {
|
||||
const workout = workouts.find(w => w.id == req.params.id);
|
||||
if (workout == null) {
|
||||
return res.status(404).json({code: 404, message: "Workout not found or inactive."})
|
||||
}
|
||||
|
||||
try {
|
||||
if (workout.driver != null) {
|
||||
await workout.stop();
|
||||
}
|
||||
|
||||
workouts = workouts.filter(w => w !== workout);
|
||||
await workout.destroy();
|
||||
|
||||
return res.status(200).json({id: workout.id, bike: workout.bike, program: workout.program, date: workout.date});
|
||||
} catch(err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err});
|
||||
}
|
||||
});
|
||||
|
||||
router.delete("/:id", async(req, res) => {
|
||||
let workout = workouts.find(w => w.id == req.params.id);
|
||||
if (workout != null) {
|
||||
return res.status(400).json({code: 400, message: "Workout already active."})
|
||||
}
|
||||
|
||||
try {
|
||||
workout = await repo.findWorkout(req.params.id);
|
||||
if (workout == null) {
|
||||
return res.status(404).json({code: 404, message: "workout not found"})
|
||||
}
|
||||
|
||||
await repo.deleteWorkout(workout);
|
||||
|
||||
return res.status(200).json(workout);
|
||||
} catch (err) {
|
||||
return res.status(500).json({code: 500, message: err.message || err})
|
||||
}
|
||||
});
|
||||
|
||||
return router;
|
||||
}
|
||||
Reference in New Issue
Block a user