diff --git a/src/database/config.ts b/src/database/config.ts new file mode 100644 index 0000000..2787592 --- /dev/null +++ b/src/database/config.ts @@ -0,0 +1,48 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 Jonas Lochmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import * as Sequelize from 'sequelize' +import { SequelizeAttributes } from './types' + +export interface ConfigAttributes { + id: string + value: string | null +} + +export type ConfigInstance = Sequelize.Instance & ConfigAttributes +export type ConfigModel = Sequelize.Model + +export const attributes: SequelizeAttributes = { + id: { + type: Sequelize.STRING, + allowNull: false, + validate: { + notEmpty: true + }, + primaryKey: true + }, + value: { + type: Sequelize.STRING, + allowNull: false + } +} + +export const createConfigModel = (sequelize: Sequelize.Sequelize): ConfigModel => sequelize.define('Config', attributes) + +export const configItemIds = { + statusMessage: 'status_message' +} diff --git a/src/database/migration/migrations/20190624-add-config-table.ts b/src/database/migration/migrations/20190624-add-config-table.ts new file mode 100644 index 0000000..2593132 --- /dev/null +++ b/src/database/migration/migrations/20190624-add-config-table.ts @@ -0,0 +1,35 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 Jonas Lochmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { QueryInterface, Sequelize } from 'sequelize' +import { attributes as configAttributes } from '../../config' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: 'EXCLUSIVE' + }, async (transaction) => { + await queryInterface.createTable('Configs', configAttributes, { transaction }) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: 'EXCLUSIVE' + }, async (transaction) => { + await queryInterface.dropTable('Configs', { transaction }) + }) +}