Skip to content

Commit f675a04

Browse files
authored
chore: Rename GroupPermission -> GroupMembership (outline#7214)
* GroupPermission -> GroupMembership * Add group membership source * wip
1 parent e52719c commit f675a04

18 files changed

+396
-123
lines changed

plugins/webhooks/client/components/WebhookSubscriptionForm.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ const WEBHOOK_EVENTS = {
4141
"documents.title_change",
4242
"documents.add_user",
4343
"documents.remove_user",
44+
"documents.add_group",
45+
"documents.remove_group",
4446
],
4547
collections: [
4648
"collections.create",

plugins/webhooks/server/tasks/DeliverWebhookTask.ts

+38-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
View,
2121
Share,
2222
UserMembership,
23-
GroupPermission,
23+
GroupMembership,
2424
GroupUser,
2525
Comment,
2626
} from "@server/models";
@@ -42,6 +42,7 @@ import {
4242
presentCollectionGroupMembership,
4343
presentComment,
4444
} from "@server/presenters";
45+
import presentDocumentGroupMembership from "@server/presenters/documentGroupMembership";
4546
import BaseTask from "@server/queues/tasks/BaseTask";
4647
import {
4748
CollectionEvent,
@@ -50,6 +51,7 @@ import {
5051
CommentEvent,
5152
DocumentEvent,
5253
DocumentUserEvent,
54+
DocumentGroupEvent,
5355
Event,
5456
FileOperationEvent,
5557
GroupEvent,
@@ -138,6 +140,10 @@ export default class DeliverWebhookTask extends BaseTask<Props> {
138140
case "documents.remove_user":
139141
await this.handleDocumentUserEvent(subscription, event);
140142
return;
143+
case "documents.add_group":
144+
case "documents.remove_group":
145+
await this.handleDocumentGroupEvent(subscription, event);
146+
return;
141147
case "documents.update.delayed":
142148
case "documents.update.debounced":
143149
// Ignored
@@ -478,7 +484,7 @@ export default class DeliverWebhookTask extends BaseTask<Props> {
478484
subscription: WebhookSubscription,
479485
event: CollectionGroupEvent
480486
): Promise<void> {
481-
const model = await GroupPermission.scope([
487+
const model = await GroupMembership.scope([
482488
"withGroup",
483489
"withCollection",
484490
]).findOne({
@@ -581,6 +587,36 @@ export default class DeliverWebhookTask extends BaseTask<Props> {
581587
});
582588
}
583589

590+
private async handleDocumentGroupEvent(
591+
subscription: WebhookSubscription,
592+
event: DocumentGroupEvent
593+
): Promise<void> {
594+
const model = await GroupMembership.scope([
595+
"withGroup",
596+
"withDocument",
597+
]).findOne({
598+
where: {
599+
documentId: event.documentId,
600+
groupId: event.modelId,
601+
},
602+
paranoid: false,
603+
});
604+
605+
const document =
606+
model && (await presentDocument(undefined, model.document!));
607+
608+
await this.sendWebhook({
609+
event,
610+
subscription,
611+
payload: {
612+
id: event.modelId,
613+
model: model && presentDocumentGroupMembership(model),
614+
document,
615+
group: model && presentGroup(model.group),
616+
},
617+
});
618+
}
619+
584620
private async handleRevisionEvent(
585621
subscription: WebhookSubscription,
586622
event: RevisionEvent
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"use strict";
2+
3+
module.exports = {
4+
async up(queryInterface, Sequelize) {
5+
await queryInterface.addColumn("group_permissions", "sourceId", {
6+
type: Sequelize.UUID,
7+
onDelete: "cascade",
8+
references: {
9+
model: "group_permissions",
10+
},
11+
allowNull: true,
12+
});
13+
14+
await queryInterface.removeConstraint("group_permissions", "group_permissions_documentId_fkey")
15+
await queryInterface.changeColumn("group_permissions", "documentId", {
16+
type: Sequelize.UUID,
17+
onDelete: "cascade",
18+
references: {
19+
model: "documents",
20+
},
21+
});
22+
},
23+
async down(queryInterface) {
24+
await queryInterface.removeConstraint("group_permissions", "group_permissions_documentId_fkey")
25+
await queryInterface.changeColumn("group_permissions", "documentId", {
26+
type: Sequelize.UUID,
27+
references: {
28+
model: "documents",
29+
},
30+
});
31+
await queryInterface.removeColumn("group_permissions", "sourceId");
32+
},
33+
};

server/models/Collection.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import { ValidationError } from "@server/errors";
4242
import Document from "./Document";
4343
import FileOperation from "./FileOperation";
4444
import Group from "./Group";
45-
import GroupPermission from "./GroupPermission";
45+
import GroupMembership from "./GroupMembership";
4646
import GroupUser from "./GroupUser";
4747
import Team from "./Team";
4848
import User from "./User";
@@ -63,7 +63,7 @@ import NotContainsUrl from "./validators/NotContainsUrl";
6363
required: false,
6464
},
6565
{
66-
model: GroupPermission,
66+
model: GroupMembership,
6767
as: "collectionGroupMemberships",
6868
required: false,
6969
// use of "separate" property: sequelize breaks when there are
@@ -110,7 +110,7 @@ import NotContainsUrl from "./validators/NotContainsUrl";
110110
required: false,
111111
},
112112
{
113-
model: GroupPermission,
113+
model: GroupMembership,
114114
as: "collectionGroupMemberships",
115115
required: false,
116116
// use of "separate" property: sequelize breaks when there are
@@ -322,13 +322,13 @@ class Collection extends ParanoidModel<
322322
@HasMany(() => UserMembership, "collectionId")
323323
memberships: UserMembership[];
324324

325-
@HasMany(() => GroupPermission, "collectionId")
326-
collectionGroupMemberships: GroupPermission[];
325+
@HasMany(() => GroupMembership, "collectionId")
326+
collectionGroupMemberships: GroupMembership[];
327327

328328
@BelongsToMany(() => User, () => UserMembership)
329329
users: User[];
330330

331-
@BelongsToMany(() => Group, () => GroupPermission)
331+
@BelongsToMany(() => Group, () => GroupMembership)
332332
groups: Group[];
333333

334334
@BelongsTo(() => User, "createdById")

server/models/Group.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
DataType,
1212
Scopes,
1313
} from "sequelize-typescript";
14-
import GroupPermission from "./GroupPermission";
14+
import GroupMembership from "./GroupMembership";
1515
import GroupUser from "./GroupUser";
1616
import Team from "./Team";
1717
import User from "./User";
@@ -90,7 +90,7 @@ class Group extends ParanoidModel<
9090
groupId: model.id,
9191
},
9292
});
93-
await GroupPermission.destroy({
93+
await GroupMembership.destroy({
9494
where: {
9595
groupId: model.id,
9696
},
@@ -109,8 +109,8 @@ class Group extends ParanoidModel<
109109
@HasMany(() => GroupUser, { as: "members", foreignKey: "groupId" })
110110
groupUsers: GroupUser[];
111111

112-
@HasMany(() => GroupPermission, "groupId")
113-
collectionGroupMemberships: GroupPermission[];
112+
@HasMany(() => GroupMembership, "groupId")
113+
collectionGroupMemberships: GroupMembership[];
114114

115115
@BelongsTo(() => Team, "teamId")
116116
team: Team;

server/models/GroupPermission.test.ts server/models/GroupMembership.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import { buildCollection, buildGroup, buildUser } from "@server/test/factories";
2-
import GroupPermission from "./GroupPermission";
2+
import GroupMembership from "./GroupMembership";
33

4-
describe("GroupPermission", () => {
4+
describe("GroupMembership", () => {
55
describe("withCollection scope", () => {
66
it("should return the collection", async () => {
77
const collection = await buildCollection();
88
const group = await buildGroup();
99
const user = await buildUser({ teamId: group.teamId });
1010

11-
await GroupPermission.create({
11+
await GroupMembership.create({
1212
createdById: user.id,
1313
groupId: group.id,
1414
collectionId: collection.id,
1515
});
1616

17-
const permission = await GroupPermission.scope("withCollection").findOne({
17+
const permission = await GroupMembership.scope("withCollection").findOne({
1818
where: {
1919
groupId: group.id,
2020
collectionId: collection.id,

0 commit comments

Comments
 (0)