mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 00:18:19 +01:00
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import { config } from "@versia-server/config";
|
|
import { Queue, Worker } from "bullmq";
|
|
import { Relationship } from "../db/relationship.ts";
|
|
import { User } from "../db/user.ts";
|
|
import { connection } from "../redis.ts";
|
|
|
|
export enum RelationshipJobType {
|
|
Unmute = "unmute",
|
|
}
|
|
|
|
export type RelationshipJobData = {
|
|
ownerId: string;
|
|
subjectId: string;
|
|
};
|
|
|
|
export const relationshipQueue = new Queue<
|
|
RelationshipJobData,
|
|
void,
|
|
RelationshipJobType
|
|
>("relationships", {
|
|
connection,
|
|
});
|
|
|
|
export const getRelationshipWorker = (): Worker<
|
|
RelationshipJobData,
|
|
void,
|
|
RelationshipJobType
|
|
> =>
|
|
new Worker<RelationshipJobData, void, RelationshipJobType>(
|
|
relationshipQueue.name,
|
|
async (job) => {
|
|
switch (job.name) {
|
|
case RelationshipJobType.Unmute: {
|
|
const { ownerId, subjectId } = job.data;
|
|
|
|
const owner = await User.fromId(ownerId);
|
|
const subject = await User.fromId(subjectId);
|
|
|
|
if (!(owner && subject)) {
|
|
await job.log("Users not found");
|
|
return;
|
|
}
|
|
|
|
const foundRelationship =
|
|
await Relationship.fromOwnerAndSubject(owner, subject);
|
|
|
|
if (foundRelationship.data.muting) {
|
|
await foundRelationship.update({
|
|
muting: false,
|
|
mutingNotifications: false,
|
|
});
|
|
}
|
|
|
|
await job.log(`✔ Finished unmuting [${subjectId}]`);
|
|
}
|
|
}
|
|
},
|
|
{
|
|
connection,
|
|
removeOnComplete: {
|
|
age: config.queues.fetch?.remove_after_complete_seconds,
|
|
},
|
|
removeOnFail: {
|
|
age: config.queues.fetch?.remove_after_failure_seconds,
|
|
},
|
|
},
|
|
);
|