XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

SpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 1 Star 0
返回提交历史

XFEstudio/SpaceNinjaServer

feat: Clan creation & persistence (#146)

d07e99f0
Sainan <sainan@calamity.gg>
提交于

代码差异

7 个文件 +99 -1
Added src/controllers/api/createGuildController.ts +35 -0
@@ -0,0 +1,35 @@
1 import { RequestHandler } from "express";
2 import { getJSONfromString } from "@/src/helpers/stringHelpers";
3 import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
4 import { Guild } from "@/src/models/guildModel";
5 import { IGuild, ICreateGuildRequest } from "@/src/types/guildTypes";
6
7 const createGuildController: RequestHandler = async (req, res) => {
8 let payload: ICreateGuildRequest = getJSONfromString(req.body.toString());
9
10 // Create guild on database
11 let guild = new Guild({
12 Name: payload.guildName
13 } satisfies IGuild);
14 await guild.save();
15
16 // Update inventory
17 let inventory = await Inventory.findOne({ accountOwnerId: req.query.accountId });
18 if (inventory) {
19 // Set GuildId
20 inventory.GuildId = guild._id;
21
22 // Give clan key
23 inventory.LevelKeys ??= [];
24 inventory.LevelKeys.push({
25 ItemType: "/Lotus/Types/Keys/DojoKey",
26 ItemCount: 1
27 });
28
29 await inventory.save();
30 }
31
32 res.json(guild);
33 };
34
35 export { createGuildController };
Modified src/controllers/api/getGuildController.ts +19 -1
@@ -1,6 +1,24 @@
1 1 import { RequestHandler } from "express";
2 import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
3 import { Guild } from "@/src/models/guildModel";
2 4
3 const getGuildController: RequestHandler = (_req, res) => {
5 const getGuildController: RequestHandler = async (req, res) => {
6 if (!req.query.accountId) {
7 res.status(400).json({ error: "accountId was not provided" });
8 return;
9 }
10 const inventory = await Inventory.findOne({ accountOwnerId: req.query.accountId });
11 if (!inventory) {
12 res.status(400).json({ error: "inventory was undefined" });
13 return;
14 }
15 if (inventory.GuildId) {
16 const guild = await Guild.findOne({ _id: inventory.GuildId });
17 if (guild) {
18 res.json(guild);
19 return;
20 }
21 }
4 22 res.json({});
5 23 };
6 24
Added src/models/guildModel.ts +16 -0
@@ -0,0 +1,16 @@
1 import { IGuild, IDatabaseGuild } from "@/src/types/guildTypes";
2 import { model, Schema } from "mongoose";
3 import { toOid } from "@/src/helpers/inventoryHelpers";
4
5 const guildSchema = new Schema<IGuild>({
6 Name: { type: String, required: true }
7 });
8
9 guildSchema.set("toJSON", {
10 virtuals: true,
11 transform(_document, guild) {
12 guild._id = toOid(guild._id);
13 }
14 });
15
16 export const Guild = model<IGuild>("Guild", guildSchema);
Modified src/models/inventoryModels/inventoryModel.ts +6 -0
@@ -874,6 +874,9 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
874 874 //You first Dialog with NPC or use new Item
875 875 NodeIntrosCompleted: [String],
876 876
877 //Current guild id, if applicable.
878 GuildId: { type: Schema.Types.ObjectId, ref: "Guild" },
879
877 880 //https://warframe.fandom.com/wiki/Heist
878 881 //ProfitTaker(1-4) Example:"LocationTag": "EudicoHeists", "Jobs":Mission name
879 882 CompletedJobChains: [completedJobChainsSchema],
@@ -971,6 +974,9 @@ inventorySchema.set("toJSON", {
971 974
972 975 inventoryResponse.TrainingDate = toMongoDate(inventoryDatabase.TrainingDate);
973 976 inventoryResponse.Created = toMongoDate(inventoryDatabase.Created);
977 if (inventoryDatabase.GuildId) {
978 inventoryResponse.GuildId = toOid(inventoryDatabase.GuildId);
979 }
974 980 if (inventoryResponse.BlessingCooldown) {
975 981 inventoryResponse.BlessingCooldown = toMongoDate(inventoryDatabase.BlessingCooldown);
976 982 }
Modified src/routes/api.ts +2 -0
@@ -43,6 +43,7 @@ import { setActiveShipController } from "@/src/controllers/api/setActiveShipCont
43 43 import { updateThemeController } from "../controllers/api/updateThemeController";
44 44 import { getGuildController } from "@/src/controllers/api/getGuildController";
45 45 import { addFriendImageController } from "@/src/controllers/api/addFriendImageController";
46 import { createGuildController } from "@/src/controllers/api/createGuildController";
46 47
47 48 const apiRouter = express.Router();
48 49
@@ -96,5 +97,6 @@ apiRouter.post("/saveLoadout.php", saveLoadoutController);
96 97 apiRouter.post("/trainingResult.php", trainingResultController);
97 98 apiRouter.post("/updateTheme.php", updateThemeController);
98 99 apiRouter.post("/addFriendImage.php", addFriendImageController);
100 apiRouter.post("/createGuild.php", createGuildController);
99 101
100 102 export { apiRouter };
Added src/types/guildTypes.ts +18 -0
@@ -0,0 +1,18 @@
1 import { Types } from "mongoose";
2 import { IOid } from "@/src/types/commonTypes";
3
4 export interface IGuild {
5 Name: string;
6 }
7
8 export interface IDatabaseGuild extends IGuild {
9 _id: Types.ObjectId;
10 }
11
12 export interface IGuildResponse extends IGuild {
13 _id: IOid;
14 }
15
16 export interface ICreateGuildRequest {
17 guildName: string;
18 }
Modified src/types/inventoryTypes/inventoryTypes.ts +3 -0
@@ -21,6 +21,7 @@ export interface IInventoryDatabase
21 21 | "TrainingDate"
22 22 | "LoadOutPresets"
23 23 | "Mailbox"
24 | "GuildId"
24 25 | "PendingRecipes"
25 26 | "Created"
26 27 | "QuestKeys"
@@ -32,6 +33,7 @@ export interface IInventoryDatabase
32 33 TrainingDate: Date; // TrainingDate changed from IMongoDate to Date
33 34 LoadOutPresets: Types.ObjectId; // LoadOutPresets changed from ILoadOutPresets to Types.ObjectId for population
34 35 Mailbox: Types.ObjectId; // Mailbox changed from IMailbox to Types.ObjectId
36 GuildId?: Types.ObjectId; // GuildId changed from ?IOid to ?Types.ObjectId
35 37 PendingRecipes: IPendingRecipe[];
36 38 QuestKeys: IQuestKeyDatabase[];
37 39 BlessingCooldown: Date;
@@ -232,6 +234,7 @@ export interface IInventoryResponse {
232 234 RecentVendorPurchases: Array<number | string>;
233 235 Hoverboards: IHoverboard[];
234 236 NodeIntrosCompleted: string[];
237 GuildId?: IOid;
235 238 CompletedJobChains: ICompletedJobChain[];
236 239 SeasonChallengeHistory: ISeasonChallengeHistory[];
237 240 MoaPets: IMoaPet[];