👔 Changed to transactions #297
This commit is contained in:
parent
880ad789c9
commit
75c9fdf438
4 changed files with 101 additions and 110 deletions
|
@ -1,43 +0,0 @@
|
|||
import sleep from "../../helpers/sleep";
|
||||
import logger from "../../logger";
|
||||
import Chance from "chance";
|
||||
|
||||
export default async function saveUser(data: any, data2: any) {
|
||||
process.nextTick(
|
||||
async () => {
|
||||
// Chance module
|
||||
const chance = new Chance();
|
||||
|
||||
await sleep(
|
||||
chance.integer({
|
||||
min: 0,
|
||||
max: 1,
|
||||
}) *
|
||||
10 +
|
||||
1 * 100
|
||||
); // 100 - 1000 random Number generator
|
||||
data.save((_: any) =>
|
||||
_
|
||||
? logger?.error(
|
||||
`ERROR Occurred while saving data (saveUser) \n${"=".repeat(
|
||||
50
|
||||
)}\n${`${_}\n${"=".repeat(50)}`}`
|
||||
)
|
||||
: logger?.silly(`Saved user: ${data.id} (saveUser)`)
|
||||
);
|
||||
if (data2) {
|
||||
data2.save((_: any) =>
|
||||
_
|
||||
? logger?.error(
|
||||
`ERROR Occurred while saving data (saveUser) \n${"=".repeat(
|
||||
50
|
||||
)}\n${`${_}\n${"=".repeat(50)}`}`
|
||||
)
|
||||
: logger?.silly(`Saved user: ${data2.id} (saveUser)`)
|
||||
);
|
||||
}
|
||||
},
|
||||
data,
|
||||
data2
|
||||
);
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
import logger from "../../logger";
|
||||
|
||||
export default function sleep(milliseconds: number) {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(resolve, milliseconds);
|
||||
logger?.silly(`Sleeping for ${milliseconds} milliseconds`);
|
||||
});
|
||||
}
|
|
@ -7,8 +7,7 @@ import getEmbedConfig from "../../../../helpers/getEmbedConfig";
|
|||
// Handlers
|
||||
import logger from "../../../../logger";
|
||||
|
||||
// Helpers
|
||||
import saveUser from "../../../../helpers/saveUser";
|
||||
import mongoose from "mongoose";
|
||||
|
||||
// Models
|
||||
import fetchUser from "../../../../helpers/fetchUser";
|
||||
|
@ -184,53 +183,69 @@ export default {
|
|||
});
|
||||
}
|
||||
|
||||
// Withdraw amount from fromUserDB
|
||||
fromUserDB.credits -= optionAmount;
|
||||
const session = await mongoose.startSession();
|
||||
|
||||
// Deposit amount to toUserDB
|
||||
toUserDB.credits += optionAmount;
|
||||
session.startTransaction();
|
||||
|
||||
// Save users
|
||||
await saveUser(fromUserDB, toUserDB).then(async () => {
|
||||
// Get DM user object
|
||||
const dmUser = client.users.cache.get(optionUser.id);
|
||||
try {
|
||||
// Withdraw amount from fromUserDB
|
||||
fromUserDB.credits -= optionAmount;
|
||||
|
||||
if (dmUser == null) return;
|
||||
// Deposit amount to toUserDB
|
||||
toUserDB.credits += optionAmount;
|
||||
|
||||
// Send DM to user
|
||||
await dmUser
|
||||
.send({
|
||||
embeds: [
|
||||
embed
|
||||
.setDescription(
|
||||
`${
|
||||
user.tag
|
||||
} has gifted you ${optionAmount} credits with reason: ${
|
||||
optionReason || "unspecified"
|
||||
}`
|
||||
)
|
||||
.setColor(successColor),
|
||||
],
|
||||
})
|
||||
.catch(async (error) =>
|
||||
logger.error(`[Gift] Error sending DM to user: ${error}`)
|
||||
);
|
||||
await fromUserDB.save();
|
||||
|
||||
logger.silly(
|
||||
`[Gift] Successfully gifted ${optionAmount} credits to ${optionUser.tag}`
|
||||
);
|
||||
await toUserDB.save();
|
||||
|
||||
await session.commitTransaction();
|
||||
} catch (error) {
|
||||
await session.abortTransaction();
|
||||
session.endSession();
|
||||
logger.error(`${error}`);
|
||||
|
||||
return interaction.editReply({
|
||||
embeds: [
|
||||
embed
|
||||
.setDescription(
|
||||
`Successfully gifted ${optionAmount} credits to ${
|
||||
optionUser.tag
|
||||
} with reason: ${optionReason || "unspecified"}`
|
||||
"An error occurred while trying to gift credits. Please try again."
|
||||
)
|
||||
.setColor(successColor),
|
||||
.setColor(errorColor),
|
||||
],
|
||||
});
|
||||
} finally {
|
||||
// ending the session
|
||||
session.endSession();
|
||||
}
|
||||
|
||||
// Get DM user object
|
||||
const dmUser = client.users.cache.get(optionUser.id);
|
||||
|
||||
if (!dmUser) throw new Error("User not found");
|
||||
|
||||
// Send DM to user
|
||||
await dmUser.send({
|
||||
embeds: [
|
||||
embed
|
||||
.setDescription(
|
||||
`${user.tag} has gifted you ${optionAmount} credits with reason: ${
|
||||
optionReason || "unspecified"
|
||||
}`
|
||||
)
|
||||
.setColor(successColor),
|
||||
],
|
||||
});
|
||||
|
||||
return interaction.editReply({
|
||||
embeds: [
|
||||
embed
|
||||
.setDescription(
|
||||
`Successfully gifted ${optionAmount} credits to ${
|
||||
optionUser.tag
|
||||
} with reason: ${optionReason || "unspecified"}`
|
||||
)
|
||||
.setColor(successColor),
|
||||
],
|
||||
});
|
||||
},
|
||||
};
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
// Dependencies
|
||||
import { CommandInteraction, MessageEmbed, Permissions } from "discord.js";
|
||||
|
||||
import mongoose from "mongoose";
|
||||
|
||||
// Configurations
|
||||
import getEmbedConfig from "../../../../../../helpers/getEmbedConfig";
|
||||
|
||||
// Handlers
|
||||
import logger from "../../../../../../logger";
|
||||
|
||||
// Helpers
|
||||
import saveUser from "../../../../../../helpers/saveUser";
|
||||
|
||||
// Models
|
||||
import fetchUser from "../../../../../../helpers/fetchUser";
|
||||
import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
|
||||
|
@ -193,38 +192,66 @@ export default {
|
|||
});
|
||||
}
|
||||
|
||||
// Withdraw amount from fromUser
|
||||
fromUser.credits -= optionAmount;
|
||||
const session = await mongoose.startSession();
|
||||
|
||||
// Deposit amount to toUser
|
||||
toUser.credits += optionAmount;
|
||||
session.startTransaction();
|
||||
|
||||
// Save users
|
||||
await saveUser(fromUser, toUser)?.then(async () => {
|
||||
logger?.silly(`Saved users`);
|
||||
try {
|
||||
// Withdraw amount from fromUserDB
|
||||
fromUser.credits -= optionAmount;
|
||||
|
||||
return interaction?.editReply({
|
||||
// Deposit amount to toUserDB
|
||||
toUser.credits += optionAmount;
|
||||
|
||||
await fromUser.save();
|
||||
|
||||
await toUser.save();
|
||||
|
||||
await session.commitTransaction();
|
||||
} catch (error) {
|
||||
await session.abortTransaction();
|
||||
session.endSession();
|
||||
logger.error(`${error}`);
|
||||
|
||||
return interaction.editReply({
|
||||
embeds: [
|
||||
new MessageEmbed()
|
||||
.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,
|
||||
}
|
||||
.setDescription(
|
||||
"An error occurred while trying to gift credits. Please try again."
|
||||
)
|
||||
.setColor(errorColor)
|
||||
.setTimestamp(new Date())
|
||||
.setColor(successColor)
|
||||
.setFooter({ text: footerText, iconURL: footerIcon }),
|
||||
],
|
||||
});
|
||||
} finally {
|
||||
// ending the session
|
||||
session.endSession();
|
||||
}
|
||||
|
||||
return interaction?.editReply({
|
||||
embeds: [
|
||||
new MessageEmbed()
|
||||
.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