import {Knex} from 'knex'; export async function up(knex:Knex) { await knex.schema.createTable("users",(b)=>{ b.string("username").primary().comment("user's login id"); b.string("password_hash",64).notNullable(); b.string("password_salt",64).notNullable(); }); await knex.schema.createTable("document",(b)=>{ b.increments("id").primary(); b.string("title").notNullable(); b.string("content_type",16).notNullable(); b.string("basepath",256).notNullable().comment("directory path for resource"); b.string("filename",256).notNullable().comment("filename"); b.string("content_hash").nullable(); b.json("additional").nullable(); b.integer("created_at").notNullable(); b.integer("deleted_at"); b.index("content_type","content_type_index"); }); await knex.schema.createTable("tags", (b)=>{ b.string("name").primary(); b.text("description"); }); await knex.schema.createTable("doc_tag_relation",(b)=>{ b.integer("doc_id").unsigned().notNullable(); b.string("tag_name").notNullable(); b.foreign("doc_id").references("document.id"); b.foreign("tag_name").references("tags.name"); b.primary(["doc_id","tag_name"]); }); await knex.schema.createTable("permissions",b=>{ b.string('username').notNullable(); b.string("name").notNullable(); b.primary(["username","name"]); b.foreign('username').references('users.username'); }); //create admin account. await knex.insert({ username:"admin", password_hash:"unchecked", password_salt:"unchecked" }).into('users'); }; export async function down(knex:Knex) { //throw new Error('Downward migrations are not supported. Restore from backup.'); await knex.schema.dropTable("users"); await knex.schema.dropTable("document"); await knex.schema.dropTable("tags"); await knex.schema.dropTable("document_tag_relation"); await knex.schema.dropTable("permissions"); };