mirror of
https://github.com/pawelmalak/flame.git
synced 2025-04-24 13:57:09 -04:00
SQLite database. App model and controller
This commit is contained in:
parent
8392c2422a
commit
2acc3b72ec
11 changed files with 1185 additions and 32 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
node_modules/
|
node_modules/
|
||||||
.env
|
.env
|
||||||
|
*.sqlite
|
79
controllers/apps.js
Normal file
79
controllers/apps.js
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
const asyncWrapper = require('../middleware/asyncWrapper');
|
||||||
|
const ErrorResponse = require('../utils/ErrorResponse');
|
||||||
|
const App = require('../models/App');
|
||||||
|
|
||||||
|
// @desc Create new app
|
||||||
|
// @route POST /api/apps
|
||||||
|
// @access Public
|
||||||
|
exports.createApp = asyncWrapper(async (req, res, next) => {
|
||||||
|
const app = await App.create(req.body);
|
||||||
|
|
||||||
|
res.status(201).json({
|
||||||
|
success: true,
|
||||||
|
data: app
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// @desc Get all apps
|
||||||
|
// @route GET /api/apps
|
||||||
|
// @access Public
|
||||||
|
exports.getApps = asyncWrapper(async (req, res, next) => {
|
||||||
|
const apps = await App.findAll();
|
||||||
|
|
||||||
|
res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
data: apps
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// @desc Get single app
|
||||||
|
// @route GET /api/apps/:id
|
||||||
|
// @access Public
|
||||||
|
exports.getApp = asyncWrapper(async (req, res, next) => {
|
||||||
|
const app = await App.findOne({
|
||||||
|
where: { id: req.params.id }
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!app) {
|
||||||
|
return next(new ErrorResponse(`App with id of ${req.params.id} was not found`, 404));
|
||||||
|
}
|
||||||
|
|
||||||
|
res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
data: app
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// @desc Update app
|
||||||
|
// @route PUT /api/apps/:id
|
||||||
|
// @access Public
|
||||||
|
exports.updateApp = asyncWrapper(async (req, res, next) => {
|
||||||
|
let app = await App.findOne({
|
||||||
|
where: { id: req.params.id }
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!app) {
|
||||||
|
return next(new ErrorResponse(`App with id of ${req.params.id} was not found`, 404));
|
||||||
|
}
|
||||||
|
|
||||||
|
app = await app.update({ ...req.body });
|
||||||
|
|
||||||
|
res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
data: app
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// @desc Delete app
|
||||||
|
// @route DELETE /api/apps/:id
|
||||||
|
// @access Public
|
||||||
|
exports.deleteApp = asyncWrapper(async (req, res, next) => {
|
||||||
|
await App.destroy({
|
||||||
|
where: { id: req.params.id }
|
||||||
|
})
|
||||||
|
|
||||||
|
res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
data: {}
|
||||||
|
})
|
||||||
|
})
|
25
db.js
Normal file
25
db.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
const { Sequelize } = require('sequelize');
|
||||||
|
|
||||||
|
const sequelize = new Sequelize({
|
||||||
|
dialect: 'sqlite',
|
||||||
|
storage: './db.sqlite'
|
||||||
|
});
|
||||||
|
|
||||||
|
const connectDB = async () => {
|
||||||
|
try {
|
||||||
|
await sequelize.authenticate({ logging: false });
|
||||||
|
console.log('Connected to database'.cyan.underline);
|
||||||
|
await sequelize.sync({
|
||||||
|
// alter: true,
|
||||||
|
logging: false
|
||||||
|
});
|
||||||
|
console.log('All models were synced'.cyan.underline);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Unable to connect to the database:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
connectDB,
|
||||||
|
sequelize
|
||||||
|
};
|
17
middleware/asyncWrapper.js
Normal file
17
middleware/asyncWrapper.js
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// const asyncWrapper = foo => (req, res, next) => {
|
||||||
|
// return Promise
|
||||||
|
// .resolve(foo(req, res, next))
|
||||||
|
// .catch(next);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// module.exports = asyncWrapper;
|
||||||
|
|
||||||
|
function asyncWrapper(foo) {
|
||||||
|
return function (req, res, next) {
|
||||||
|
return Promise
|
||||||
|
.resolve(foo(req, res, next))
|
||||||
|
.catch(next);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = asyncWrapper;
|
15
middleware/errorHandler.js
Normal file
15
middleware/errorHandler.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
const ErrorResponse = require('../utils/ErrorResponse');
|
||||||
|
|
||||||
|
const errorHandler = (err, req, res, next) => {
|
||||||
|
let error = { ...err };
|
||||||
|
error.message = err.message;
|
||||||
|
|
||||||
|
console.log(err);
|
||||||
|
|
||||||
|
res.status(err.statusCode || 500).json({
|
||||||
|
success: false,
|
||||||
|
error: error.message || 'Server Error'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = errorHandler;
|
20
models/App.js
Normal file
20
models/App.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
const { Sequelize, DataTypes } = require('sequelize');
|
||||||
|
const { sequelize } = require('../db');
|
||||||
|
|
||||||
|
const App = sequelize.define('App', {
|
||||||
|
name: {
|
||||||
|
type: DataTypes.STRING,
|
||||||
|
allowNull: false
|
||||||
|
},
|
||||||
|
url: {
|
||||||
|
type: DataTypes.STRING,
|
||||||
|
allowNull: false
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
type: DataTypes.STRING,
|
||||||
|
allowNull: false,
|
||||||
|
defaultValue: 'cancel'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = App;
|
1004
package-lock.json
generated
1004
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -13,9 +13,12 @@
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/express": "^4.17.11",
|
"@types/express": "^4.17.11",
|
||||||
|
"colors": "^1.4.0",
|
||||||
"concurrently": "^6.0.2",
|
"concurrently": "^6.0.2",
|
||||||
"dotenv": "^9.0.0",
|
"dotenv": "^9.0.0",
|
||||||
"express": "^4.17.1"
|
"express": "^4.17.1",
|
||||||
|
"sequelize": "^6.6.2",
|
||||||
|
"sqlite3": "^5.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"nodemon": "^2.0.7"
|
"nodemon": "^2.0.7"
|
||||||
|
|
23
routes/apps.js
Normal file
23
routes/apps.js
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
const express = require('express');
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
const {
|
||||||
|
createApp,
|
||||||
|
getApps,
|
||||||
|
getApp,
|
||||||
|
updateApp,
|
||||||
|
deleteApp
|
||||||
|
} = require('../controllers/apps');
|
||||||
|
|
||||||
|
router
|
||||||
|
.route('/')
|
||||||
|
.post(createApp)
|
||||||
|
.get(getApps);
|
||||||
|
|
||||||
|
router
|
||||||
|
.route('/:id')
|
||||||
|
.get(getApp)
|
||||||
|
.put(updateApp)
|
||||||
|
.delete(deleteApp);
|
||||||
|
|
||||||
|
module.exports = router;
|
18
server.js
18
server.js
|
@ -1,13 +1,27 @@
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
|
const { connectDB } = require('./db');
|
||||||
|
const errorHandler = require('./middleware/errorHandler');
|
||||||
|
const colors = require('colors');
|
||||||
require('dotenv').config();
|
require('dotenv').config();
|
||||||
|
|
||||||
|
connectDB();
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
const PORT = process.env.PORT || 5005;
|
const PORT = process.env.PORT || 5005;
|
||||||
|
|
||||||
app.get('/', (req, res) => {
|
app.get('/', (req, res) => {
|
||||||
res.send('hello');
|
res.send('Server is working');
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Body parser
|
||||||
|
app.use(express.json());
|
||||||
|
|
||||||
|
// Link controllers with routes
|
||||||
|
app.use('/api/apps', require('./routes/apps'));
|
||||||
|
|
||||||
|
// Custom error handler
|
||||||
|
app.use(errorHandler);
|
||||||
|
|
||||||
app.listen(PORT, () => {
|
app.listen(PORT, () => {
|
||||||
console.log(`Server is running on port ${PORT}`);
|
console.log(`Server is running on port ${PORT} in ${process.env.NODE_ENV} mode`.yellow.bold);
|
||||||
})
|
})
|
8
utils/ErrorResponse.js
Normal file
8
utils/ErrorResponse.js
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
class ErrorResponse extends Error {
|
||||||
|
constructor(message, statusCode) {
|
||||||
|
super(message);
|
||||||
|
this.statusCode = statusCode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = ErrorResponse;
|
Loading…
Add table
Add a link
Reference in a new issue