mirror of
https://github.com/pieartsy/PluralFlux.git
synced 2026-04-16 17:45:28 +10:00
separate member repo from member helper
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
const {database} = require('../database.js');
|
||||
const {enums} = require("../enums.js");
|
||||
const {Op} = require("sequelize");
|
||||
const {EmbedBuilder} = require("@fluxerjs/core");
|
||||
const {utils} = require("./utils.js");
|
||||
const {memberRepo} = require("../repositories/memberRepository");
|
||||
|
||||
const memberHelper = {};
|
||||
|
||||
@@ -52,7 +51,7 @@ memberHelper.parseMemberCommand = async function (authorId, authorFull, args, at
|
||||
isHelp = true;
|
||||
}
|
||||
|
||||
return await memberHelper.memberArgumentHandler(authorId, authorFull, isHelp, command, memberName, args, attachmentUrl, attachmentExpiration)
|
||||
return memberHelper.memberArgumentHandler(authorId, authorFull, isHelp, command, memberName, args, attachmentUrl, attachmentExpiration);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -71,6 +70,7 @@ memberHelper.parseMemberCommand = async function (authorId, authorFull, args, at
|
||||
* @returns {Promise <EmbedBuilder>} A list of 25 members as an embed.
|
||||
* @returns {Promise <EmbedBuilder>} A list of member commands and descriptions.
|
||||
* @returns {Promise<{EmbedBuilder, [string], string}>} A member info embed + info/errors.
|
||||
* @returns {string} - A help message
|
||||
* @throws {Error} When there's no member or a command is not recognized.
|
||||
*/
|
||||
memberHelper.memberArgumentHandler = async function(authorId, authorFull, isHelp, command = null, memberName = null, args = [], attachmentUrl = null, attachmentExpiration = null) {
|
||||
@@ -113,7 +113,7 @@ memberHelper.memberArgumentHandler = async function(authorId, authorFull, isHelp
|
||||
* @throws {Error} When there's no member
|
||||
*/
|
||||
memberHelper.sendCurrentValue = async function(authorId, memberName, command= null) {
|
||||
const member = await memberHelper.getMemberByName(authorId, memberName);
|
||||
const member = await memberRepo.getMemberByName(authorId, memberName);
|
||||
if (!member) throw new Error(enums.err.NO_MEMBER);
|
||||
|
||||
if (!command) {
|
||||
@@ -167,10 +167,7 @@ memberHelper.sendHelpEnum = function(command) {
|
||||
* @param {string[]} values - The values to be passed in. Only includes the values after member name and command name.
|
||||
* @param {string | null} attachmentUrl - The attachment URL, if any
|
||||
* @param {string | null} attachmentExpiration - The attachment expiry date, if any
|
||||
* @returns {Promise<string>} A success message.
|
||||
* @returns {Promise <EmbedBuilder>} A list of 25 members as an embed.
|
||||
* @returns {Promise <EmbedBuilder>} A list of member commands and descriptions.
|
||||
* @returns {Promise<{EmbedBuilder, [string], string}>} A member info embed + info/errors.
|
||||
* @returns {Promise<string> | Promise <EmbedBuilder> | Promise<{EmbedBuilder, [string], string}>}
|
||||
*/
|
||||
memberHelper.memberCommandHandler = async function(authorId, command, memberName, values, attachmentUrl = null, attachmentExpiration = null) {
|
||||
switch (command) {
|
||||
@@ -208,7 +205,7 @@ memberHelper.addNewMember = async function (authorId, memberName, values, attach
|
||||
const propic = values[2] ?? attachmentUrl;
|
||||
|
||||
const memberObj = await memberHelper.addFullMember(authorId, memberName, displayName, proxy, propic, attachmentExpiration);
|
||||
const memberInfoEmbed = memberHelper.getMemberInfo(memberObj.member);
|
||||
const memberInfoEmbed = memberHelper.getMemberInfo(memberObj);
|
||||
return {embed: memberInfoEmbed, errors: memberObj.errors, success: `${memberName} has been added successfully.`}
|
||||
}
|
||||
|
||||
@@ -297,12 +294,7 @@ memberHelper.updatePropic = async function (authorId, memberName, values, attach
|
||||
* @throws {Error} When there is no member to remove.
|
||||
*/
|
||||
memberHelper.removeMember = async function (authorId, memberName) {
|
||||
const destroyed = await database.members.destroy({
|
||||
where: {
|
||||
name: {[Op.iLike]: memberName},
|
||||
userid: authorId
|
||||
}
|
||||
})
|
||||
const destroyed = await memberRepo.removeMember(authorId, memberName);
|
||||
if (destroyed > 0) {
|
||||
return `Member "${memberName}" has been deleted.`;
|
||||
} else {
|
||||
@@ -322,7 +314,7 @@ memberHelper.removeMember = async function (authorId, memberName) {
|
||||
* @param {string | null} [proxy] - The proxy tag of the member.
|
||||
* @param {string | null} [propic] - The profile picture URL of the member.
|
||||
* @param {string | null} [attachmentExpiration] - The expiration date of an uploaded profile picture.
|
||||
* @returns {Promise<{model, string[]}>} A successful addition object, including errors if there are any.
|
||||
* @returns {Promise<{ObjectLiteral[], string[]}>} A successful addition object, including errors if there are any.
|
||||
* @throws {Error} When the member already exists, there are validation errors, or adding a member doesn't work.
|
||||
*/
|
||||
memberHelper.addFullMember = async function (authorId, memberName, displayName = null, proxy = null, propic = null, attachmentExpiration = null) {
|
||||
@@ -380,11 +372,11 @@ memberHelper.addFullMember = async function (authorId, memberName, displayName =
|
||||
}
|
||||
}
|
||||
|
||||
const member = await database.members.create({
|
||||
const member = await memberRepo.createMember({
|
||||
name: memberName, userid: authorId, displayname: isValidDisplayName ? displayName : null, proxy: isValidProxy ? proxy : null, propic: isValidPropic ? propic : null
|
||||
});
|
||||
|
||||
return {member: member, errors: errors};
|
||||
return {member: member.generatedMaps, errors: errors};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -400,13 +392,8 @@ memberHelper.addFullMember = async function (authorId, memberName, displayName =
|
||||
* @throws {Error} When no member row was updated.
|
||||
*/
|
||||
memberHelper.updateMemberField = async function (authorId, memberName, columnName, value, expirationWarning = null) {
|
||||
const res = await database.members.update({[columnName]: value}, {
|
||||
where: {
|
||||
name: {[Op.iLike]: memberName},
|
||||
userid: authorId
|
||||
}
|
||||
})
|
||||
if (res[0] === 0) {
|
||||
const res = await memberRepo.updateMemberValue(authorId, memberName, columnName, value);
|
||||
if (res === 0) {
|
||||
throw new Error(`Can't update ${memberName}. ${enums.err.NO_MEMBER}.`);
|
||||
} else {
|
||||
return `Updated ${columnName} for ${memberName} to ${value}${expirationWarning ? `. ${expirationWarning}.` : '.'}`;
|
||||
@@ -416,7 +403,7 @@ memberHelper.updateMemberField = async function (authorId, memberName, columnNam
|
||||
/**
|
||||
* Gets the details for a member.
|
||||
*
|
||||
* @param {model} member - The member object
|
||||
* @param {{ObjectLiteral, string[]}} member - The member object
|
||||
* @returns {EmbedBuilder} The member's info.
|
||||
*/
|
||||
memberHelper.getMemberInfo = function (member) {
|
||||
@@ -451,29 +438,6 @@ memberHelper.getAllMembersInfo = async function (authorId, authorName) {
|
||||
.addFields(...fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a member based on the author and proxy tag.
|
||||
*
|
||||
* @async
|
||||
* @param {string} authorId - The author of the message.
|
||||
* @param {string} memberName - The member's name.
|
||||
* @returns {Promise<model>} The member object.
|
||||
*/
|
||||
memberHelper.getMemberByName = async function (authorId, memberName) {
|
||||
return await database.members.findOne({where: {userid: authorId, name: {[Op.iLike]: memberName}}});
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all members belonging to the author.
|
||||
*
|
||||
* @async
|
||||
* @param {string} authorId - The author of the message
|
||||
* @returns {Promise<model[] | null>} The member object array.
|
||||
*/
|
||||
memberHelper.getMembersByAuthor = async function (authorId) {
|
||||
return await database.members.findAll({where: {userid: authorId}});
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if proxy exists for a member.
|
||||
*
|
||||
|
||||
88
src/repositories/memberRepository.js
Normal file
88
src/repositories/memberRepository.js
Normal file
@@ -0,0 +1,88 @@
|
||||
const {Member} = require("../../database/entity/Member");
|
||||
const { dataSource } = require("../../database/index");
|
||||
const {ILike} = require("typeorm");
|
||||
|
||||
const members = dataSource.getRepository(Member)
|
||||
|
||||
const memberRepo = {};
|
||||
|
||||
/**
|
||||
* Gets a member based on the author and proxy tag.
|
||||
*
|
||||
* @async
|
||||
* @param {string} authorId - The author of the message.
|
||||
* @param {string} memberName - The member's name.
|
||||
* @returns {Promise<ObjectLiteral[] | null>} The member object or null if not found.
|
||||
*/
|
||||
memberRepo.getMemberByName = async function (authorId, memberName) {
|
||||
const member = await members.findOneBy({where: {userid: authorId, name: ILike(`%${memberName}%`)}});
|
||||
return member.generatedMaps;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all members belonging to the author.
|
||||
*
|
||||
* @async
|
||||
* @param {string} authorId - The author of the message
|
||||
* @returns {Promise<Entity[]>} The member object array.
|
||||
*/
|
||||
memberRepo.getMembersByAuthor = async function (authorId) {
|
||||
return await members.findBy({userid: authorId});
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a member.
|
||||
*
|
||||
* @async
|
||||
* @param {string} authorId - The author of the message
|
||||
* @param {string} memberName - The name of the member to remove
|
||||
* @returns {Promise<number>} Number of results removed.
|
||||
* @throws {Error} When there is no member to remove.
|
||||
*/
|
||||
memberRepo.removeMember = async function (authorId, memberName) {
|
||||
const deleted = await members.delete({
|
||||
where: {
|
||||
name: ILike(`%${memberName}%`),
|
||||
userid: authorId
|
||||
}
|
||||
})
|
||||
return deleted.affected;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a member with full details.
|
||||
*
|
||||
* @async
|
||||
* @param {{name: string, userid: string, displayname: (string|null), proxy: (string|null), propic: (string|null)}} createObj - Object with parameters in it
|
||||
* @returns {Promise<ObjectLiteral[]>} A successful inserted object.
|
||||
* @throws {Error} When the member already exists, there are validation errors, or adding a member doesn't work.
|
||||
*/
|
||||
memberRepo.createMember = async function (createObj) {
|
||||
const member = members.insert({
|
||||
name: createObj.name, userid: createObj.authorId, displayname: createObj.displayName, proxy: createObj.proxy, propic: createObj.propic
|
||||
});
|
||||
return member.generatedMaps;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates one fields for a member in the database.
|
||||
*
|
||||
* @async
|
||||
* @param {string} authorId - The author of the message
|
||||
* @param {string} memberName - The member to update
|
||||
* @param {string} columnName - The column name to update.
|
||||
* @param {string} value - The value to update to.
|
||||
* @returns {Promise<number>} A successful update.
|
||||
* @throws {Error} When no member row was updated.
|
||||
*/
|
||||
memberRepo.updateMemberValue = async function (authorId, memberName, columnName, value) {
|
||||
const updated = members.update({columnName: value}, {
|
||||
where: {
|
||||
name: ILike(`%${memberName}%`),
|
||||
userid: authorId
|
||||
}
|
||||
})
|
||||
return updated.affected;
|
||||
}
|
||||
|
||||
module.exports.memberRepo = memberRepo;
|
||||
Reference in New Issue
Block a user