♻️ Migrated more credits module to Prisma
This commit is contained in:
parent
d26a8367dd
commit
7da0d9a97f
4 changed files with 156 additions and 318 deletions
|
@ -5,14 +5,14 @@ import {
|
|||
EmbedBuilder,
|
||||
PermissionsBitField,
|
||||
} from "discord.js";
|
||||
import logger from "../../../../../../../middlewares/logger";
|
||||
// Configurations
|
||||
import getEmbedConfig from "../../../../../../../helpers/getEmbedData";
|
||||
// Helpers../../../../../../../helpers/userData
|
||||
import pluralize from "../../../../../../../helpers/pluralize";
|
||||
// Models
|
||||
import fetchUser from "../../../../../../../helpers/userData";
|
||||
// Handlers
|
||||
|
||||
import prisma from "../../../../../../../prisma";
|
||||
// Function
|
||||
export default {
|
||||
metadata: {
|
||||
|
@ -48,37 +48,55 @@ export default {
|
|||
const creditAmount = options?.getInteger("amount");
|
||||
|
||||
// If amount option is null
|
||||
if (creditAmount === null) {
|
||||
if (creditAmount === null)
|
||||
throw new Error("You need to provide a credit amount.");
|
||||
}
|
||||
|
||||
// If amount is zero or below
|
||||
if (creditAmount <= 0) {
|
||||
if (creditAmount <= 0)
|
||||
throw new Error("You must provide a credit amount greater than zero");
|
||||
}
|
||||
|
||||
if (discordReceiver === null) {
|
||||
if (discordReceiver === null)
|
||||
throw new Error("We could not get the receiving user from Discord");
|
||||
}
|
||||
if (guild === null) {
|
||||
|
||||
if (guild === null)
|
||||
throw new Error("We could not get the current guild from discord.");
|
||||
}
|
||||
|
||||
const toUser = await fetchUser(discordReceiver, guild);
|
||||
const createGuildMember = await prisma.guildMember.upsert({
|
||||
where: {
|
||||
userId_guildId: {
|
||||
userId: discordReceiver.id,
|
||||
guildId: guild.id,
|
||||
},
|
||||
},
|
||||
update: { creditsEarned: { increment: creditAmount } },
|
||||
create: {
|
||||
creditsEarned: creditAmount,
|
||||
user: {
|
||||
connectOrCreate: {
|
||||
create: {
|
||||
id: discordReceiver.id,
|
||||
},
|
||||
where: {
|
||||
id: discordReceiver.id,
|
||||
},
|
||||
},
|
||||
},
|
||||
guild: {
|
||||
connectOrCreate: {
|
||||
create: {
|
||||
id: guild.id,
|
||||
},
|
||||
where: {
|
||||
id: guild.id,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (toUser === null) {
|
||||
throw new Error("The receiving user is not found.");
|
||||
}
|
||||
|
||||
if (toUser?.credits === null) {
|
||||
throw new Error("The receiving user's credits value could not found.");
|
||||
}
|
||||
|
||||
// Deposit amount to toUser
|
||||
toUser.credits += creditAmount;
|
||||
logger.silly(createGuildMember);
|
||||
|
||||
// Save toUser
|
||||
await toUser?.save()?.then(async () => {
|
||||
await interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
|
@ -92,6 +110,5 @@ export default {
|
|||
],
|
||||
});
|
||||
return;
|
||||
});
|
||||
},
|
||||
};
|
||||
|
|
|
@ -9,9 +9,9 @@ import {
|
|||
} from "discord.js";
|
||||
// Configurations
|
||||
import getEmbedConfig from "../../../../../../../helpers/getEmbedData";
|
||||
import fetchUser from "../../../../../../../helpers/userData";
|
||||
// Handlers
|
||||
import logger from "../../../../../../../middlewares/logger";
|
||||
import prisma from "../../../../../../../prisma";
|
||||
|
||||
// Function
|
||||
export default {
|
||||
|
@ -91,47 +91,40 @@ export default {
|
|||
});
|
||||
}
|
||||
|
||||
// toUser Information
|
||||
const toUser = await fetchUser(discordUser, guild);
|
||||
|
||||
// If toUser does not exist
|
||||
if (toUser === null) {
|
||||
logger?.silly(`User does not exist`);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Set)")
|
||||
.setDescription(`The user you provided does not exist.`)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
const createGuildMember = await prisma.guildMember.upsert({
|
||||
where: {
|
||||
userId_guildId: {
|
||||
userId: discordUser.id,
|
||||
guildId: guild.id,
|
||||
},
|
||||
},
|
||||
update: { creditsEarned: creditAmount },
|
||||
create: {
|
||||
creditsEarned: creditAmount,
|
||||
user: {
|
||||
connectOrCreate: {
|
||||
create: {
|
||||
id: discordUser.id,
|
||||
},
|
||||
where: {
|
||||
id: discordUser.id,
|
||||
},
|
||||
},
|
||||
},
|
||||
guild: {
|
||||
connectOrCreate: {
|
||||
create: {
|
||||
id: guild.id,
|
||||
},
|
||||
where: {
|
||||
id: guild.id,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// If toUser.credits does not exist
|
||||
if (toUser?.credits === null) {
|
||||
logger?.silly(`User does not have any credits`);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Set)")
|
||||
.setDescription(`The user you provided does not have any credits.`)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
// Set toUser with amount
|
||||
toUser.credits = creditAmount;
|
||||
|
||||
// Save toUser
|
||||
await toUser?.save()?.then(async () => {
|
||||
logger?.silly(`Saved user`);
|
||||
logger.silly(createGuildMember);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
|
@ -145,6 +138,5 @@ export default {
|
|||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
});
|
||||
},
|
||||
};
|
||||
|
|
|
@ -10,9 +10,9 @@ import {
|
|||
import getEmbedConfig from "../../../../../../../helpers/getEmbedData";
|
||||
// Helpers../../../../../../../helpers/userData
|
||||
import pluralize from "../../../../../../../helpers/pluralize";
|
||||
import fetchUser from "../../../../../../../helpers/userData";
|
||||
// Handlers
|
||||
import logger from "../../../../../../../middlewares/logger";
|
||||
import prisma from "../../../../../../../prisma";
|
||||
|
||||
// Function
|
||||
export default {
|
||||
|
@ -45,7 +45,7 @@ export default {
|
|||
const { guild, options } = interaction;
|
||||
|
||||
// User option
|
||||
const optionUser = options?.getUser("user");
|
||||
const discordReceiver = options?.getUser("user");
|
||||
|
||||
// Amount option
|
||||
const optionAmount = options?.getInteger("amount");
|
||||
|
@ -82,7 +82,7 @@ export default {
|
|||
});
|
||||
}
|
||||
|
||||
if (optionUser === null) {
|
||||
if (discordReceiver === null) {
|
||||
logger?.silly(`Discord receiver is null`);
|
||||
|
||||
return interaction?.editReply({
|
||||
|
@ -111,52 +111,46 @@ export default {
|
|||
});
|
||||
}
|
||||
|
||||
// toUser Information
|
||||
const toUser = await fetchUser(optionUser, guild);
|
||||
|
||||
// If toUser does not exist
|
||||
if (toUser === null) {
|
||||
logger?.silly(`ToUser is null`);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Take)")
|
||||
.setDescription(`The user you provided does not exist.`)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
const createGuildMember = await prisma.guildMember.upsert({
|
||||
where: {
|
||||
userId_guildId: {
|
||||
userId: discordReceiver.id,
|
||||
guildId: guild.id,
|
||||
},
|
||||
},
|
||||
update: { creditsEarned: { decrement: optionAmount } },
|
||||
create: {
|
||||
creditsEarned: -optionAmount,
|
||||
user: {
|
||||
connectOrCreate: {
|
||||
create: {
|
||||
id: discordReceiver.id,
|
||||
},
|
||||
where: {
|
||||
id: discordReceiver.id,
|
||||
},
|
||||
},
|
||||
},
|
||||
guild: {
|
||||
connectOrCreate: {
|
||||
create: {
|
||||
id: guild.id,
|
||||
},
|
||||
where: {
|
||||
id: guild.id,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// If toUser.credits does not exist
|
||||
if (toUser?.credits === null) {
|
||||
logger?.silly(`ToUser.credits is null`);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Take)")
|
||||
.setDescription(`The user you provided does not have credits.`)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
// Withdraw amount from toUser
|
||||
toUser.credits -= optionAmount;
|
||||
|
||||
// Save toUser
|
||||
await toUser?.save()?.then(async () => {
|
||||
logger.silly(createGuildMember);
|
||||
await interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Take)")
|
||||
.setDescription(
|
||||
`Took ${pluralize(optionAmount, "credit")} from ${optionUser}.`
|
||||
`Took ${pluralize(optionAmount, "credit")} from ${discordReceiver}.`
|
||||
)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(successColor)
|
||||
|
@ -164,6 +158,5 @@ export default {
|
|||
],
|
||||
});
|
||||
return;
|
||||
});
|
||||
},
|
||||
};
|
||||
|
|
|
@ -6,12 +6,10 @@ import {
|
|||
EmbedBuilder,
|
||||
PermissionsBitField,
|
||||
} from "discord.js";
|
||||
import mongoose from "mongoose";
|
||||
import transferCredits from "../../../../../../../helpers/transferCredits";
|
||||
// Configurations
|
||||
import getEmbedConfig from "../../../../../../../helpers/getEmbedData";
|
||||
import fetchUser from "../../../../../../../helpers/userData";
|
||||
// Handlers../../../../../../../helpers/userData
|
||||
import logger from "../../../../../../../middlewares/logger";
|
||||
|
||||
// Function
|
||||
export default {
|
||||
|
@ -54,188 +52,26 @@ export default {
|
|||
const optionToUser = options?.getUser("to");
|
||||
const optionAmount = options?.getInteger("amount");
|
||||
|
||||
// If amount is null
|
||||
if (optionAmount === null) {
|
||||
logger?.silly(`Amount is null`);
|
||||
if (optionAmount === null) throw new Error("Amount is not specified");
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
|
||||
.setDescription(`You must provide an amount.`)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
if (optionAmount <= 0)
|
||||
throw new Error("You need to set amount above zero to transfer.");
|
||||
|
||||
if (guild === null) {
|
||||
logger?.silly(`Guild is null`);
|
||||
if (!guild) throw new Error(`We could not find this guild.`);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
|
||||
.setDescription(`You must be in a guild.`)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
if (optionFromUser === null) {
|
||||
logger?.silly(`From user is null`);
|
||||
if (!optionFromUser)
|
||||
throw new Error("You must provide a user to transfer from.");
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
|
||||
.setDescription(`You must provide a user to transfer from.`)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
if (optionToUser === null) {
|
||||
logger?.silly(`To user is null`);
|
||||
if (!optionToUser)
|
||||
throw new Error("You must provide a user to transfer to.");
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
|
||||
.setDescription(`You must provide a user to transfer to.`)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
// Get fromUser object
|
||||
const fromUser = await fetchUser(optionFromUser, guild);
|
||||
|
||||
// Get toUser object
|
||||
const toUser = await fetchUser(optionToUser, guild);
|
||||
|
||||
// If toUser does not exist
|
||||
if (fromUser === null) {
|
||||
logger?.silly(`From user does not exist`);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
|
||||
.setDescription(
|
||||
`The user you provided to transfer from does not exist.`
|
||||
)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
// If toUser.credits does not exist
|
||||
if (!fromUser?.credits) {
|
||||
logger?.silly(`From user does not have credits`);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
|
||||
.setDescription(
|
||||
`The user you provided to transfer from does not have credits.`
|
||||
)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
// If toUser does not exist
|
||||
if (toUser === null) {
|
||||
logger?.silly(`To user does not exist`);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
|
||||
.setDescription(
|
||||
`The user you provided to transfer to does not exist.`
|
||||
)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
// If toUser.credits does not exist
|
||||
if (toUser?.credits === null) {
|
||||
logger?.silly(`To user does not have credits`);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
|
||||
.setDescription(
|
||||
`The user you provided to transfer to does not have credits.`
|
||||
)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(errorColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
const session = await mongoose.startSession();
|
||||
|
||||
session.startTransaction();
|
||||
|
||||
try {
|
||||
// Withdraw amount from fromUserDB
|
||||
fromUser.credits -= optionAmount;
|
||||
|
||||
// Deposit amount to toUserDB
|
||||
toUser.credits += optionAmount;
|
||||
|
||||
await fromUser.save();
|
||||
|
||||
await toUser.save();
|
||||
|
||||
await session.commitTransaction();
|
||||
} catch (error: unknown) {
|
||||
await session.abortTransaction();
|
||||
session.endSession();
|
||||
|
||||
throw new Error(
|
||||
"An error occurred while trying to gift credits. Please try again later."
|
||||
);
|
||||
} finally {
|
||||
// ending the session
|
||||
session.endSession();
|
||||
}
|
||||
await transferCredits(guild, optionFromUser, optionToUser, optionAmount);
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new EmbedBuilder()
|
||||
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
|
||||
.setDescription(`Transferred ${optionAmount} credits.`)
|
||||
.addFields(
|
||||
{
|
||||
name: `${optionFromUser?.username} Balance`,
|
||||
value: `${fromUser?.credits}`,
|
||||
inline: true,
|
||||
},
|
||||
{
|
||||
name: `${optionToUser?.username} Balance`,
|
||||
value: `${toUser?.credits}`,
|
||||
inline: true,
|
||||
}
|
||||
)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(successColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
|
|
Loading…
Add table
Reference in a new issue