forked from OpenWF/SpaceNinjaServer
		
	feat: implement setPlacedDecoInfo (#558)
This commit is contained in:
		
							parent
							
								
									abc3bd8624
								
							
						
					
					
						commit
						ba349535fb
					
				
							
								
								
									
										12
									
								
								src/controllers/api/setPlacedDecoInfoController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/controllers/api/setPlacedDecoInfoController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { ISetPlacedDecoInfoRequest } from "@/src/types/shipTypes";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					import { handleSetPlacedDecoInfo } from "@/src/services/shipCustomizationsService";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// eslint-disable-next-line @typescript-eslint/no-misused-promises
 | 
				
			||||||
 | 
					export const setPlacedDecoInfoController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const payload = JSON.parse(req.body as string) as ISetPlacedDecoInfoRequest;
 | 
				
			||||||
 | 
					    await handleSetPlacedDecoInfo(accountId, payload);
 | 
				
			||||||
 | 
					    res.end();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -1,14 +1,34 @@
 | 
				
			|||||||
import { toOid } from "@/src/helpers/inventoryHelpers";
 | 
					import { toOid } from "@/src/helpers/inventoryHelpers";
 | 
				
			||||||
import { IOrbiter, IPersonalRooms, PersonalRoomsModelType } from "@/src/types/personalRoomsTypes";
 | 
					import { IOrbiter, IPersonalRooms, PersonalRoomsModelType } from "@/src/types/personalRoomsTypes";
 | 
				
			||||||
import { IApartment, IGardening, IPlacedDecosDatabase } from "@/src/types/shipTypes";
 | 
					import { IApartment, IGardening, IPlacedDecosDatabase, IPictureFrameInfo } from "@/src/types/shipTypes";
 | 
				
			||||||
import { Schema, model } from "mongoose";
 | 
					import { Schema, model } from "mongoose";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const pictureFrameInfoSchema = new Schema<IPictureFrameInfo>(
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Image: String,
 | 
				
			||||||
 | 
					        Filter: String,
 | 
				
			||||||
 | 
					        XOffset: Number,
 | 
				
			||||||
 | 
					        YOffset: Number,
 | 
				
			||||||
 | 
					        Scale: Number,
 | 
				
			||||||
 | 
					        InvertX: Boolean,
 | 
				
			||||||
 | 
					        InvertY: Boolean,
 | 
				
			||||||
 | 
					        ColorCorrection: Number,
 | 
				
			||||||
 | 
					        Text: String,
 | 
				
			||||||
 | 
					        TextScale: Number,
 | 
				
			||||||
 | 
					        TextColorA: Number,
 | 
				
			||||||
 | 
					        TextColorB: Number,
 | 
				
			||||||
 | 
					        TextOrientation: Number
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    { id: false, _id: false }
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const placedDecosSchema = new Schema<IPlacedDecosDatabase>(
 | 
					const placedDecosSchema = new Schema<IPlacedDecosDatabase>(
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Type: String,
 | 
					        Type: String,
 | 
				
			||||||
        Pos: [Number],
 | 
					        Pos: [Number],
 | 
				
			||||||
        Rot: [Number],
 | 
					        Rot: [Number],
 | 
				
			||||||
        Scale: Number
 | 
					        Scale: Number,
 | 
				
			||||||
 | 
					        PictureFrameInfo: { type: pictureFrameInfoSchema, default: undefined }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    { id: false }
 | 
					    { id: false }
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
				
			|||||||
@ -51,6 +51,7 @@ import { sellController } from "@/src/controllers/api/sellController";
 | 
				
			|||||||
import { setActiveQuestController } from "@/src/controllers/api/setActiveQuestController";
 | 
					import { setActiveQuestController } from "@/src/controllers/api/setActiveQuestController";
 | 
				
			||||||
import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
 | 
					import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
 | 
				
			||||||
import { setBootLocationController } from "@/src/controllers/api/setBootLocationController";
 | 
					import { setBootLocationController } from "@/src/controllers/api/setBootLocationController";
 | 
				
			||||||
 | 
					import { setPlacedDecoInfoController } from "@/src/controllers/api/setPlacedDecoInfoController";
 | 
				
			||||||
import { setShipCustomizationsController } from "@/src/controllers/api/setShipCustomizationsController";
 | 
					import { setShipCustomizationsController } from "@/src/controllers/api/setShipCustomizationsController";
 | 
				
			||||||
import { setSupportedSyndicateController } from "@/src/controllers/api/setSupportedSyndicateController";
 | 
					import { setSupportedSyndicateController } from "@/src/controllers/api/setSupportedSyndicateController";
 | 
				
			||||||
import { setWeaponSkillTreeController } from "../controllers/api/setWeaponSkillTreeController";
 | 
					import { setWeaponSkillTreeController } from "../controllers/api/setWeaponSkillTreeController";
 | 
				
			||||||
@ -128,6 +129,7 @@ apiRouter.post("/purchase.php", purchaseController);
 | 
				
			|||||||
apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
 | 
					apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
 | 
				
			||||||
apiRouter.post("/saveLoadout.php", saveLoadoutController);
 | 
					apiRouter.post("/saveLoadout.php", saveLoadoutController);
 | 
				
			||||||
apiRouter.post("/sell.php", sellController);
 | 
					apiRouter.post("/sell.php", sellController);
 | 
				
			||||||
 | 
					apiRouter.post("/setPlacedDecoInfo.php", setPlacedDecoInfoController);
 | 
				
			||||||
apiRouter.post("/setShipCustomizations.php", setShipCustomizationsController);
 | 
					apiRouter.post("/setShipCustomizations.php", setShipCustomizationsController);
 | 
				
			||||||
apiRouter.post("/setWeaponSkillTree.php", setWeaponSkillTreeController);
 | 
					apiRouter.post("/setWeaponSkillTree.php", setWeaponSkillTreeController);
 | 
				
			||||||
apiRouter.post("/shipDecorations.php", shipDecorationsController);
 | 
					apiRouter.post("/shipDecorations.php", shipDecorationsController);
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,8 @@ import {
 | 
				
			|||||||
    ISetShipCustomizationsRequest,
 | 
					    ISetShipCustomizationsRequest,
 | 
				
			||||||
    IShipDatabase,
 | 
					    IShipDatabase,
 | 
				
			||||||
    IShipDecorationsRequest,
 | 
					    IShipDecorationsRequest,
 | 
				
			||||||
    IShipDecorationsResponse
 | 
					    IShipDecorationsResponse,
 | 
				
			||||||
 | 
					    ISetPlacedDecoInfoRequest
 | 
				
			||||||
} from "@/src/types/shipTypes";
 | 
					} from "@/src/types/shipTypes";
 | 
				
			||||||
import { logger } from "@/src/utils/logger";
 | 
					import { logger } from "@/src/utils/logger";
 | 
				
			||||||
import { Types } from "mongoose";
 | 
					import { Types } from "mongoose";
 | 
				
			||||||
@ -131,3 +132,23 @@ export const handleSetShipDecorations = async (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return { DecoId: decoId.toString(), Room: placedDecoration.Room, IsApartment: placedDecoration.IsApartment };
 | 
					    return { DecoId: decoId.toString(), Room: placedDecoration.Room, IsApartment: placedDecoration.IsApartment };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const handleSetPlacedDecoInfo = async (accountId: string, req: ISetPlacedDecoInfoRequest): Promise<void> => {
 | 
				
			||||||
 | 
					    const personalRooms = await getPersonalRooms(accountId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const room = personalRooms.Ship.Rooms.find(room => room.Name === req.Room);
 | 
				
			||||||
 | 
					    if (!room) {
 | 
				
			||||||
 | 
					        logger.error("room not found");
 | 
				
			||||||
 | 
					        throw new Error("room not found");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const placedDeco = room.PlacedDecos?.find(x => x._id.toString() == req.DecoId);
 | 
				
			||||||
 | 
					    if (!placedDeco) {
 | 
				
			||||||
 | 
					        logger.error("deco not found");
 | 
				
			||||||
 | 
					        throw new Error("deco not found");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    placedDeco.PictureFrameInfo = req.PictureFrameInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await personalRooms.save();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -70,6 +70,7 @@ export interface IPlacedDecosDatabase {
 | 
				
			|||||||
    Pos: [number, number, number];
 | 
					    Pos: [number, number, number];
 | 
				
			||||||
    Rot: [number, number, number];
 | 
					    Rot: [number, number, number];
 | 
				
			||||||
    Scale: number;
 | 
					    Scale: number;
 | 
				
			||||||
 | 
					    PictureFrameInfo?: IPictureFrameInfo;
 | 
				
			||||||
    _id: Types.ObjectId;
 | 
					    _id: Types.ObjectId;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -115,3 +116,27 @@ export interface IShipDecorationsResponse {
 | 
				
			|||||||
    OldRoom?: string;
 | 
					    OldRoom?: string;
 | 
				
			||||||
    NewRoom?: string;
 | 
					    NewRoom?: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface ISetPlacedDecoInfoRequest {
 | 
				
			||||||
 | 
					    DecoType: string;
 | 
				
			||||||
 | 
					    DecoId: string;
 | 
				
			||||||
 | 
					    Room: string;
 | 
				
			||||||
 | 
					    PictureFrameInfo: IPictureFrameInfo;
 | 
				
			||||||
 | 
					    BootLocation: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IPictureFrameInfo {
 | 
				
			||||||
 | 
					    Image: string;
 | 
				
			||||||
 | 
					    Filter: string;
 | 
				
			||||||
 | 
					    XOffset: number;
 | 
				
			||||||
 | 
					    YOffset: number;
 | 
				
			||||||
 | 
					    Scale: number;
 | 
				
			||||||
 | 
					    InvertX: boolean;
 | 
				
			||||||
 | 
					    InvertY: boolean;
 | 
				
			||||||
 | 
					    ColorCorrection: number;
 | 
				
			||||||
 | 
					    Text: string;
 | 
				
			||||||
 | 
					    TextScale: number;
 | 
				
			||||||
 | 
					    TextColorA: number;
 | 
				
			||||||
 | 
					    TextColorB: number;
 | 
				
			||||||
 | 
					    TextOrientation: number;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user