Skip to content

Commit c2252c0

Browse files
authored
Fix/groups table migration (#853)
* fix: rewrite create roles migration Simplified it and added a check to only insert if there are no roles * fix: insert default roles in seed file Seeds will empty the database so this is necessary to prevent foreign key errors when inserting into group_members * fix: add python dependency some npm packages will need python * refactor: use env variable for db port
1 parent 64befd0 commit c2252c0

File tree

4 files changed

+95
-67
lines changed

4 files changed

+95
-67
lines changed

docker-compose.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ services:
99
- ./data/postgres/:/var/lib/postgresql/data/
1010
env_file: .env
1111
ports:
12-
- '5432'
12+
- "${POSTGRES_PORT}:${POSTGRES_PORT}"
1313
networks:
1414
- wikonnect
1515
healthcheck:

server/Dockerfile

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
FROM node:fermium-alpine3.14
2+
RUN apk add g++ make py3-pip
23

34
ARG NODE_ENV='production'
45
ARG SERVER_PORT=3000
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,34 @@
1-
2-
exports.up = async function(knex) {
3-
await knex.schema.alterTable('group_members', (table) => {
4-
table.dropPrimary();
5-
table.dropForeign('group_id');
6-
table
7-
.foreign('group_id')
8-
.references('groups.id')
9-
.onDelete('CASCADE')
10-
.onUpdate('CASCADE');
11-
table.text('id').primary().notNullable().defaultTo(knex.raw('next_id()'));
12-
});
13-
14-
return knex('groups').insert([
15-
{
16-
id: 'groupAdmin',
17-
name: 'admin',
18-
slug: 'role-admin',
19-
created_at: new Date().toISOString(),
20-
updated_at: new Date().toISOString()
21-
},
22-
{
23-
id: 'groupModerator',
24-
name: 'moderator',
25-
slug: 'role-moderator',
26-
created_at: new Date().toISOString(),
27-
updated_at: new Date().toISOString()
28-
},
29-
{
30-
id: 'groupBasic',
31-
name: 'basic',
32-
slug: 'role-basic',
33-
created_at: new Date().toISOString(),
34-
updated_at: new Date().toISOString()
35-
}
36-
]);
1+
exports.up = async function (knex) {
2+
return await knex("groups")
3+
.select()
4+
.whereIn("name", ["admin", "moderator", "basic"])
5+
.then((rows) => {
6+
if (rows.length === 0) {
7+
return knex("groups").insert([
8+
{
9+
id: "groupAdmin",
10+
name: "admin",
11+
slug: "role-admin",
12+
created_at: new Date().toISOString(),
13+
updated_at: new Date().toISOString(),
14+
},
15+
{
16+
id: "groupModerator",
17+
name: "moderator",
18+
slug: "role-moderator",
19+
created_at: new Date().toISOString(),
20+
updated_at: new Date().toISOString(),
21+
},
22+
{
23+
id: "groupBasic",
24+
name: "basic",
25+
slug: "role-basic",
26+
created_at: new Date().toISOString(),
27+
updated_at: new Date().toISOString(),
28+
},
29+
]);
30+
}
31+
});
3732
};
3833

39-
exports.down = async function(knex) {
40-
await knex.schema.alterTable('group_members', (table) => {
41-
table.setNullable('group_id');
42-
});
43-
44-
await knex('groups').whereIn('name', [
45-
'admin',
46-
'moderator',
47-
'basic',
48-
]).del();
49-
50-
return knex.schema.alterTable('group_members', (table) => {
51-
table.dropPrimary();
52-
table.dropColumn('id');
53-
table.dropNullable('group_id');
54-
table.primary(['user_id', 'group_id']);
55-
});
56-
};
34+
exports.down = async function (knex) {};
+61-12
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,79 @@
1-
const { faker, seed_number } = require('../_seeds');
1+
const { faker, seed_number } = require("../_seeds");
22

33
exports.seed = async (knex) => {
44
// Deletes ALL existing entries
5-
await knex('group_members').del();
65

7-
const userIds = await knex('users').whereNotIn('id', ['user1', 'user2', 'user3']).pluck('id');
8-
const groupIds = await knex('groups').pluck('id');
6+
await knex("groups")
7+
.select()
8+
.whereIn("name", ["admin", "moderator", "basic"])
9+
.then((rows) => {
10+
if (rows.length === 0) {
11+
return knex("groups").insert([
12+
{
13+
id: "groupAdmin",
14+
name: "admin",
15+
slug: "role-admin",
16+
created_at: new Date().toISOString(),
17+
updated_at: new Date().toISOString(),
18+
},
19+
{
20+
id: "groupModerator",
21+
name: "moderator",
22+
slug: "role-moderator",
23+
created_at: new Date().toISOString(),
24+
updated_at: new Date().toISOString(),
25+
},
26+
{
27+
id: "groupBasic",
28+
name: "basic",
29+
slug: "role-basic",
30+
created_at: new Date().toISOString(),
31+
updated_at: new Date().toISOString(),
32+
},
33+
]);
34+
}
35+
});
36+
37+
const groupIds = await knex("groups").pluck("id");
38+
console.log("===========================================", groupIds);
39+
await knex("group_members").truncate();
40+
41+
const userIds = await knex("users")
42+
.whereNotIn("id", ["user1", "user2", "user3"])
43+
.pluck("id");
944

1045
let groupMembers = [
11-
{ user_id: 'user1', group_id: 'groupAdmin', created_at: faker.date.past(), updated_at: faker.date.recent() },
12-
{ user_id: 'user2', group_id: 'groupModerator', created_at: faker.date.past(), updated_at: faker.date.recent() },
13-
{ user_id: 'user3', group_id: 'groupBasic', created_at: faker.date.past(), updated_at: faker.date.recent() },
46+
{
47+
user_id: "user1",
48+
group_id: "groupAdmin",
49+
created_at: faker.date.past(),
50+
updated_at: faker.date.recent(),
51+
},
52+
{
53+
user_id: "user2",
54+
group_id: "groupModerator",
55+
created_at: faker.date.past(),
56+
updated_at: faker.date.recent(),
57+
},
58+
{
59+
user_id: "user3",
60+
group_id: "groupBasic",
61+
created_at: faker.date.past(),
62+
updated_at: faker.date.recent(),
63+
},
1464
];
1565

16-
const maxSeeds = groupMembers.length > seed_number ? 0 : seed_number - groupMembers.length;
66+
const maxSeeds =
67+
groupMembers.length > seed_number ? 0 : seed_number - groupMembers.length;
1768

1869
for (let i = 0; i < maxSeeds; i++) {
1970
groupMembers.push({
2071
user_id: userIds[i],
2172
group_id: faker.random.arrayElement(groupIds),
2273
created_at: faker.date.past(),
23-
updated_at: faker.date.recent()
74+
updated_at: faker.date.recent(),
2475
});
2576
}
2677

27-
28-
return knex('group_members').insert(groupMembers);
29-
78+
return knex("group_members").insert(groupMembers);
3079
};

0 commit comments

Comments
 (0)