├── src ├── utils │ └── appConfig.js ├── infra │ ├── sqlite-db.js │ └── schemasAndData.js ├── models │ ├── userModel.js │ └── taskModel.js ├── index.js ├── router │ ├── taskRouter.js │ ├── userRouter.js │ └── router.js ├── dao │ ├── memoryTaskDAO.js │ ├── memoryUserDAO.js │ ├── userDAO.js │ └── taskDAO.js └── controllers │ ├── userController.js │ └── taskController.js ├── README.md ├── package.json └── .gitignore /src/utils/appConfig.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | APP_NAME: "ToDo APP API", 3 | 4 | USERS_TABLE: "users", 5 | TASKS_TABLE: "tasks", 6 | }; 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ToDo APP API 2 | 3 | ## Entidade User 4 | - name 5 | - email 6 | - password 7 | 8 | 9 | ## Entidade Task 10 | - title 11 | - description 12 | - status 13 | - created_at -------------------------------------------------------------------------------- /src/infra/sqlite-db.js: -------------------------------------------------------------------------------- 1 | const sqlite3 = require("sqlite3").verbose(); 2 | const bd = new sqlite3.Database("src/infra/database.db"); 3 | 4 | //Processamento de sinal 5 | process.on("SIGINT", () => 6 | bd.close(() => { 7 | console.log("BD encerrado!"); 8 | process.exit(0); 9 | }) 10 | ); 11 | 12 | module.exports = bd; 13 | -------------------------------------------------------------------------------- /src/models/userModel.js: -------------------------------------------------------------------------------- 1 | const { v4: uuid } = require("uuid"); 2 | const sha256 = require("js-sha256"); 3 | 4 | class UserModel { 5 | constructor(name, email, password) { 6 | this.id = uuid(); 7 | this.name = name; 8 | this.email = email; 9 | this.password = sha256(password); 10 | } 11 | } 12 | 13 | module.exports = UserModel; 14 | -------------------------------------------------------------------------------- /src/models/taskModel.js: -------------------------------------------------------------------------------- 1 | const { v4: uuid } = require("uuid"); 2 | 3 | class Tasks { 4 | constructor(title, description, status, userID) { 5 | this.id = uuid(); 6 | this.title = title; 7 | this.description = description; 8 | this.status = status; 9 | this.user_id = userID; 10 | this.created_at = new Date().toLocaleString(); 11 | } 12 | } 13 | 14 | module.exports = Tasks; 15 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | require("dotenv").config(); 3 | 4 | const router = require("./router/router"); 5 | 6 | const APP_PORT = process.env.PORT; 7 | 8 | const { APP_NAME } = require("./utils/appConfig"); 9 | 10 | const app = express(); 11 | 12 | app.use("/", router); 13 | 14 | app.listen(APP_PORT, () => { 15 | console.log(`${APP_NAME} listening at http://localhost:${APP_PORT}`); 16 | }); 17 | -------------------------------------------------------------------------------- /src/router/taskRouter.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | 3 | const TaskController = require("../controllers/taskController"); 4 | 5 | const router = express.Router(); 6 | 7 | router.get("/:id", TaskController.show); 8 | router.get("/", TaskController.index); 9 | router.post("/", TaskController.save); 10 | router.put("/:id", TaskController.update); 11 | router.delete("/:id", TaskController.remove); 12 | 13 | module.exports = router; 14 | -------------------------------------------------------------------------------- /src/router/userRouter.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | 3 | const UserController = require("../controllers/userController"); 4 | 5 | const router = express.Router(); 6 | 7 | router.get("/:id", UserController.show); 8 | router.get("/", UserController.index); 9 | router.post("/", UserController.save); 10 | router.put("/:id", UserController.update); 11 | router.delete("/:id", UserController.remove); 12 | 13 | module.exports = router; 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todoAPI", 3 | "version": "1.0.0", 4 | "description": "ToDo APP do Modulo 4", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node src/index.js", 8 | "dev": "nodemon src/index.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "cors": "^2.8.5", 15 | "dotenv": "^10.0.0", 16 | "express": "^4.17.1", 17 | "js-sha256": "^0.9.0", 18 | "sqlite3": "^5.0.2", 19 | "uuid": "^8.3.2" 20 | }, 21 | "devDependencies": { 22 | "nodemon": "^2.0.15" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/router/router.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const cors = require("cors"); 3 | const router = express.Router(); 4 | 5 | const UserRouter = require("./userRouter"); 6 | const TaskRouter = require("./taskRouter"); 7 | 8 | router.use(cors()); 9 | router.use((req, res, next) => { 10 | console.log(req.headers.host, new Date().toLocaleTimeString()); 11 | next(); 12 | }); 13 | 14 | router.use(express.json()); 15 | 16 | router.get("/", (req, res) => { 17 | res.send("Welcome to ToDo APP API"); 18 | }); 19 | 20 | router.use("/users", UserRouter); 21 | router.use("/tasks", TaskRouter); 22 | 23 | module.exports = router; 24 | -------------------------------------------------------------------------------- /src/dao/memoryTaskDAO.js: -------------------------------------------------------------------------------- 1 | const db = []; 2 | 3 | class TaskDAO { 4 | constructor(dbConn) { 5 | this.dbConn = dbConn; 6 | } 7 | 8 | getTaskByID = (id) => { 9 | return new Promise((resolve, reject) => { 10 | console.log(this.dbConn); 11 | console.log(id); 12 | for (let i = 0; i < this.dbConn.length; i++) { 13 | if (this.dbConn[i].id === id) { 14 | console.log(this.dbConn[i]); 15 | resolve(this.dbConn[i]); 16 | } 17 | } 18 | }); 19 | }; 20 | 21 | getAllTasks = () => { 22 | return new Promise((resolve, reject) => { 23 | resolve(this.dbConn); 24 | }); 25 | }; 26 | 27 | saveTask = (task) => { 28 | return new Promise((resolve, reject) => { 29 | this.dbConn.push(task); 30 | resolve(task.id); 31 | }); 32 | }; 33 | 34 | updateTask = (id, task) => { 35 | return new Promise((resolve, reject) => { 36 | for (let i = 0; i < this.dbConn.length; i++) { 37 | if (this.dbConn[i].id === id) { 38 | this.dbConn[i].id = task; 39 | resolve(this.dbConn[i].id); 40 | } 41 | } 42 | }); 43 | }; 44 | 45 | deleteTask = (id) => { 46 | return new Promise((resolve, reject) => { 47 | this.dbConn = this.dbConn.filter((db) => db.id !== id); 48 | resolve(true); 49 | }); 50 | }; 51 | } 52 | 53 | module.exports = new TaskDAO(db); 54 | -------------------------------------------------------------------------------- /src/dao/memoryUserDAO.js: -------------------------------------------------------------------------------- 1 | const db = []; 2 | 3 | class UserDAO { 4 | constructor(dbConn) { 5 | this.dbConn = dbConn; 6 | } 7 | 8 | getUserByID = (id) => { 9 | return new Promise((resolve, reject) => { 10 | console.log(this.dbConn); 11 | console.log(id); 12 | for (let i = 0; i < this.dbConn.length; i++) { 13 | if (this.dbConn[i].id === id) { 14 | console.log(this.dbConn[i]); 15 | resolve(this.dbConn[i]); 16 | } 17 | } 18 | }); 19 | }; 20 | 21 | getAllUsers = () => { 22 | return new Promise((resolve, reject) => { 23 | resolve(this.dbConn); 24 | }); 25 | }; 26 | 27 | saveUser = (user) => { 28 | return new Promise((resolve, reject) => { 29 | this.dbConn.push(user); 30 | resolve(user.id); 31 | }); 32 | }; 33 | 34 | updateUser = (id, user) => { 35 | return new Promise((resolve, reject) => { 36 | for (let i = 0; i < this.dbConn.length; i++) { 37 | if (this.dbConn[i].id === id) { 38 | this.dbConn[i].id = user; 39 | resolve(this.dbConn[i].id); 40 | } 41 | } 42 | }); 43 | }; 44 | 45 | deleteUser = (id) => { 46 | return new Promise((resolve, reject) => { 47 | this.dbConn = this.dbConn.filter((db) => db.id !== id); 48 | resolve(true); 49 | }); 50 | }; 51 | } 52 | 53 | module.exports = new UserDAO(db); 54 | -------------------------------------------------------------------------------- /src/controllers/userController.js: -------------------------------------------------------------------------------- 1 | const UserModel = require("../models/userModel"); 2 | const dao = require("../dao/memoryUserDAO"); 3 | 4 | class UserController { 5 | constructor(dbConn) { 6 | this.dbConn = dbConn; 7 | } 8 | 9 | show = (req, res) => { 10 | const id = req.params.id; 11 | 12 | this.dbConn 13 | .getUserByID(id) 14 | .then((user) => { 15 | res.send(user); 16 | }) 17 | .catch((error) => { 18 | res.send(error); 19 | }); 20 | }; 21 | 22 | index = (req, res) => { 23 | this.dbConn 24 | .getAllUsers() 25 | .then((users) => { 26 | res.send(users); 27 | }) 28 | .catch((error) => { 29 | res.send(error); 30 | }); 31 | }; 32 | 33 | save = (req, res) => { 34 | const { name, email, password } = req.body; 35 | 36 | const user = new UserModel(name, email, password); 37 | 38 | this.dbConn 39 | .saveUser(user) 40 | .then((user) => { 41 | res.send(user); 42 | }) 43 | .catch((error) => { 44 | res.send(error); 45 | }); 46 | }; 47 | 48 | update = (req, res) => { 49 | const id = req.params.id; 50 | const content = req.body; 51 | 52 | this.dbConn 53 | .updateUser(id, content) 54 | .then((result) => { 55 | res.send(result); 56 | }) 57 | .catch((error) => { 58 | res.send(error); 59 | }); 60 | }; 61 | 62 | remove = (req, res) => { 63 | const id = req.params.id; 64 | 65 | this.dbConn 66 | .deleteUser(id) 67 | .then((result) => { 68 | res.send(result); 69 | }) 70 | .catch((error) => { 71 | res.send(error); 72 | }); 73 | }; 74 | } 75 | 76 | module.exports = new UserController(dao); 77 | -------------------------------------------------------------------------------- /src/controllers/taskController.js: -------------------------------------------------------------------------------- 1 | const TaskModel = require("../models/taskModel"); 2 | const dao = require("../dao/memoryTaskDAO"); 3 | 4 | class TaskController { 5 | constructor(dbConn) { 6 | this.dbConn = dbConn; 7 | } 8 | 9 | show = (req, res) => { 10 | const id = req.params.id; 11 | 12 | this.dbConn 13 | .getTaskByID(id) 14 | .then((task) => { 15 | res.send(task); 16 | }) 17 | .catch((error) => { 18 | res.send(error); 19 | }); 20 | }; 21 | 22 | index = (req, res) => { 23 | this.dbConn 24 | .getAllTasks() 25 | .then((task) => { 26 | res.send(task); 27 | }) 28 | .catch((error) => { 29 | res.send(error); 30 | }); 31 | }; 32 | 33 | save = (req, res) => { 34 | const { title, description, status, user_id } = req.body; 35 | 36 | const task = new TaskModel(title, description, status, user_id); 37 | 38 | this.dbConn 39 | .saveTask(task) 40 | .then((task) => { 41 | res.send(task); 42 | }) 43 | .catch((error) => { 44 | res.send(error); 45 | }); 46 | }; 47 | 48 | update = (req, res) => { 49 | const id = req.params.id; 50 | const content = req.body; 51 | 52 | this.dbConn 53 | .updateTask(id, content) 54 | .then((result) => { 55 | res.send(result); 56 | }) 57 | .catch((error) => { 58 | res.send(error); 59 | }); 60 | }; 61 | 62 | remove = (req, res) => { 63 | const id = req.params.id; 64 | 65 | this.dbConn 66 | .deleteTask(id) 67 | .then((result) => { 68 | res.send(result); 69 | }) 70 | .catch((error) => { 71 | res.send(error); 72 | }); 73 | }; 74 | } 75 | 76 | module.exports = new TaskController(dao); 77 | -------------------------------------------------------------------------------- /src/dao/userDAO.js: -------------------------------------------------------------------------------- 1 | const db = require("../infra/sqlite-db"); 2 | 3 | const { USERS_TABLE: TABLE } = require("../utils/appConfig"); 4 | 5 | class UserDAO { 6 | constructor(dbConn) { 7 | this.dbConn = dbConn; 8 | } 9 | 10 | getUserByID = (id) => { 11 | return new Promise((resolve, reject) => { 12 | this.dbConn.all( 13 | `SELECT * FROM ${TABLE} WHERE id like ?`, 14 | id, 15 | (error, results) => { 16 | console.log(id); 17 | if (error) { 18 | reject("Error: " + error); 19 | } else { 20 | resolve(results); 21 | } 22 | } 23 | ); 24 | }); 25 | }; 26 | 27 | getAllUsers = () => { 28 | return new Promise((resolve, reject) => { 29 | this.dbConn.all(`SELECT * FROM ${TABLE}`, (error, results) => { 30 | if (error) { 31 | reject("Algo de errado não esta certo!"); 32 | } else { 33 | resolve(results); 34 | } 35 | }); 36 | }); 37 | }; 38 | 39 | saveUser = (user) => { 40 | return new Promise((resolve, reject) => { 41 | this.dbConn.run( 42 | `INSERT INTO ${TABLE} VALUES (?, ?, ?, ?)`, 43 | user.id, 44 | user.name, 45 | user.email, 46 | user.password, 47 | (error) => { 48 | if (error) { 49 | reject("Error: " + error); 50 | } else { 51 | resolve(true); 52 | } 53 | } 54 | ); 55 | }); 56 | }; 57 | 58 | updateUser = (id, user) => { 59 | return new Promise((resolve, reject) => { 60 | this.dbConn.run( 61 | `UPDATE ${TABLE} SET name = ?, email = ?, password = ? WHERE id = ?`, 62 | user.name, 63 | user.email, 64 | user.password, 65 | id, 66 | (error) => { 67 | if (error) { 68 | reject(error); 69 | } else { 70 | resolve(true); 71 | } 72 | } 73 | ); 74 | }); 75 | }; 76 | 77 | deleteUser = (id) => { 78 | return new Promise((resolve, reject) => { 79 | this.dbConn.run(`DELETE FROM ${TABLE} WHERE id = ?`, id, (error) => { 80 | if (error) { 81 | reject(error); 82 | } else { 83 | resolve(true); 84 | } 85 | }); 86 | }); 87 | }; 88 | } 89 | 90 | module.exports = new UserDAO(db); 91 | -------------------------------------------------------------------------------- /src/dao/taskDAO.js: -------------------------------------------------------------------------------- 1 | const db = require("../infra/sqlite-db"); 2 | 3 | const { TASKS_TABLE: TABLE } = require("../utils/appConfig"); 4 | 5 | class TaskDAO { 6 | constructor(dbConn) { 7 | this.dbConn = dbConn; 8 | } 9 | 10 | getTaskByID = (id) => { 11 | return new Promise((resolve, reject) => { 12 | this.dbConn.all( 13 | `SELECT * FROM ${TABLE} WHERE id like ?`, 14 | id, 15 | (error, results) => { 16 | console.log(id); 17 | if (error) { 18 | reject("Error: " + error); 19 | } else { 20 | resolve(results); 21 | } 22 | } 23 | ); 24 | }); 25 | }; 26 | 27 | getAllTasks = () => { 28 | return new Promise((resolve, reject) => { 29 | this.dbConn.all(`SELECT * FROM ${TABLE}`, (error, results) => { 30 | if (error) { 31 | reject("Algo de errado não esta certo!"); 32 | } else { 33 | resolve(results); 34 | } 35 | }); 36 | }); 37 | }; 38 | 39 | saveTask = (task) => { 40 | return new Promise((resolve, reject) => { 41 | console.log(task); 42 | this.dbConn.run( 43 | `INSERT INTO ${TABLE} VALUES (?, ?, ?, ?, ?, ?)`, 44 | task.id, 45 | task.title, 46 | task.description, 47 | task.status, 48 | task.user_id, 49 | task.created_at, 50 | (error) => { 51 | if (error) { 52 | reject("Error: " + error); 53 | } else { 54 | resolve(true); 55 | } 56 | } 57 | ); 58 | }); 59 | }; 60 | 61 | updateTask = (id, task) => { 62 | return new Promise((resolve, reject) => { 63 | this.dbConn.run( 64 | `UPDATE ${TABLE} SET title = ?, description = ?, status = ?, user_id = ? WHERE id = ?`, 65 | task.title, 66 | task.description, 67 | task.status, 68 | task.user_id, 69 | id, 70 | (error) => { 71 | if (error) { 72 | reject(error); 73 | } else { 74 | resolve(true); 75 | } 76 | } 77 | ); 78 | }); 79 | }; 80 | 81 | deleteTask = (id) => { 82 | return new Promise((resolve, reject) => { 83 | this.dbConn.run(`DELETE FROM ${TABLE} WHERE id = ?`, id, (error) => { 84 | if (error) { 85 | reject(error); 86 | } else { 87 | resolve(true); 88 | } 89 | }); 90 | }); 91 | }; 92 | } 93 | 94 | module.exports = new TaskDAO(db); 95 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/node 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=node 4 | 5 | ### Node ### 6 | # Logs 7 | logs 8 | *.log 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | lerna-debug.log* 13 | .pnpm-debug.log* 14 | 15 | # Diagnostic reports (https://nodejs.org/api/report.html) 16 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 17 | 18 | # Runtime data 19 | pids 20 | *.pid 21 | *.seed 22 | *.pid.lock 23 | 24 | # Directory for instrumented libs generated by jscoverage/JSCover 25 | lib-cov 26 | 27 | # Coverage directory used by tools like istanbul 28 | coverage 29 | *.lcov 30 | 31 | # nyc test coverage 32 | .nyc_output 33 | 34 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 35 | .grunt 36 | 37 | # Bower dependency directory (https://bower.io/) 38 | bower_components 39 | 40 | # node-waf configuration 41 | .lock-wscript 42 | 43 | # Compiled binary addons (https://nodejs.org/api/addons.html) 44 | build/Release 45 | 46 | # Dependency directories 47 | node_modules/ 48 | jspm_packages/ 49 | 50 | # Snowpack dependency directory (https://snowpack.dev/) 51 | web_modules/ 52 | 53 | # TypeScript cache 54 | *.tsbuildinfo 55 | 56 | # Optional npm cache directory 57 | .npm 58 | 59 | # Optional eslint cache 60 | .eslintcache 61 | 62 | # Microbundle cache 63 | .rpt2_cache/ 64 | .rts2_cache_cjs/ 65 | .rts2_cache_es/ 66 | .rts2_cache_umd/ 67 | 68 | # Optional REPL history 69 | .node_repl_history 70 | 71 | # Output of 'npm pack' 72 | *.tgz 73 | 74 | # Yarn Integrity file 75 | .yarn-integrity 76 | 77 | # dotenv environment variables file 78 | .env 79 | .env.test 80 | .env.production 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # Serverless directories 104 | .serverless/ 105 | 106 | # FuseBox cache 107 | .fusebox/ 108 | 109 | # DynamoDB Local files 110 | .dynamodb/ 111 | 112 | # TernJS port file 113 | .tern-port 114 | 115 | # Stores VSCode versions used for testing VSCode extensions 116 | .vscode-test 117 | 118 | # yarn v2 119 | .yarn/cache 120 | .yarn/unplugged 121 | .yarn/build-state.yml 122 | .yarn/install-state.gz 123 | .pnp.* 124 | 125 | ### Node Patch ### 126 | # Serverless Webpack directories 127 | .webpack/ 128 | 129 | # Optional stylelint cache 130 | .stylelintcache 131 | 132 | # SvelteKit build / generate output 133 | .svelte-kit 134 | 135 | # End of https://www.toptal.com/developers/gitignore/api/node 136 | 137 | .vscode 138 | *.db -------------------------------------------------------------------------------- /src/infra/schemasAndData.js: -------------------------------------------------------------------------------- 1 | /* 2 | Esse arquivo deve ser executado apenas uma vez para que a o banco seja criado e populado 3 | */ 4 | const { v4: uuid } = require("uuid"); 5 | const sha256 = require("js-sha256"); 6 | const sqlite3 = require("sqlite3").verbose(); 7 | 8 | const db = new sqlite3.Database("src/infra/database.db"); 9 | 10 | //==== Usuários 11 | const USUARIOS_SCHEMA = ` 12 | CREATE TABLE IF NOT EXISTS "users" ( 13 | "id" CHAR(36) PRIMARY KEY, 14 | "name" varchar(64), 15 | "email" varchar(64), 16 | "password" varchar(64) 17 | );`; 18 | 19 | const TAREFAS_SCHEMA = ` 20 | CREATE TABLE IF NOT EXISTS "tasks" ( 21 | "id" char(36) PRIMARY KEY, 22 | "title" VARCHAR(64), 23 | "description" TEXT, 24 | "status" VARCHAR(32), 25 | "created_at" VARCHAR(32), 26 | "user_id" CHAR(36), 27 | FOREIGN KEY(user_id) REFERENCES user(id) 28 | );`; 29 | 30 | user_id_1 = uuid(); 31 | user_id_2 = uuid(); 32 | user_id_3 = uuid(); 33 | 34 | user_pwd_1 = sha256((Math.random() + 1).toString(36).substring(2)); 35 | user_pwd_2 = sha256((Math.random() + 1).toString(36).substring(2)); 36 | user_pwd_3 = sha256((Math.random() + 1).toString(36).substring(2)); 37 | 38 | const ADD_USUARIOS_DATA = ` 39 | INSERT INTO users (id, name, email, password) 40 | VALUES 41 | ('${user_id_1}', 'Eugênio Oliveira', 'eugenio.oliveira@bol.com.br', '${user_pwd_1}'), 42 | ('${user_id_2}', 'Olívia Ribeiro', 'olivia.ribeiro@gmail.com', '${user_pwd_2}'), 43 | ('${user_id_3}', 'Mirtes Faria Lima', 'mirtes_fl@yahoo.com', '${user_pwd_3}') 44 | `; 45 | 46 | const ADD_TAREFAS_DATA = `INSERT INTO tasks (id, title, description, status, created_at, user_id) 47 | VALUES 48 | ('${uuid()}', 'Yoga', 'Fazer yoga segunda e quarta', 'Continuo', '2021-01-10', '${user_id_2}'), 49 | ('${uuid()}', 'Médico', 'Consulta com Dr. Ayrton sexta', 'TODO', '2021-01-13', '${user_id_2}'), 50 | ('${uuid()}', 'Pagar contas', 'Pagar boletos de água e luz', 'DOING', '2021-01-02', '${user_id_2}'), 51 | ('${uuid()}', 'Mercado', 'Pegar lista na geladeira e fazer compras', 'TODO', '2021-01-08', '${user_id_2}'), 52 | ('${uuid()}', 'Dentista', 'Consulta com Dra Andreia sexta', 'TODO', '2021-01-11', '${user_id_2}'), 53 | ('${uuid()}', 'Pagar financiamento carro', 'Pagar parcela do mês do financiamento', 'Contínuo', '2021-01-05', '${user_id_3}') 54 | `; 55 | 56 | function criaTabelaUsr() { 57 | db.run(USUARIOS_SCHEMA, (error) => { 58 | if (error) console.log("Erro ao criar tabela de usuários"); 59 | }); 60 | } 61 | 62 | function populaTabelaUsr() { 63 | db.run(ADD_USUARIOS_DATA, (error) => { 64 | if (error) console.log("Erro ao popular tabela de usuários", error); 65 | }); 66 | } 67 | 68 | //==== Tarefas 69 | 70 | function criaTabelaTarefas() { 71 | db.run(TAREFAS_SCHEMA, (error) => { 72 | if (error) console.log("Erro ao criar tabela de Tarefas", error); 73 | }); 74 | } 75 | 76 | function populaTabelaTarefas() { 77 | db.run(ADD_TAREFAS_DATA, (error) => { 78 | if (error) console.log("Erro ao popular tabela de Tarefas"); 79 | }); 80 | } 81 | 82 | db.serialize(() => { 83 | criaTabelaUsr(); 84 | populaTabelaUsr(); 85 | criaTabelaTarefas(); 86 | populaTabelaTarefas(); 87 | }); 88 | --------------------------------------------------------------------------------