set up sqlite
This commit is contained in:
1
backend/.gitignore
vendored
1
backend/.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
node_modules/
|
||||
.env
|
||||
database.sqlite
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
- Node.js
|
||||
- Express
|
||||
- MySQL
|
||||
- SQLite
|
||||
|
||||
## Install dependencies
|
||||
|
||||
@@ -12,8 +12,28 @@
|
||||
npm install
|
||||
```
|
||||
|
||||
## Set up database
|
||||
|
||||
```bash
|
||||
npm run migrate
|
||||
```
|
||||
|
||||
## Run the development server
|
||||
|
||||
```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;
|
||||
};
|
||||
4153
backend/package-lock.json
generated
4153
backend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -5,12 +5,17 @@
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"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"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"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