mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-03-01 13:39:41 +00:00
Sequelize and sqlite init with test user model
This commit is contained in:
parent
a2d4a4a906
commit
b8ab72a141
6 changed files with 2452 additions and 19 deletions
63
server/Database.js
Normal file
63
server/Database.js
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
const Path = require('path')
|
||||
const { Sequelize } = require('sequelize')
|
||||
|
||||
const Logger = require('./Logger')
|
||||
|
||||
class Database {
|
||||
constructor() {
|
||||
this.sequelize = null
|
||||
}
|
||||
|
||||
async init() {
|
||||
if (!await this.connect()) {
|
||||
throw new Error('Database connection failed')
|
||||
}
|
||||
|
||||
await this.buildModels()
|
||||
Logger.info(`[Database] Db initialized`, Object.keys(this.sequelize.models))
|
||||
}
|
||||
|
||||
async connect() {
|
||||
const dbPath = Path.join(global.ConfigPath, 'database.sqlite')
|
||||
Logger.info(`[Database] Initializing db at "${dbPath}"`)
|
||||
this.sequelize = new Sequelize({
|
||||
dialect: 'sqlite',
|
||||
storage: dbPath
|
||||
})
|
||||
|
||||
try {
|
||||
await this.sequelize.authenticate()
|
||||
Logger.info(`[Database] Db connection was successful`)
|
||||
return true
|
||||
} catch (error) {
|
||||
Logger.error(`[Database] Failed to connect to db`, error)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
buildModels() {
|
||||
require('./models/User')(this.sequelize)
|
||||
|
||||
return this.sequelize.sync()
|
||||
}
|
||||
|
||||
async createTestUser() {
|
||||
const User = this.sequelize.models.User
|
||||
|
||||
let user = await User.findOne({
|
||||
where: {
|
||||
username: 'Tester'
|
||||
}
|
||||
})
|
||||
|
||||
if (user) {
|
||||
Logger.info(`[Database] Tester user was found`, user.toJSON())
|
||||
} else {
|
||||
user = await User.create({ username: 'Tester' })
|
||||
Logger.info(`[Database] Created Tester user`, user.toJSON())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module.exports = new Database()
|
||||
|
|
@ -17,6 +17,7 @@ const Auth = require('./Auth')
|
|||
const Watcher = require('./Watcher')
|
||||
const Scanner = require('./scanner/Scanner')
|
||||
const Db = require('./Db')
|
||||
const Database = require('./Database')
|
||||
const SocketAuthority = require('./SocketAuthority')
|
||||
|
||||
const ApiRouter = require('./routers/ApiRouter')
|
||||
|
|
@ -110,6 +111,10 @@ class Server {
|
|||
await this.db.init()
|
||||
}
|
||||
|
||||
// TODO: Test new db connection
|
||||
await Database.init()
|
||||
await Database.createTestUser()
|
||||
|
||||
// Create token secret if does not exist (Added v2.1.0)
|
||||
if (!this.db.serverSettings.tokenSecret) {
|
||||
await this.auth.initTokenSecret()
|
||||
|
|
|
|||
14
server/models/User.js
Normal file
14
server/models/User.js
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
const { DataTypes, Model } = require('sequelize')
|
||||
|
||||
module.exports = (sequelize) => {
|
||||
class User extends Model { }
|
||||
|
||||
User.init({
|
||||
username: DataTypes.STRING
|
||||
}, {
|
||||
sequelize,
|
||||
modelName: 'User'
|
||||
})
|
||||
|
||||
return User
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue