set up sqlite
This commit is contained in:
1
backend/.gitignore
vendored
1
backend/.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
.env
|
.env
|
||||||
|
database.sqlite
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
- Node.js
|
- Node.js
|
||||||
- Express
|
- Express
|
||||||
- MySQL
|
- SQLite
|
||||||
|
|
||||||
## Install dependencies
|
## Install dependencies
|
||||||
|
|
||||||
@@ -12,8 +12,28 @@
|
|||||||
npm install
|
npm install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Set up database
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run migrate
|
||||||
|
```
|
||||||
|
|
||||||
## Run the development server
|
## Run the development server
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
node dev
|
npm run start
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Database operation command
|
||||||
|
|
||||||
|
### drop table
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run drop
|
||||||
|
```
|
||||||
|
|
||||||
|
### add seed data
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run seed
|
||||||
|
```
|
||||||
14
backend/config/config.json
Normal file
14
backend/config/config.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"development": {
|
||||||
|
"dialect": "sqlite",
|
||||||
|
"storage": "database.sqlite"
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"dialect": "sqlite",
|
||||||
|
"storage": "database.test.sqlite"
|
||||||
|
},
|
||||||
|
"production": {
|
||||||
|
"dialect": "sqlite",
|
||||||
|
"storage": "database.production.sqlite"
|
||||||
|
}
|
||||||
|
}
|
||||||
33
backend/migrations/20240204090345-create-projects.js
Normal file
33
backend/migrations/20240204090345-create-projects.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
up: async (queryInterface, Sequelize) => {
|
||||||
|
await queryInterface.createTable('Projects', {
|
||||||
|
id: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
primaryKey: true,
|
||||||
|
autoIncrement: true,
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
detail: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
createdAt: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
updatedAt: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
down: async (queryInterface, Sequelize) => {
|
||||||
|
await queryInterface.dropTable('Projects');
|
||||||
|
},
|
||||||
|
};
|
||||||
50
backend/models/index.js
Normal file
50
backend/models/index.js
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
const path = require("path");
|
||||||
|
const Sequelize = require("sequelize");
|
||||||
|
const process = require("process");
|
||||||
|
const basename = path.basename(__filename);
|
||||||
|
const env = process.env.NODE_ENV || "development";
|
||||||
|
const config = require(__dirname + "/../config/config.json")[env];
|
||||||
|
const db = {};
|
||||||
|
|
||||||
|
let sequelize;
|
||||||
|
if (config.use_env_variable) {
|
||||||
|
sequelize = new Sequelize(process.env[config.use_env_variable], config);
|
||||||
|
} else {
|
||||||
|
sequelize = new Sequelize(
|
||||||
|
config.database,
|
||||||
|
config.username,
|
||||||
|
config.password,
|
||||||
|
config
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.readdirSync(__dirname)
|
||||||
|
.filter((file) => {
|
||||||
|
return (
|
||||||
|
file.indexOf(".") !== 0 &&
|
||||||
|
file !== basename &&
|
||||||
|
file.slice(-3) === ".js" &&
|
||||||
|
file.indexOf(".test.js") === -1
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.forEach((file) => {
|
||||||
|
const model = require(path.join(__dirname, file))(
|
||||||
|
sequelize,
|
||||||
|
Sequelize.DataTypes
|
||||||
|
);
|
||||||
|
db[model.name] = model;
|
||||||
|
});
|
||||||
|
|
||||||
|
Object.keys(db).forEach((modelName) => {
|
||||||
|
if (db[modelName].associate) {
|
||||||
|
db[modelName].associate(db);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
db.sequelize = sequelize;
|
||||||
|
db.Sequelize = Sequelize;
|
||||||
|
|
||||||
|
module.exports = db;
|
||||||
14
backend/models/projects.js
Normal file
14
backend/models/projects.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
module.exports = (sequelize, DataTypes) => {
|
||||||
|
const Project = sequelize.define("Project", {
|
||||||
|
name: {
|
||||||
|
type: DataTypes.STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
detail: {
|
||||||
|
type: DataTypes.STRING,
|
||||||
|
allowNull: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return Project;
|
||||||
|
};
|
||||||
4155
backend/package-lock.json
generated
4155
backend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -5,12 +5,17 @@
|
|||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node index",
|
"start": "node index",
|
||||||
|
"migrate": "bash scripts/migrate.sh",
|
||||||
|
"seed": "bash scripts/seed.sh",
|
||||||
|
"drop": "bash scripts/drop.sh",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"mysql": "^2.18.1"
|
"sequelize": "^6.36.0",
|
||||||
|
"sequelize-cli": "^6.6.2",
|
||||||
|
"sqlite3": "^5.1.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
4
backend/scripts/drop.sh
Normal file
4
backend/scripts/drop.sh
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
npx sequelize db:migrate:undo:all
|
||||||
|
echo "Dropped 'Project' table."
|
||||||
4
backend/scripts/migrate.sh
Normal file
4
backend/scripts/migrate.sh
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
npx sequelize db:migrate
|
||||||
|
echo "Migration complete."
|
||||||
3
backend/scripts/seed.sh
Normal file
3
backend/scripts/seed.sh
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
npx sequelize db:seed:all
|
||||||
30
backend/seeders/seed.js
Normal file
30
backend/seeders/seed.js
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
up: async (queryInterface, Sequelize) => {
|
||||||
|
return queryInterface.bulkInsert('Projects', [
|
||||||
|
{
|
||||||
|
name: 'Project 1',
|
||||||
|
detail: 'Details of Project 1',
|
||||||
|
createdAt: new Date(),
|
||||||
|
updatedAt: new Date(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Project 2',
|
||||||
|
detail: 'Details of Project 2',
|
||||||
|
createdAt: new Date(),
|
||||||
|
updatedAt: new Date(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Project 3',
|
||||||
|
detail: 'Details of Project 3',
|
||||||
|
createdAt: new Date(),
|
||||||
|
updatedAt: new Date(),
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
|
||||||
|
down: async (queryInterface, Sequelize) => {
|
||||||
|
// do nothing
|
||||||
|
},
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user