返回提交历史
Added
src/controllers/api/createGuildController.ts
+35
-0
Modified
src/controllers/api/getGuildController.ts
+19
-1
Added
src/models/guildModel.ts
+16
-0
Modified
src/models/inventoryModels/inventoryModel.ts
+6
-0
Modified
src/routes/api.ts
+2
-0
Added
src/types/guildTypes.ts
+18
-0
Modified
src/types/inventoryTypes/inventoryTypes.ts
+3
-0
XFEstudio/SpaceNinjaServer
feat: Clan creation & persistence (#146)
d07e99f0
代码差异
7 个文件
+99
-1
@@ -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 };
@@ -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
@@ -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);
@@ -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
}
@@ -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 };
@@ -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
}
@@ -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[];