Queries are working
This commit is contained in:
@@ -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;
|
||||
@@ -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
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,4 @@
|
||||
module.exports = {
|
||||
articles: require('./articles'),
|
||||
revisions: require('./revisions')
|
||||
};
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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}`);
|
||||
});
|
||||
Reference in New Issue
Block a user