UNPKG

bookshelf-cascade-delete

Version:
135 lines (119 loc) 3.39 kB
/** * Export `recreateTables`. */ export function recreateTables(repository) { return repository.knex.schema .dropTableIfExists('Account') .dropTableIfExists('Comment') .dropTableIfExists('TagPost') .dropTableIfExists('Post') .dropTableIfExists('Tag') .dropTableIfExists('Author') .createTable('Author', table => { table.increments('author_id').primary(); table.string('name'); }) .createTable('Account', table => { table.increments('account_id').primary(); table.integer('authorId').unsigned().references('Author.author_id'); }) .createTable('Tag', table => { table.increments('tag_id').primary(); }) .createTable('Post', table => { table.increments('post_id').primary(); table.integer('authorId').unsigned().references('Author.author_id'); }) .createTable('TagPost', table => { table.integer('tagId').unsigned().references('Tag.tag_id'); table.integer('postId').unsigned().references('Post.post_id'); }) .createTable('Comment', table => { table.increments('comment_id').primary(); table.integer('postId').unsigned().references('Post.post_id'); }) .createTable('Commenter', table => { table.increments('commenter_id').primary(); table.integer('commentId').unsigned().references('Comment.comment_id'); }); } /** * Export `clearTables`. */ export async function clearTables(repository) { await repository.knex('Account').del(); await repository.knex('Commenter').del(); await repository.knex('Comment').del(); await repository.knex('TagPost').del(); await repository.knex('Post').del(); await repository.knex('Tag').del(); await repository.knex('Author').del(); } /** * Export `dropTables`. */ export function dropTables(repository) { return repository.knex.schema .dropTable('TagPost') .dropTable('Account') .dropTable('Commenter') .dropTable('Comment') .dropTable('Post') .dropTable('Tag') .dropTable('Author'); } /** * Export `fixtures`. */ export function fixtures(repository) { const Account = repository.Model.extend({ idAttribute: 'account_id', tableName: 'Account' }); const Commenter = repository.Model.extend({ idAttribute: 'commenter_id', tableName: 'Commenter' }); const Comment = repository.Model.extend({ commenter() { return this.hasOne(Commenter, 'commentId'); }, idAttribute: 'comment_id', tableName: 'Comment' }, { dependents: ['commenter'] }); const Tag = repository.Model.extend({ idAttribute: 'tag_id', tableName: 'Tag' }); const TagPost = repository.Model.extend({ idAttribute: null, tableName: 'TagPost' }); const Post = repository.Model.extend({ comments() { return this.hasMany(Comment, 'postId'); }, tags() { return this.belongsToMany(Tag, 'TagPost', 'postId', 'tagId'); }, idAttribute: 'post_id', tableName: 'Post' }, { dependents: ['comments', 'tags'] }); const Author = repository.Model.extend({ account() { return this.hasOne(Account, 'authorId'); }, idAttribute: 'author_id', posts() { return this.hasMany(Post, 'authorId'); }, tableName: 'Author' }, { dependents: ['account', 'posts'] }); return { Account, Author, Comment, Commenter, Post, Tag, TagPost }; }