mirror of
https://github.com/outline/outline.git
synced 2026-06-13 11:25:03 +03:00
Convert GroupUser mutations (#8187)
* Convert 'GroupUser' mutations * cleanup commands
This commit is contained in:
@@ -1,55 +0,0 @@
|
||||
import type { Transaction } from "sequelize";
|
||||
import { Event, GroupUser, type Group, type User } from "@server/models";
|
||||
|
||||
type Props = {
|
||||
group: Group;
|
||||
user: User;
|
||||
actor: User;
|
||||
ip: string;
|
||||
transaction?: Transaction;
|
||||
};
|
||||
|
||||
export default async function groupUserCreator({
|
||||
group,
|
||||
user,
|
||||
actor,
|
||||
ip,
|
||||
transaction,
|
||||
}: Props): Promise<GroupUser> {
|
||||
let groupUser = await GroupUser.findOne({
|
||||
where: {
|
||||
groupId: group.id,
|
||||
userId: user.id,
|
||||
},
|
||||
transaction,
|
||||
});
|
||||
|
||||
if (!groupUser) {
|
||||
groupUser = await GroupUser.create(
|
||||
{
|
||||
groupId: group.id,
|
||||
userId: user.id,
|
||||
createdById: actor.id,
|
||||
},
|
||||
{ transaction }
|
||||
);
|
||||
groupUser.user = user;
|
||||
|
||||
await Event.create(
|
||||
{
|
||||
name: "groups.add_user",
|
||||
userId: user.id,
|
||||
modelId: group.id,
|
||||
teamId: user.teamId,
|
||||
actorId: actor.id,
|
||||
data: {
|
||||
name: user.name,
|
||||
},
|
||||
ip,
|
||||
},
|
||||
{ transaction }
|
||||
);
|
||||
}
|
||||
|
||||
return groupUser;
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
import type { Transaction } from "sequelize";
|
||||
import { Event, GroupUser, type Group, type User } from "@server/models";
|
||||
|
||||
type Props = {
|
||||
group: Group;
|
||||
user: User;
|
||||
actor: User;
|
||||
ip: string;
|
||||
transaction?: Transaction;
|
||||
};
|
||||
|
||||
export default async function groupUserDestroyer({
|
||||
group,
|
||||
user,
|
||||
actor,
|
||||
ip,
|
||||
transaction,
|
||||
}: Props): Promise<void> {
|
||||
const groupUser = await GroupUser.unscoped().findOne({
|
||||
where: {
|
||||
groupId: group.id,
|
||||
userId: user.id,
|
||||
},
|
||||
transaction,
|
||||
lock: transaction?.LOCK.UPDATE,
|
||||
});
|
||||
|
||||
if (groupUser) {
|
||||
await groupUser.destroy({ transaction });
|
||||
await Event.create(
|
||||
{
|
||||
name: "groups.remove_user",
|
||||
userId: user.id,
|
||||
modelId: group.id,
|
||||
teamId: user.teamId,
|
||||
actorId: actor.id,
|
||||
data: {
|
||||
name: user.name,
|
||||
},
|
||||
ip,
|
||||
},
|
||||
{ transaction }
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -38,6 +38,7 @@ export default async function userSuspender({
|
||||
userId: user.id,
|
||||
},
|
||||
transaction,
|
||||
hooks: false,
|
||||
});
|
||||
await Event.create(
|
||||
{
|
||||
|
||||
@@ -7,7 +7,10 @@ import {
|
||||
Table,
|
||||
DataType,
|
||||
Scopes,
|
||||
AfterCreate,
|
||||
AfterDestroy,
|
||||
} from "sequelize-typescript";
|
||||
import { APIContext } from "@server/types";
|
||||
import Group from "./Group";
|
||||
import User from "./User";
|
||||
import Model from "./base/Model";
|
||||
@@ -62,6 +65,28 @@ class GroupUser extends Model<
|
||||
@ForeignKey(() => User)
|
||||
@Column(DataType.UUID)
|
||||
createdById: string;
|
||||
|
||||
get modelId() {
|
||||
return this.groupId;
|
||||
}
|
||||
|
||||
// hooks
|
||||
|
||||
@AfterCreate
|
||||
public static async publishAddUserEvent(
|
||||
model: GroupUser,
|
||||
context: APIContext["context"]
|
||||
) {
|
||||
await Group.insertEvent("add_user", model, context);
|
||||
}
|
||||
|
||||
@AfterDestroy
|
||||
public static async publishRemoveUserEvent(
|
||||
model: GroupUser,
|
||||
context: APIContext["context"]
|
||||
) {
|
||||
await Group.insertEvent("remove_user", model, context);
|
||||
}
|
||||
}
|
||||
|
||||
export default GroupUser;
|
||||
|
||||
@@ -183,7 +183,7 @@ class Model<
|
||||
return models.event.create(
|
||||
{
|
||||
name: `${namespace}.${model.eventOverride?.name ?? name}`,
|
||||
modelId: model.id,
|
||||
modelId: "modelId" in model ? model.modelId : model.id,
|
||||
collectionId:
|
||||
"collectionId" in model
|
||||
? model.collectionId
|
||||
|
||||
@@ -20,6 +20,7 @@ export default class UserDeletedProcessor extends BaseProcessor {
|
||||
userId: event.userId,
|
||||
},
|
||||
transaction,
|
||||
hooks: false,
|
||||
});
|
||||
await UserAuthentication.destroy({
|
||||
where: {
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import Router from "koa-router";
|
||||
import { Op, WhereOptions } from "sequelize";
|
||||
import { MAX_AVATAR_DISPLAY } from "@shared/constants";
|
||||
import groupUserCreator from "@server/commands/groupUserCreator";
|
||||
import groupUserDestroyer from "@server/commands/groupUserDestroyer";
|
||||
import auth from "@server/middlewares/authentication";
|
||||
import { rateLimiter } from "@server/middlewares/rateLimiter";
|
||||
import { transaction } from "@server/middlewares/transaction";
|
||||
@@ -263,14 +261,18 @@ router.post(
|
||||
const group = await Group.findByPk(id, { transaction });
|
||||
authorize(actor, "update", group);
|
||||
|
||||
const groupUser = await groupUserCreator({
|
||||
group,
|
||||
user,
|
||||
actor,
|
||||
ip: ctx.request.ip,
|
||||
transaction,
|
||||
const [groupUser] = await GroupUser.findOrCreateWithCtx(ctx, {
|
||||
where: {
|
||||
groupId: group.id,
|
||||
userId: user.id,
|
||||
},
|
||||
defaults: {
|
||||
createdById: actor.id,
|
||||
},
|
||||
});
|
||||
|
||||
groupUser.user = user;
|
||||
|
||||
ctx.body = {
|
||||
data: {
|
||||
users: [presentUser(user)],
|
||||
@@ -297,14 +299,17 @@ router.post(
|
||||
const user = await User.findByPk(userId, { transaction });
|
||||
authorize(actor, "read", user);
|
||||
|
||||
await groupUserDestroyer({
|
||||
group,
|
||||
user,
|
||||
actor,
|
||||
ip: ctx.request.ip,
|
||||
const groupUser = await GroupUser.unscoped().findOne({
|
||||
where: {
|
||||
groupId: group.id,
|
||||
userId: user.id,
|
||||
},
|
||||
transaction,
|
||||
lock: transaction.LOCK.UPDATE,
|
||||
});
|
||||
|
||||
await groupUser?.destroyWithCtx(ctx);
|
||||
|
||||
ctx.body = {
|
||||
data: {
|
||||
groups: [await presentGroup(group)],
|
||||
|
||||
@@ -343,9 +343,6 @@ export type GroupUserEvent = BaseEvent<UserMembership> & {
|
||||
name: "groups.add_user" | "groups.remove_user";
|
||||
userId: string;
|
||||
modelId: string;
|
||||
data: {
|
||||
name: string;
|
||||
};
|
||||
};
|
||||
|
||||
export type GroupEvent = BaseEvent<Group> &
|
||||
|
||||
Reference in New Issue
Block a user