You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

86 lines
2.1 KiB

import { loadLightning } from './lightning'
import {sequelize, models} from '../models'
import { exec } from 'child_process'
const USER_VERSION = 1
const setupDatabase = async () => {
console.log('=> [db] starting setup...')
await setVersion()
try {
await sequelize.sync()
console.log("=> [db] done syncing")
} catch(e) {
console.log("db sync failed",e)
}
await migrate()
setupOwnerContact()
console.log('=> [db] setup done')
}
async function setVersion(){
try {
await sequelize.query(`PRAGMA user_version = ${USER_VERSION}`)
} catch(e) {
console.log('=> setVersion failed',e)
}
}
async function migrate(){
try {
await sequelize.query(`alter table sphinx_invites add invoice text`)
} catch(e) {
//console.log('=> migrate failed',e)
}
}
const setupOwnerContact = async () => {
const owner = await models.Contact.findOne({ where: { isOwner: true }})
if (!owner) {
const lightning = await loadLightning()
lightning.getInfo({}, async (err, info) => {
if (err) {
console.log('[db] error creating node owner due to lnd failure', err)
} else {
try {
const one = await models.Contact.findOne({ where: { id: 1 }})
if(!one){
const contact = await models.Contact.create({
id: 1,
publicKey: info.identity_pubkey,
isOwner: true,
authToken: null
})
console.log('[db] created node owner contact, id:', contact.id)
}
} catch(error) {
console.log('[db] error creating owner contact', error)
}
}
})
}
}
const runMigrations = async () => {
await new Promise((resolve, reject) => {
const migrate: any = exec('node_modules/.bin/sequelize db:migrate',
{env: process.env},
(err, stdout, stderr) => {
if (err) {
reject(err);
} else {
resolve();
}
}
);
// Forward stdout+stderr to this process
migrate.stdout.pipe(process.stdout);
migrate.stderr.pipe(process.stderr);
});
}
export { setupDatabase, setupOwnerContact, runMigrations }