You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.8 KiB
91 lines
2.8 KiB
const express = require('express');
|
|
const app = express.Router();
|
|
|
|
const sqlite = require('better-sqlite3');
|
|
const db = new sqlite('the_big_db.db', { verbose: console.log });
|
|
|
|
const { loginRequired } = require('../authStuff.js');
|
|
|
|
const showdown = require('showdown');
|
|
const converter = new showdown.Converter();
|
|
|
|
const pageListQuery = db.prepare(`
|
|
select p.number, p.title, p.time
|
|
from pages p
|
|
where time >= (
|
|
select max(s.time)
|
|
from pages s
|
|
where s.number = p.number
|
|
)
|
|
order by p.time desc
|
|
`);
|
|
app.get('/pages', (req, res) => {
|
|
try {
|
|
const pages = pageListQuery.all();
|
|
res.status(200).json(pages);
|
|
} catch (error) {
|
|
res.status(500).json({"error": error});
|
|
}
|
|
});
|
|
|
|
app.post('/page/new', loginRequired, (req, res) => {
|
|
try {
|
|
const maxPage = db.prepare('select max(number) as maximum from pages').get()
|
|
const newPageNumber = maxPage.maximum + 1;
|
|
const newPage = db.prepare('insert into pages (number, title, description, author) values (?, ?, ?, ?) returning number')
|
|
.get(newPageNumber, "new page", "this page is new!", req.session.userId);
|
|
res.status(200).json(newPageNumber);
|
|
} catch (error) {
|
|
res.status(500).json({"error": error});
|
|
}
|
|
});
|
|
|
|
app.get('/page/:number', (req, res) => {
|
|
try {
|
|
const page = db.prepare('select * from pages where number=:number order by time desc').get(req.params);
|
|
if (page === undefined) res.status(404).json({"error": "page not found"});
|
|
else res.status(200).json(page);
|
|
} catch (error) {
|
|
res.status(500).json({"error": error});
|
|
}
|
|
});
|
|
|
|
app.post('/page/:number', loginRequired, (req, res) => {
|
|
try {
|
|
const html = converter.makeHtml(req.body.description);
|
|
const changes = db.prepare('insert into pages (number, title, description, html, author) values (?, ?, ?, ?, ?)')
|
|
.run(req.params.number, req.body.title, req.body.description, html, req.session.userId);
|
|
res.status(200).json(changes);
|
|
} catch (error) {
|
|
res.status(500).json({"error": error});
|
|
}
|
|
});
|
|
|
|
app.delete('/page/:number', loginRequired, (req, res) => {
|
|
try {
|
|
const changes = db.prepare('delete from pages where number = ?').run(req.params.number);
|
|
res.status(200).json({id: req.params.id});
|
|
} catch (error) {
|
|
res.status(500).json({"error": error});
|
|
}
|
|
});
|
|
|
|
app.get('/page/:number/history', (req, res) => {
|
|
try {
|
|
const all = db.prepare('select * from pages where number=:number order by time desc').all(req.params);
|
|
res.status(200).json(all);
|
|
} catch (error) {
|
|
res.status(500).json({"error": error});
|
|
}
|
|
});
|
|
app.get('/page/:number/:id', (req, res) => {
|
|
try {
|
|
const page = db.prepare('select * from pages where number=:number and id=:id').get(req.params);
|
|
if (page === undefined) res.status(404).json({"error": "page not found"});
|
|
else res.status(200).json(page);
|
|
} catch (error) {
|
|
res.status(500).json({"error": error});
|
|
}
|
|
});
|
|
|
|
module.exports = app; |