UNPKG

2.98 kBJavaScriptView Raw
1exports.up = function(knex) {
2 return knex.raw('CREATE EXTENSION IF NOT EXISTS "uuid-ossp"')
3 .then(function() {
4 return knex.schema
5
6 /**
7 * User
8 *
9 */
10 .createTable('user', function(table) {
11 table.uuid('id').primary().defaultTo(knex.raw('uuid_generate_v4()'));
12 table.string('email').notNullable().unique();
13 table.dateTime('created_at').defaultTo(knex.fn.now());
14 table.dateTime('updated_at').defaultTo(knex.fn.now());
15 })
16
17 /**
18 * Tag
19 *
20 */
21 .createTable('tag', function(table) {
22 table.uuid('id').primary().defaultTo(knex.raw('uuid_generate_v4()'));
23 table.string('name').notNullable().unique();
24 table.dateTime('created_at').defaultTo(knex.fn.now());
25 table.dateTime('updated_at').defaultTo(knex.fn.now());
26 })
27
28 /**
29 * Media
30 *
31 */
32 .createTable('media', function(table) {
33 table.uuid('id').primary().defaultTo(knex.raw('uuid_generate_v4()'));
34 table.enu('type', ['image', 'video']).notNullable();
35 table.dateTime('created_at').defaultTo(knex.fn.now());
36 table.dateTime('updated_at').defaultTo(knex.fn.now());
37 })
38
39 /**
40 * Post
41 *
42 */
43 .createTable('post', function(table) {
44 table.uuid('id').primary().defaultTo(knex.raw('uuid_generate_v4()'));
45 table.string('title').notNullable();
46 table.uuid('media_id').references('media.id').onDelete('CASCADE');
47 table.uuid('user_id').notNullable().references('user.id').onDelete('CASCADE');
48 table.dateTime('created_at').defaultTo(knex.fn.now());
49 table.dateTime('updated_at').defaultTo(knex.fn.now());
50 })
51 /*
52 .createTable('post_item', function(table) {
53 table.uuid('id').primary().defaultTo(knex.raw('uuid_generate_v4()'));
54 table.string('title').notNullable();
55 table.string('content');
56 table.string('button_label');
57 table.string('button_url');
58 table.uuid('media_id').references('media.id').onDelete('CASCADE');
59 table.uuid('post_id').notNullable().references('post.id').onDelete('CASCADE');
60 table.dateTime('created_at').defaultTo(knex.fn.now());
61 table.dateTime('updated_at').defaultTo(knex.fn.now());
62 })
63 */
64
65 /**
66 * Many to Many
67 *
68 */
69 .createTable('post_tag', function(table) {
70 table.uuid('post_id').references('post.id').onDelete('CASCADE');
71 table.uuid('tag_id').references('tag.id').onDelete('CASCADE');
72 })
73 /*
74 .createTable('user_tag', function(table) {
75 table.uuid('user_id').references('user.id').onDelete('CASCADE');
76 table.uuid('tag_id').references('tag.id').onDelete('CASCADE');
77 })
78 */
79
80 });
81};
82
83exports.down = function(knex) {
84 return knex.schema
85 .dropTable('post_tag')
86 //.dropTable('user_tag')
87 //.dropTable('post_item')
88 .dropTable('post')
89 .dropTable('media')
90 .dropTable('tag')
91 .dropTable('user');
92};