Shinobi/libs/database/preQueries.js

188 lines
9.8 KiB
JavaScript

module.exports = function(s,config){
const {
currentTimestamp,
createTable,
addColumn,
isMySQL,
} = require('./utils.js')(s,config)
s.preQueries = async function(){
await createTable('Users',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'uid', length: 50, type: 'string'},
{name: 'auth', length: 50, type: 'string'},
{name: 'mail', length: 100, type: 'string'},
{name: 'pass', length: 100, type: 'string'},
{name: 'accountType', type: 'integer', length: 1, defaultTo: 0},
{name: 'details', type: 'longtext'},
// UNIQUE KEY `mail` (`mail`)
{name: 'mail', type: 'unique'},
]);
await createTable('API',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'uid', length: 50, type: 'string'},
{name: 'ip', type: 'string'},
{name: 'code', length: 100, type: 'string'},
{name: 'details', type: 'text'},
{name: 'time', type: 'timestamp', defaultTo: currentTimestamp()},
]);
await createTable('LoginTokens',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'loginId', length: 255, type: 'string'},
{name: 'type', length: 25, type: 'string'},
{name: 'ke', length: 50, type: 'string'},
{name: 'uid', length: 50, type: 'string'},
{name: 'name', length: 50, type: 'string', defaultTo: 'Unknown'},
// UNIQUE KEY `logintokens_loginid_unique` (`loginId`)
{name: 'loginId', type: 'unique'},
]);
await createTable('Files',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'mid', length: 100, type: 'string'},
{name: 'name', length: 100, type: 'string'},
{name: 'size', type: 'bigint'},
{name: 'details', type: 'text'},
{name: 'status', type: 'integer', length: 1, defaultTo: 0},
{name: 'archive', type: 'tinyint', length: 1, defaultTo: 0},
{name: 'time', type: 'timestamp', defaultTo: currentTimestamp()},
]);
await createTable('Videos',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'mid', length: 100, type: 'string'},
{name: 'ext', type: 'string', length: 10, defaultTo: 'mp4'},
{name: 'size', type: 'bigint'},
{name: 'status', type: 'tinyint', length: 1, defaultTo: 0},
{name: 'archive', type: 'tinyint', length: 1, defaultTo: 0},
{name: 'objects', length: 510, type: 'string'},
{name: 'saveDir', length: 255, type: 'string'},
{name: 'time', type: 'timestamp', defaultTo: currentTimestamp()},
{name: 'end', type: 'timestamp', defaultTo: currentTimestamp()},
{name: 'details', type: 'text'},
// KEY `videos_index` (`time`)
{name: ['time'], type: 'index', length: 'videos_index'},
]);
await createTable('Cloud Videos',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'mid', length: 100, type: 'string'},
{name: 'href', length: 50, type: 'text'},
{name: 'size', type: 'bigint'},
{name: 'details', type: 'text'},
{name: 'status', type: 'integer', length: 1, defaultTo: 0},
{name: 'archive', type: 'tinyint', length: 1, defaultTo: 0},
{name: 'objects', length: 510, type: 'string'},
{name: 'time', type: 'timestamp', defaultTo: currentTimestamp()},
{name: 'end', type: 'timestamp', defaultTo: currentTimestamp()},
]);
await createTable('Events',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'mid', length: 100, type: 'string'},
{name: 'details', type: 'text'},
{name: 'archive', type: 'tinyint', length: 1, defaultTo: 0},
{name: 'time', type: 'timestamp', defaultTo: currentTimestamp()},
// KEY `events_index` (`ke`,`mid`,`time`)
{name: ['ke', 'mid', 'time'], type: 'index', length: 'events_index'},
]);
await createTable('Events Counts',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'mid', length: 100, type: 'string'},
{name: 'tag', length: 30, type: 'string'},
{name: 'details', type: 'text'},
{name: 'count', type: 'integer', length: 10, defaultTo: 1},
{name: 'time', type: 'timestamp', defaultTo: currentTimestamp()},
{name: 'end', type: 'timestamp', defaultTo: currentTimestamp()},
]);
await createTable('Timelapse Frames',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'mid', length: 100, type: 'string'},
{name: 'filename', length: 50, type: 'string'},
{name: 'time', type: 'timestamp', defaultTo: currentTimestamp()},
{name: 'size', type: 'bigint'},
{name: 'archive', length: 1, type: 'tinyint', defaultTo: 0},
{name: 'saveDir', length: 255, type: 'string'},
{name: 'details', type: 'text'},
// KEY `timelapseframes_index` (`ke`,`mid`,`filename`)
{name: ['ke', 'mid', 'filename'], type: 'index', length: 'timelapseframes_index'},
]);
await createTable('Cloud Timelapse Frames',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'mid', length: 100, type: 'string'},
{name: 'href', type: 'text'},
{name: 'filename', length: 50, type: 'string'},
{name: 'time', type: 'timestamp', defaultTo: currentTimestamp()},
{name: 'size', type: 'bigint'},
{name: 'details', type: 'text'},
]);
await createTable('Logs',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'mid', length: 100, type: 'string'},
{name: 'info', type: 'text'},
{name: 'time', type: 'timestamp', defaultTo: currentTimestamp()},
// KEY `logs_index` (`ke`,`mid`,`time`)
{name: ['ke', 'mid', 'time'], type: 'index', length: 'logs_index'},
]);
await createTable('Monitors',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'mid', length: 100, type: 'string'},
{name: 'name', length: 100, type: 'string'},
{name: 'details', type: 'longtext'},
{name: 'type', type: 'string', length: 25, defaultTo: 'h264'},
{name: 'ext', type: 'string', length: 10, defaultTo: 'mp4'},
{name: 'protocol', type: 'string', length: 10, defaultTo: 'rtsp'},
{name: 'host', type: 'string', length: 255, defaultTo: '0.0.0.0'},
{name: 'path', type: 'string', length: 255, defaultTo: '/'},
{name: 'port', type: 'integer', length: 8, defaultTo: 554},
{name: 'fps', type: 'integer', length: 8},
{name: 'mode', type: 'string', length: 15},
{name: 'width', type: 'integer', length: 11},
{name: 'height', type: 'integer', length: 11},
// KEY `monitors_index` (`ke`,`mode`,`type`,`ext`)
{name: ['ke', 'mid'], type: 'index', length: 'monitors_index'},
]);
await createTable('Presets',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'name', length: 100, type: 'string'},
{name: 'type', length: 50, type: 'string'},
{name: 'details', type: 'text'},
]);
await createTable('Schedules',[
isMySQL ? {name: 'utf8', type: 'charset'} : null,
isMySQL ? {name: 'utf8_general_ci', type: 'collate'} : null,
{name: 'ke', length: 50, type: 'string'},
{name: 'name', length: 100, type: 'string'},
{name: 'details', type: 'text'},
{name: 'start', length: 10, type: 'string'},
{name: 'end', length: 10, type: 'string'},
{name: 'enabled', type: 'integer', length: 1, defaultTo: 1},
]);
// additional requirements for older installs
await require('./migrate/2022-08-22.js')(s,config)
await require('./migrate/2022-12-18.js')(s,config)
await require('./migrate/2023-03-11.js')(s,config)
delete(s.preQueries)
}
}