@qso-soft/shared
Version:
Shared library for QSO-soft
66 lines • 2.75 kB
JavaScript
import { sep } from 'path';
import { INPUTS_INVITES_FOLDER } from '../../constants';
import { getRandomItemFromArray } from '../utils';
import { convertAndWriteToJSON, convertToCsvAndWrite } from './csv-converters';
export const savePreparedInvites = async ({ projectName, availableInvitesAmount }) => {
const fileName = `${projectName}-invites.csv`;
const invites = (await convertAndWriteToJSON({
inputPath: `${INPUTS_INVITES_FOLDER}${sep}${fileName}`,
}));
const invitesToUse = invites.map(({ invite_code, used }) => {
return {
invite_code,
used: typeof used !== 'undefined' ? used : availableInvitesAmount,
};
});
convertToCsvAndWrite({
data: invitesToUse,
fileName: fileName,
outputPath: INPUTS_INVITES_FOLDER,
});
};
export const getCurrentInvite = (invites) => {
const notUsedInvites = invites.filter(({ used }) => !!used);
return getRandomItemFromArray(notUsedInvites);
};
export const saveUsedInvites = ({ invites, projectName, walletId, logger, currentInviteToUse }) => {
if (currentInviteToUse) {
logger.info(`Wallet ${walletId} used ${currentInviteToUse.invite_code} invite code`);
const fileName = `${projectName}-invites.csv`;
const updatedInvites = invites.map(({ invite_code, used }) => {
const isCurrentInvite = currentInviteToUse?.invite_code === invite_code && !!used;
if (isCurrentInvite) {
return { invite_code, used: used - 1 };
}
return { invite_code, used };
});
convertToCsvAndWrite({
data: updatedInvites,
fileName: fileName,
outputPath: INPUTS_INVITES_FOLDER,
});
}
};
export const addInviteCode = async ({ projectName, inviteCode }) => {
const fileName = `${projectName}-invites.csv`;
const prevData = await convertAndWriteToJSON({
inputPath: `${INPUTS_INVITES_FOLDER}${sep}${fileName}`,
});
const filteredPrevData = prevData.filter((currentData) => {
return 'invite_code' in currentData && currentData?.invite_code !== inviteCode;
});
const inviteCodeIsAlreadyExists = prevData.some((currentData) => 'invite_code' in currentData && currentData?.invite_code === inviteCode);
if (!inviteCodeIsAlreadyExists) {
convertToCsvAndWrite({
data: [...filteredPrevData, { invite_code: inviteCode }],
fileName,
outputPath: INPUTS_INVITES_FOLDER,
});
}
};
export const readInvites = async (projectName) => {
return (await convertAndWriteToJSON({
inputPath: `${INPUTS_INVITES_FOLDER}${sep}${projectName}-invites.csv`,
}));
};
//# sourceMappingURL=invites.js.map