From bc376e2b1cfa5ef7a6f0208ac9a51390d24a23dc Mon Sep 17 00:00:00 2001 From: canove Date: Fri, 4 Sep 2020 05:08:30 -0300 Subject: [PATCH] feat: added settings api on beackend --- backend/src/app.js | 15 ++-------- backend/src/config/database.js | 1 + backend/src/controllers/SettingController.js | 23 +++++++++++++++ backend/src/database/index.js | 11 ++++++- .../20200903215941-create-settings.js | 29 +++++++++++++++++++ .../20200904070004-create-default-settings.js | 22 ++++++++++++++ backend/src/models/Setting.js | 24 +++++++++++++++ backend/src/router/index.js | 21 ++++++++++++++ backend/src/{ => router}/routes/auth.js | 6 ++-- backend/src/{ => router}/routes/contacts.js | 6 ++-- backend/src/{ => router}/routes/messages.js | 4 +-- backend/src/router/routes/settings.js | 14 +++++++++ backend/src/{ => router}/routes/tickets.js | 4 +-- backend/src/{ => router}/routes/users.js | 5 ++-- backend/src/{ => router}/routes/whatsapp.js | 4 +-- 15 files changed, 160 insertions(+), 29 deletions(-) create mode 100644 backend/src/controllers/SettingController.js create mode 100644 backend/src/database/migrations/20200903215941-create-settings.js create mode 100644 backend/src/database/seeds/20200904070004-create-default-settings.js create mode 100644 backend/src/models/Setting.js create mode 100644 backend/src/router/index.js rename backend/src/{ => router}/routes/auth.js (58%) rename backend/src/{ => router}/routes/contacts.js (67%) rename backend/src/{ => router}/routes/messages.js (63%) create mode 100644 backend/src/router/routes/settings.js rename backend/src/{ => router}/routes/tickets.js (73%) rename backend/src/{ => router}/routes/users.js (71%) rename backend/src/{ => router}/routes/whatsapp.js (71%) diff --git a/backend/src/app.js b/backend/src/app.js index f743ec9..98f1607 100644 --- a/backend/src/app.js +++ b/backend/src/app.js @@ -11,12 +11,7 @@ const wBot = require("./libs/wbot"); const wbotMessageListener = require("./services/wbotMessageListener"); const wbotMonitor = require("./services/wbotMonitor"); -const MessagesRoutes = require("./routes/messages"); -const ContactsRoutes = require("./routes/contacts"); -const AuthRoutes = require("./routes/auth"); -const TicketsRoutes = require("./routes/tickets"); -const WhatsRoutes = require("./routes/whatsapp"); -const UsersRoutes = require("./routes/users"); +const Router = require("./router"); const app = express(); @@ -40,13 +35,7 @@ app.use(cors()); app.use(express.json()); app.use(multer({ storage: fileStorage }).single("media")); app.use("/public", express.static(path.join(__dirname, "..", "public"))); - -app.use("/auth", AuthRoutes); -app.use(ContactsRoutes); -app.use(TicketsRoutes); -app.use(MessagesRoutes); -app.use(WhatsRoutes); -app.use(UsersRoutes); +app.use(Router); const io = require("./libs/socket").init(server); io.on("connection", socket => { diff --git a/backend/src/config/database.js b/backend/src/config/database.js index 654fd21..5fae881 100644 --- a/backend/src/config/database.js +++ b/backend/src/config/database.js @@ -12,4 +12,5 @@ module.exports = { username: process.env.DB_USER, password: process.env.DB_PASS, logging: false, + seederStorage: "sequelize", }; diff --git a/backend/src/controllers/SettingController.js b/backend/src/controllers/SettingController.js new file mode 100644 index 0000000..0c1362d --- /dev/null +++ b/backend/src/controllers/SettingController.js @@ -0,0 +1,23 @@ +const Sequelize = require("sequelize"); + +const Setting = require("../models/Setting"); + +exports.index = async (req, res) => { + const settings = await Setting.findAll(); + + return res.status(200).json(settings); +}; + +exports.update = async (req, res) => { + const { settingKey } = req.params; + + const setting = await Setting.findByPk(settingKey); + + if (!setting) { + return res.status(400).json({ error: "No setting found with this ID" }); + } + + await setting.update(req.body); + + return res.status(200).json(setting); +}; diff --git a/backend/src/database/index.js b/backend/src/database/index.js index 4f2eef4..fe9956c 100644 --- a/backend/src/database/index.js +++ b/backend/src/database/index.js @@ -7,8 +7,17 @@ const Ticket = require("../models/Ticket"); const Message = require("../models/Message"); const Whatsapp = require("../models/Whatsapp"); const ContactCustomField = require("../models/ContactCustomField"); +const Setting = require("../models/Setting"); -const models = [User, Contact, Ticket, Message, Whatsapp, ContactCustomField]; +const models = [ + User, + Contact, + Ticket, + Message, + Whatsapp, + ContactCustomField, + Setting, +]; class Database { constructor() { diff --git a/backend/src/database/migrations/20200903215941-create-settings.js b/backend/src/database/migrations/20200903215941-create-settings.js new file mode 100644 index 0000000..ad82017 --- /dev/null +++ b/backend/src/database/migrations/20200903215941-create-settings.js @@ -0,0 +1,29 @@ +"use strict"; + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable("Settings", { + key: { + type: Sequelize.STRING, + primaryKey: true, + allowNull: false, + }, + value: { + type: Sequelize.TEXT, + allowNull: false, + }, + createdAt: { + type: Sequelize.DATE, + allowNull: false, + }, + updatedAt: { + type: Sequelize.DATE, + allowNull: false, + }, + }); + }, + + down: queryInterface => { + return queryInterface.dropTable("Settings"); + }, +}; diff --git a/backend/src/database/seeds/20200904070004-create-default-settings.js b/backend/src/database/seeds/20200904070004-create-default-settings.js new file mode 100644 index 0000000..73dfccb --- /dev/null +++ b/backend/src/database/seeds/20200904070004-create-default-settings.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = { + up: queryInterface => { + return queryInterface.bulkInsert( + "Settings", + [ + { + key: "userCreation", + value: "enabled", + createdAt: new Date(), + updatedAt: new Date(), + }, + ], + {} + ); + }, + + down: queryInterface => { + return queryInterface.bulkDelete("Settings", null, {}); + }, +}; diff --git a/backend/src/models/Setting.js b/backend/src/models/Setting.js new file mode 100644 index 0000000..fe4168a --- /dev/null +++ b/backend/src/models/Setting.js @@ -0,0 +1,24 @@ +const Sequelize = require("sequelize"); + +class Setting extends Sequelize.Model { + static init(sequelize) { + super.init( + { + key: { + type: Sequelize.STRING, + primaryKey: true, + allowNull: false, + unique: true, + }, + value: { type: Sequelize.TEXT, allowNull: false }, + }, + { + sequelize, + } + ); + + return this; + } +} + +module.exports = Setting; diff --git a/backend/src/router/index.js b/backend/src/router/index.js new file mode 100644 index 0000000..094ceb3 --- /dev/null +++ b/backend/src/router/index.js @@ -0,0 +1,21 @@ +const express = require("express"); + +const AuthRoutes = require("./routes/auth"); +const TicketsRoutes = require("./routes/tickets"); +const MessagesRoutes = require("./routes/messages"); +const ContactsRoutes = require("./routes/contacts"); +const WhatsRoutes = require("./routes/whatsapp"); +const UsersRoutes = require("./routes/users"); +const SettingsRoutes = require("./routes/settings"); + +const routes = express.Router(); + +routes.use("/auth", AuthRoutes); +routes.use(TicketsRoutes); +routes.use(MessagesRoutes); +routes.use(ContactsRoutes); +routes.use(WhatsRoutes); +routes.use(UsersRoutes); +routes.use(SettingsRoutes); + +module.exports = routes; diff --git a/backend/src/routes/auth.js b/backend/src/router/routes/auth.js similarity index 58% rename from backend/src/routes/auth.js rename to backend/src/router/routes/auth.js index 28a944e..930d1e6 100644 --- a/backend/src/routes/auth.js +++ b/backend/src/router/routes/auth.js @@ -1,7 +1,7 @@ const express = require("express"); -const SessionController = require("../controllers/SessionController"); -const UserController = require("../controllers/UserController"); -const isAuth = require("../middleware/is-auth"); +const SessionController = require("../../controllers/SessionController"); +const UserController = require("../../controllers/UserController"); +const isAuth = require("../../middleware/is-auth"); const routes = express.Router(); diff --git a/backend/src/routes/contacts.js b/backend/src/router/routes/contacts.js similarity index 67% rename from backend/src/routes/contacts.js rename to backend/src/router/routes/contacts.js index 6b22706..1d9bfa2 100644 --- a/backend/src/routes/contacts.js +++ b/backend/src/router/routes/contacts.js @@ -1,8 +1,8 @@ const express = require("express"); -const isAuth = require("../middleware/is-auth"); +const isAuth = require("../../middleware/is-auth"); -const ContactController = require("../controllers/ContactController"); -const ImportPhoneContactsController = require("../controllers/ImportPhoneContactsController"); +const ContactController = require("../../controllers/ContactController"); +const ImportPhoneContactsController = require("../../controllers/ImportPhoneContactsController"); const routes = express.Router(); diff --git a/backend/src/routes/messages.js b/backend/src/router/routes/messages.js similarity index 63% rename from backend/src/routes/messages.js rename to backend/src/router/routes/messages.js index 0a88edc..e48298b 100644 --- a/backend/src/routes/messages.js +++ b/backend/src/router/routes/messages.js @@ -1,7 +1,7 @@ const express = require("express"); -const isAuth = require("../middleware/is-auth"); +const isAuth = require("../../middleware/is-auth"); -const MessageController = require("../controllers/MessageController"); +const MessageController = require("../../controllers/MessageController"); const routes = express.Router(); diff --git a/backend/src/router/routes/settings.js b/backend/src/router/routes/settings.js new file mode 100644 index 0000000..fc0fe65 --- /dev/null +++ b/backend/src/router/routes/settings.js @@ -0,0 +1,14 @@ +const express = require("express"); +const isAuth = require("../../middleware/is-auth"); + +const SettingController = require("../../controllers/SettingController"); + +const routes = express.Router(); + +routes.get("/settings", isAuth, SettingController.index); + +// routes.get("/settings/:settingKey", isAuth, SettingsController.show); + +routes.put("/settings/:settingKey", isAuth, SettingController.update); + +module.exports = routes; diff --git a/backend/src/routes/tickets.js b/backend/src/router/routes/tickets.js similarity index 73% rename from backend/src/routes/tickets.js rename to backend/src/router/routes/tickets.js index 5bf490f..201e3e8 100644 --- a/backend/src/routes/tickets.js +++ b/backend/src/router/routes/tickets.js @@ -1,7 +1,7 @@ const express = require("express"); -const isAuth = require("../middleware/is-auth"); +const isAuth = require("../../middleware/is-auth"); -const TicketController = require("../controllers/TicketController"); +const TicketController = require("../../controllers/TicketController"); const routes = express.Router(); diff --git a/backend/src/routes/users.js b/backend/src/router/routes/users.js similarity index 71% rename from backend/src/routes/users.js rename to backend/src/router/routes/users.js index bbdb0de..8a50e61 100644 --- a/backend/src/routes/users.js +++ b/backend/src/router/routes/users.js @@ -1,8 +1,7 @@ const express = require("express"); -const User = require("../models/User"); -const isAuth = require("../middleware/is-auth"); -const UserController = require("../controllers/UserController"); +const isAuth = require("../../middleware/is-auth"); +const UserController = require("../../controllers/UserController"); const routes = express.Router(); diff --git a/backend/src/routes/whatsapp.js b/backend/src/router/routes/whatsapp.js similarity index 71% rename from backend/src/routes/whatsapp.js rename to backend/src/router/routes/whatsapp.js index 7d27526..4eb8758 100644 --- a/backend/src/routes/whatsapp.js +++ b/backend/src/router/routes/whatsapp.js @@ -1,7 +1,7 @@ const express = require("express"); -const isAuth = require("../middleware/is-auth"); +const isAuth = require("../../middleware/is-auth"); -const WhatsAppSessionController = require("../controllers/WhatsAppSessionController"); +const WhatsAppSessionController = require("../../controllers/WhatsAppSessionController"); const routes = express.Router();