refactor: use sequelize replace better-sqlite3

This commit is contained in:
kangfenmao
2024-09-12 17:54:50 +08:00
parent 9268ab845e
commit 4f250cdcb1
22 changed files with 1728 additions and 1342 deletions
+34
View File
@@ -0,0 +1,34 @@
import Logger from 'electron-log'
import path from 'path'
import { Sequelize } from 'sequelize'
import { SequelizeStorage, Umzug } from 'umzug'
import { DATA_PATH } from '../config'
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: path.join(DATA_PATH, 'data.db'),
logging: false
})
const umzug = new Umzug({
migrations: { glob: 'src/main/database/migrations/*.js' },
context: sequelize.getQueryInterface(),
storage: new SequelizeStorage({ sequelize, modelName: 'Migration', tableName: 'migrations' }),
logger: Logger
})
export async function initDatabase() {
try {
await sequelize.authenticate()
Logger.log('Database connection has been established successfully.')
// Run migrations
await umzug.up()
Logger.log('Migrations have been executed successfully.')
} catch (error) {
Logger.error('Migrations failed to execute:', error)
}
}
export default sequelize
@@ -0,0 +1,48 @@
const { Sequelize } = require('sequelize')
async function up({ context: queryInterface }) {
await queryInterface.createTable('files', {
id: {
type: Sequelize.TEXT,
primaryKey: true
},
name: {
type: Sequelize.TEXT,
allowNull: false
},
file_name: {
type: Sequelize.TEXT,
allowNull: false
},
path: {
type: Sequelize.TEXT,
allowNull: false
},
size: {
type: Sequelize.INTEGER,
allowNull: false
},
ext: {
type: Sequelize.TEXT,
allowNull: false
},
type: {
type: Sequelize.TEXT,
allowNull: false
},
created_at: {
type: Sequelize.TEXT,
allowNull: false
},
count: {
type: Sequelize.INTEGER,
defaultValue: 1
}
})
}
async function down({ context: queryInterface }) {
await queryInterface.dropTable('files')
}
module.exports = { up, down }
+41
View File
@@ -0,0 +1,41 @@
import { DataTypes, Model } from 'sequelize'
import { FileMetadata, FileType } from '../../../renderer/src/types'
import sequelize from '..'
class FileModel extends Model<FileMetadata> implements FileMetadata {
public id!: string
public name!: string
public file_name!: string
public path!: string
public size!: number
public ext!: string
public type!: FileType
public created_at!: Date
public count!: number
}
FileModel.init(
{
id: {
type: DataTypes.UUID,
primaryKey: true
},
name: DataTypes.STRING,
file_name: DataTypes.STRING,
path: DataTypes.STRING,
size: DataTypes.INTEGER,
ext: DataTypes.STRING,
type: DataTypes.STRING,
created_at: DataTypes.DATE,
count: DataTypes.INTEGER
},
{
sequelize,
modelName: 'File',
tableName: 'files',
timestamps: false
}
)
export default FileModel