set up sqlite

This commit is contained in:
Takeshi Kimata
2024-02-04 18:38:48 +09:00
parent cdaa99b89a
commit 45f64df1f9
12 changed files with 4227 additions and 112 deletions

1
backend/.gitignore vendored
View File

@@ -1,2 +1,3 @@
node_modules/
.env
database.sqlite

View File

@@ -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
```

View 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"
}
}

View 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
View 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;

View 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

File diff suppressed because it is too large Load Diff

View File

@@ -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
View File

@@ -0,0 +1,4 @@
#!/bin/bash
npx sequelize db:migrate:undo:all
echo "Dropped 'Project' table."

View File

@@ -0,0 +1,4 @@
#!/bin/bash
npx sequelize db:migrate
echo "Migration complete."

3
backend/scripts/seed.sh Normal file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
npx sequelize db:seed:all

30
backend/seeders/seed.js Normal file
View 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
},
};