feat: ignore list #1711
							
								
								
									
										30
									
								
								src/controllers/api/addIgnoredUserController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/controllers/api/addIgnoredUserController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					import { toOid } from "@/src/helpers/inventoryHelpers";
 | 
				
			||||||
 | 
					import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
				
			||||||
 | 
					import { Account, Ignore } from "@/src/models/loginModel";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { IFriendInfo } from "@/src/types/guildTypes";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const addIgnoredUserController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const data = getJSONfromString<IAddIgnoredUserRequest>(String(req.body));
 | 
				
			||||||
 | 
					    const ignoreeAccount = await Account.findOne(
 | 
				
			||||||
 | 
					        { DisplayName: data.playerName.substring(0, data.playerName.length - 1) },
 | 
				
			||||||
 | 
					        "_id"
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    if (ignoreeAccount) {
 | 
				
			||||||
 | 
					        await Ignore.create({ ignorer: accountId, ignoree: ignoreeAccount._id });
 | 
				
			||||||
 | 
					        res.json({
 | 
				
			||||||
 | 
					            Ignored: {
 | 
				
			||||||
 | 
					                _id: toOid(ignoreeAccount._id),
 | 
				
			||||||
 | 
					                DisplayName: data.playerName
 | 
				
			||||||
 | 
					            } satisfies IFriendInfo
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        res.status(400).end();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IAddIgnoredUserRequest {
 | 
				
			||||||
 | 
					    playerName: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,16 +1,20 @@
 | 
				
			|||||||
 | 
					import { toOid } from "@/src/helpers/inventoryHelpers";
 | 
				
			||||||
 | 
					import { Account, Ignore } from "@/src/models/loginModel";
 | 
				
			||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { IFriendInfo } from "@/src/types/guildTypes";
 | 
				
			||||||
 | 
					import { parallelForeach } from "@/src/utils/async-utils";
 | 
				
			||||||
import { RequestHandler } from "express";
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const getIgnoredUsersController: RequestHandler = (_req, res) => {
 | 
					export const getIgnoredUsersController: RequestHandler = async (req, res) => {
 | 
				
			||||||
    res.writeHead(200, {
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
        "Content-Type": "text/html",
 | 
					    const ignores = await Ignore.find({ ignorer: accountId });
 | 
				
			||||||
        "Content-Length": "3"
 | 
					    const ignoredUsers: IFriendInfo[] = [];
 | 
				
			||||||
 | 
					    await parallelForeach(ignores, async ignore => {
 | 
				
			||||||
 | 
					        const ignoreeAccount = (await Account.findById(ignore.ignoree, "DisplayName"))!;
 | 
				
			||||||
 | 
					        ignoredUsers.push({
 | 
				
			||||||
 | 
					            _id: toOid(ignore.ignoree),
 | 
				
			||||||
 | 
					            DisplayName: ignoreeAccount.DisplayName + ""
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    res.end(
 | 
					    });
 | 
				
			||||||
        Buffer.from([
 | 
					    res.json({ IgnoredUsers: ignoredUsers });
 | 
				
			||||||
            0x7b, 0x22, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x38, 0x33, 0x30, 0x34, 0x30, 0x37, 0x37, 0x32, 0x32,
 | 
					 | 
				
			||||||
            0x34, 0x30, 0x32, 0x32, 0x32, 0x36, 0x31, 0x35, 0x30, 0x31, 0x7d
 | 
					 | 
				
			||||||
        ])
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					 | 
				
			||||||
export { getIgnoredUsersController };
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										21
									
								
								src/controllers/api/removeIgnoredUserController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/controllers/api/removeIgnoredUserController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
				
			||||||
 | 
					import { Account, Ignore } from "@/src/models/loginModel";
 | 
				
			||||||
 | 
					import { getAccountForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const removeIgnoredUserController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountForRequest(req);
 | 
				
			||||||
 | 
					    const data = getJSONfromString<IRemoveIgnoredUserRequest>(String(req.body));
 | 
				
			||||||
 | 
					    const ignoreeAccount = await Account.findOne(
 | 
				
			||||||
 | 
					        { DisplayName: data.playerName.substring(0, data.playerName.length - 1) },
 | 
				
			||||||
 | 
					        "_id"
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    if (ignoreeAccount) {
 | 
				
			||||||
 | 
					        await Ignore.deleteOne({ ignorer: accountId, ignoree: ignoreeAccount._id });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    res.end();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IRemoveIgnoredUserRequest {
 | 
				
			||||||
 | 
					    playerName: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
import { RequestHandler } from "express";
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
import { Account } from "@/src/models/loginModel";
 | 
					import { Account, Ignore } from "@/src/models/loginModel";
 | 
				
			||||||
import { Inbox } from "@/src/models/inboxModel";
 | 
					import { Inbox } from "@/src/models/inboxModel";
 | 
				
			||||||
import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
 | 
					import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
 | 
				
			||||||
import { Loadout } from "@/src/models/inventoryModels/loadoutModel";
 | 
					import { Loadout } from "@/src/models/inventoryModels/loadoutModel";
 | 
				
			||||||
@ -23,6 +23,8 @@ export const deleteAccountController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
    await Promise.all([
 | 
					    await Promise.all([
 | 
				
			||||||
        Account.deleteOne({ _id: accountId }),
 | 
					        Account.deleteOne({ _id: accountId }),
 | 
				
			||||||
        GuildMember.deleteMany({ accountId: accountId }),
 | 
					        GuildMember.deleteMany({ accountId: accountId }),
 | 
				
			||||||
 | 
					        Ignore.deleteMany({ ignorer: accountId }),
 | 
				
			||||||
 | 
					        Ignore.deleteMany({ ignoree: accountId }),
 | 
				
			||||||
        Inbox.deleteMany({ ownerId: accountId }),
 | 
					        Inbox.deleteMany({ ownerId: accountId }),
 | 
				
			||||||
        Inventory.deleteOne({ accountOwnerId: accountId }),
 | 
					        Inventory.deleteOne({ accountOwnerId: accountId }),
 | 
				
			||||||
        Leaderboard.deleteMany({ ownerId: accountId }),
 | 
					        Leaderboard.deleteMany({ ownerId: accountId }),
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
import { IDatabaseAccountJson } from "@/src/types/loginTypes";
 | 
					import { IDatabaseAccountJson, IIgnore } from "@/src/types/loginTypes";
 | 
				
			||||||
import { model, Schema, SchemaOptions } from "mongoose";
 | 
					import { model, Schema, SchemaOptions } from "mongoose";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const opts = {
 | 
					const opts = {
 | 
				
			||||||
@ -37,3 +37,13 @@ databaseAccountSchema.set("toJSON", {
 | 
				
			|||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const Account = model<IDatabaseAccountJson>("Account", databaseAccountSchema);
 | 
					export const Account = model<IDatabaseAccountJson>("Account", databaseAccountSchema);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const ignoreSchema = new Schema<IIgnore>({
 | 
				
			||||||
 | 
					    ignorer: Schema.Types.ObjectId,
 | 
				
			||||||
 | 
					    ignoree: Schema.Types.ObjectId
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ignoreSchema.index({ ignorer: 1 });
 | 
				
			||||||
 | 
					ignoreSchema.index({ ignorer: 1, ignoree: 1 }, { unique: true });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const Ignore = model<IIgnore>("Ignore", ignoreSchema);
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import { abortDojoComponentController } from "@/src/controllers/api/abortDojoCom
 | 
				
			|||||||
import { abortDojoComponentDestructionController } from "@/src/controllers/api/abortDojoComponentDestructionController";
 | 
					import { abortDojoComponentDestructionController } from "@/src/controllers/api/abortDojoComponentDestructionController";
 | 
				
			||||||
import { activateRandomModController } from "@/src/controllers/api/activateRandomModController";
 | 
					import { activateRandomModController } from "@/src/controllers/api/activateRandomModController";
 | 
				
			||||||
import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
 | 
					import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
 | 
				
			||||||
 | 
					import { addIgnoredUserController } from "@/src/controllers/api/addIgnoredUserController";
 | 
				
			||||||
import { addToAllianceController } from "@/src/controllers/api/addToAllianceController";
 | 
					import { addToAllianceController } from "@/src/controllers/api/addToAllianceController";
 | 
				
			||||||
import { addToGuildController } from "@/src/controllers/api/addToGuildController";
 | 
					import { addToGuildController } from "@/src/controllers/api/addToGuildController";
 | 
				
			||||||
import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
 | 
					import { arcaneCommonController } from "@/src/controllers/api/arcaneCommonController";
 | 
				
			||||||
@ -97,6 +98,7 @@ import { redeemPromoCodeController } from "@/src/controllers/api/redeemPromoCode
 | 
				
			|||||||
import { releasePetController } from "@/src/controllers/api/releasePetController";
 | 
					import { releasePetController } from "@/src/controllers/api/releasePetController";
 | 
				
			||||||
import { removeFromAllianceController } from "@/src/controllers/api/removeFromAllianceController";
 | 
					import { removeFromAllianceController } from "@/src/controllers/api/removeFromAllianceController";
 | 
				
			||||||
import { removeFromGuildController } from "@/src/controllers/api/removeFromGuildController";
 | 
					import { removeFromGuildController } from "@/src/controllers/api/removeFromGuildController";
 | 
				
			||||||
 | 
					import { removeIgnoredUserController } from "@/src/controllers/api/removeIgnoredUserController";
 | 
				
			||||||
import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
 | 
					import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
 | 
				
			||||||
import { retrievePetFromStasisController } from "@/src/controllers/api/retrievePetFromStasisController";
 | 
					import { retrievePetFromStasisController } from "@/src/controllers/api/retrievePetFromStasisController";
 | 
				
			||||||
import { saveDialogueController } from "@/src/controllers/api/saveDialogueController";
 | 
					import { saveDialogueController } from "@/src/controllers/api/saveDialogueController";
 | 
				
			||||||
@ -202,6 +204,7 @@ apiRouter.get("/updateSession.php", updateSessionGetController);
 | 
				
			|||||||
apiRouter.post("/abortDojoComponent.php", abortDojoComponentController);
 | 
					apiRouter.post("/abortDojoComponent.php", abortDojoComponentController);
 | 
				
			||||||
apiRouter.post("/activateRandomMod.php", activateRandomModController);
 | 
					apiRouter.post("/activateRandomMod.php", activateRandomModController);
 | 
				
			||||||
apiRouter.post("/addFriendImage.php", addFriendImageController);
 | 
					apiRouter.post("/addFriendImage.php", addFriendImageController);
 | 
				
			||||||
 | 
					apiRouter.post("/addIgnoredUser.php", addIgnoredUserController);
 | 
				
			||||||
apiRouter.post("/addToAlliance.php", addToAllianceController);
 | 
					apiRouter.post("/addToAlliance.php", addToAllianceController);
 | 
				
			||||||
apiRouter.post("/addToGuild.php", addToGuildController);
 | 
					apiRouter.post("/addToGuild.php", addToGuildController);
 | 
				
			||||||
apiRouter.post("/arcaneCommon.php", arcaneCommonController);
 | 
					apiRouter.post("/arcaneCommon.php", arcaneCommonController);
 | 
				
			||||||
@ -266,6 +269,7 @@ apiRouter.post("/purchase.php", purchaseController);
 | 
				
			|||||||
apiRouter.post("/redeemPromoCode.php", redeemPromoCodeController);
 | 
					apiRouter.post("/redeemPromoCode.php", redeemPromoCodeController);
 | 
				
			||||||
apiRouter.post("/releasePet.php", releasePetController);
 | 
					apiRouter.post("/releasePet.php", releasePetController);
 | 
				
			||||||
apiRouter.post("/removeFromGuild.php", removeFromGuildController);
 | 
					apiRouter.post("/removeFromGuild.php", removeFromGuildController);
 | 
				
			||||||
 | 
					apiRouter.post("/removeIgnoredUser.php", removeIgnoredUserController);
 | 
				
			||||||
apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
 | 
					apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
 | 
				
			||||||
apiRouter.post("/retrievePetFromStasis.php", retrievePetFromStasisController);
 | 
					apiRouter.post("/retrievePetFromStasis.php", retrievePetFromStasisController);
 | 
				
			||||||
apiRouter.post("/saveDialogue.php", saveDialogueController);
 | 
					apiRouter.post("/saveDialogue.php", saveDialogueController);
 | 
				
			||||||
 | 
				
			|||||||
@ -103,12 +103,12 @@ export interface IGuildMemberDatabase {
 | 
				
			|||||||
    ShipDecorationsContributed?: ITypeCount[];
 | 
					    ShipDecorationsContributed?: ITypeCount[];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface IFriendInfo {
 | 
					export interface IFriendInfo {
 | 
				
			||||||
    _id: IOid;
 | 
					    _id: IOid;
 | 
				
			||||||
    DisplayName?: string;
 | 
					    DisplayName?: string;
 | 
				
			||||||
    PlatformNames?: string[];
 | 
					    PlatformNames?: string[];
 | 
				
			||||||
    PlatformAccountId?: string;
 | 
					    PlatformAccountId?: string;
 | 
				
			||||||
    Status: number;
 | 
					    Status?: number;
 | 
				
			||||||
    ActiveAvatarImageType?: string;
 | 
					    ActiveAvatarImageType?: string;
 | 
				
			||||||
    LastLogin?: IMongoDate;
 | 
					    LastLogin?: IMongoDate;
 | 
				
			||||||
    PlayerLevel?: number;
 | 
					    PlayerLevel?: number;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,5 @@
 | 
				
			|||||||
 | 
					import { Types } from "mongoose";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface IAccountAndLoginResponseCommons {
 | 
					export interface IAccountAndLoginResponseCommons {
 | 
				
			||||||
    DisplayName: string;
 | 
					    DisplayName: string;
 | 
				
			||||||
    CountryCode: string;
 | 
					    CountryCode: string;
 | 
				
			||||||
@ -56,3 +58,8 @@ export interface IGroup {
 | 
				
			|||||||
    experiment: string;
 | 
					    experiment: string;
 | 
				
			||||||
    experimentGroup: string;
 | 
					    experimentGroup: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IIgnore {
 | 
				
			||||||
 | 
					    ignorer: Types.ObjectId;
 | 
				
			||||||
 | 
					    ignoree: Types.ObjectId;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					// Misnomer: We have concurrency, not parallelism - oh well!
 | 
				
			||||||
export const parallelForeach = async <T>(data: T[], op: (datum: T) => Promise<void>): Promise<void> => {
 | 
					export const parallelForeach = async <T>(data: T[], op: (datum: T) => Promise<void>): Promise<void> => {
 | 
				
			||||||
    const promises: Promise<void>[] = [];
 | 
					    const promises: Promise<void>[] = [];
 | 
				
			||||||
    for (const datum of data) {
 | 
					    for (const datum of data) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user