Queries are working

This commit is contained in:
2021-01-30 05:50:04 +11:00
parent 488c32eea2
commit 689a3371f1
12 changed files with 3824 additions and 1 deletions
+12
View File
@@ -0,0 +1,12 @@
const Sequelize = require('sequelize');
const sequelize = new Sequelize(process.env.DB_DATABASE, process.env.DB_USERNAME, process.env.DB_PASSWORD, {
host: process.env.DB_HOSTADDR,
dialect: 'mariadb',
timezone: process.env.DB_TIMEZONE,
logging: false
});
sequelize.sync();
module.exports = sequelize;
+32
View File
@@ -0,0 +1,32 @@
const Sequelize = require('sequelize');
const sequelize = require('..');
module.exports = sequelize.define('articles', {
index: {
type: Sequelize.INTEGER(11),
allowNull: false,
autoIncrement: true,
primaryKey: true,
unique: true
},
title: {
type: Sequelize.TEXT,
defaultValue: ''
},
author: {
type: Sequelize.TEXT,
defaultValue: ''
},
body: {
type: Sequelize.TEXT,
defaultValue: ''
},
edits: {
type: Sequelize.INTEGER(11),
defaultValue: 0
}
});
+4
View File
@@ -0,0 +1,4 @@
module.exports = {
articles: require('./articles'),
revisions: require('./revisions')
};
+33
View File
@@ -0,0 +1,33 @@
const Sequelize = require('sequelize');
const sequelize = require('..');
const articles = require('./articles');
const revisions = sequelize.define('revisions', {
title: {
type: Sequelize.TEXT,
defaultValue: ''
},
author: {
type: Sequelize.TEXT,
defaultValue: ''
},
body: {
type: Sequelize.TEXT,
defaultValue: ''
},
revision: {
type: Sequelize.INTEGER(11),
defaultValue: 0
}
});
//relationships
revisions.hasOne(articles, { as: 'article' });
sequelize.sync();
module.exports = revisions;
+17
View File
@@ -0,0 +1,17 @@
const express = require('express');
const router = express.Router();
//the routes
const query = require('./query');
//basic route management
router.get('/', query(false, false));
router.get('/:id(\\d+)', query(false, false));
router.get('/archive', query(true, false));
router.get('/archive/:id(\\d+)', query(true, false));
router.get('/titles', query(false, true));
router.get('/titles/:id(\\d+)', query(false, true));
router.get('/archive/titles', query(true, true));
router.get('/archive/titles/:id(\\d+)', query(true, true));
module.exports = router;
+40
View File
@@ -0,0 +1,40 @@
const { articles } = require('../database/models');
//the query function that can be reused
const query = (ascending, titlesOnly) => async (req, res) => {
console.log(ascending, titlesOnly);
console.log(req.params);
//specific search
if (req.params.id && typeof(parseInt(req.params.id)) === 'number') {
const result = await articles.findOne({
attributes: [
'index', 'title', 'author', ...(!titlesOnly ? ['body', 'edits'] : [])
],
order: [
['index', ascending ? 'ASC' : 'DESC']
],
offset: parseInt(req.params.id),
limit: 1
});
return res.status(200).json(result);
}
//default search
else {
const result = await articles.findAndCountAll({
attributes: [
'index', 'title', 'author', ...(!titlesOnly ? ['body', 'edits'] : [])
],
order: [
['index', ascending ? 'ASC' : 'DESC']
],
count: req.params.limit || process.env.QUERY_LIMIT || 999
});
return res.status(200).json(result.rows || result);
}
};
module.exports = query;
+23
View File
@@ -0,0 +1,23 @@
//environment variables
require('dotenv').config();
//create the server
const express = require('express');
const app = express();
const server = require('http').Server(app);
//database connection
const database = require('./database');
//access the news
app.use('/news', require('./news'));
//error on access
app.get('*', (req, res) => {
res.redirect('https://github.com/krgamestudios/news-server');
});
//startup
server.listen(process.env.WEB_PORT || 3100, (err) => {
console.log(`listening to localhost:${process.env.WEB_PORT || 3100}`);
});