90 lines
1.9 KiB
TypeScript
90 lines
1.9 KiB
TypeScript
import { User } from "discord.js";
|
|
import prisma from "./prisma";
|
|
|
|
class ReputationManager {
|
|
async check(user: User) {
|
|
const userData = await prisma.user.upsert({
|
|
where: { id: user.id },
|
|
update: {},
|
|
create: {
|
|
id: user.id,
|
|
userReputation: {
|
|
create: {
|
|
positive: 0,
|
|
negative: 0,
|
|
},
|
|
},
|
|
},
|
|
include: {
|
|
userReputation: true,
|
|
},
|
|
});
|
|
|
|
const userReputation = userData.userReputation;
|
|
|
|
if (!userReputation) {
|
|
return {
|
|
total: 0,
|
|
positive: 0,
|
|
negative: 0,
|
|
};
|
|
}
|
|
|
|
return {
|
|
total: userReputation.positive - userReputation.negative,
|
|
positive: userReputation.positive,
|
|
negative: userReputation.negative,
|
|
};
|
|
}
|
|
|
|
async repute(user: User, type: "positive" | "negative") {
|
|
const userData = await prisma.user.upsert({
|
|
where: { id: user.id },
|
|
update: {},
|
|
create: {
|
|
id: user.id,
|
|
userReputation: {
|
|
create: {
|
|
positive: 0,
|
|
negative: 0,
|
|
},
|
|
},
|
|
},
|
|
include: {
|
|
userReputation: true,
|
|
},
|
|
});
|
|
|
|
let userReputation: any = {};
|
|
|
|
if (!userData.userReputation) return null;
|
|
|
|
if (type === "positive") {
|
|
userReputation = await prisma.userReputation.upsert({
|
|
where: { id: userData.userReputation.id },
|
|
update: { positive: { increment: 1 } },
|
|
create: {
|
|
positive: 1,
|
|
negative: 0,
|
|
user: { connect: { id: user.id } },
|
|
},
|
|
});
|
|
}
|
|
|
|
if (type === "negative") {
|
|
userReputation = await prisma.userReputation.upsert({
|
|
where: { id: userData.userReputation.id },
|
|
update: { negative: { increment: 1 } },
|
|
create: {
|
|
positive: 0,
|
|
negative: 1,
|
|
user: { connect: { id: user.id } },
|
|
},
|
|
});
|
|
}
|
|
|
|
return userReputation;
|
|
}
|
|
}
|
|
|
|
export default ReputationManager;
|