diff --git a/src/controllers/api/createGuildController.ts b/src/controllers/api/createGuildController.ts index 8bc34408..ecaabfdd 100644 --- a/src/controllers/api/createGuildController.ts +++ b/src/controllers/api/createGuildController.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; -import { Guild } from "@/src/models/guildModel"; +import { Guild, GuildMember } from "@/src/models/guildModel"; export const createGuildController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -14,6 +14,14 @@ export const createGuildController: RequestHandler = async (req, res) => { }); await guild.save(); + // Create guild member on database + await GuildMember.insertOne({ + accountId: accountId, + guildId: guild._id, + status: 0, + rank: 0 + }); + // Update inventory const inventory = await Inventory.findOne({ accountOwnerId: accountId }); if (inventory) { diff --git a/src/controllers/api/getGuildController.ts b/src/controllers/api/getGuildController.ts index e96d7be7..71fedaf6 100644 --- a/src/controllers/api/getGuildController.ts +++ b/src/controllers/api/getGuildController.ts @@ -1,6 +1,6 @@ import { RequestHandler } from "express"; import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; -import { Guild } from "@/src/models/guildModel"; +import { Guild, GuildMember } from "@/src/models/guildModel"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers"; import { getGuildVault } from "@/src/services/guildService"; @@ -23,6 +23,24 @@ const getGuildController: RequestHandler = async (req, res) => { guild.CeremonyResetDate = undefined; await guild.save(); } + const guildMembers = await GuildMember.find({ guildId: inventory.GuildId }); + + // Handle clans created prior to creation of the GuildMember model. + let missingEntry = true; + for (const guildMember of guildMembers) { + if (guildMember.accountId.equals(accountId)) { + missingEntry = false; + } + } + if (missingEntry) { + await GuildMember.insertOne({ + accountId: accountId, + guildId: inventory.GuildId, + status: 0, + rank: 0 + }); + } + res.json({ _id: toOid(guild._id), Name: guild.Name, diff --git a/src/controllers/custom/deleteAccountController.ts b/src/controllers/custom/deleteAccountController.ts index fb8ca399..cb249d69 100644 --- a/src/controllers/custom/deleteAccountController.ts +++ b/src/controllers/custom/deleteAccountController.ts @@ -7,11 +7,14 @@ import { Loadout } from "@/src/models/inventoryModels/loadoutModel"; import { PersonalRooms } from "@/src/models/personalRoomsModel"; import { Ship } from "@/src/models/shipModel"; import { Stats } from "@/src/models/statsModel"; +import { GuildMember } from "@/src/models/guildModel"; export const deleteAccountController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); + // TODO: Handle the account being the creator of a guild await Promise.all([ Account.deleteOne({ _id: accountId }), + GuildMember.deleteOne({ accountId: accountId }), Inbox.deleteMany({ ownerId: accountId }), Inventory.deleteOne({ accountOwnerId: accountId }), Loadout.deleteOne({ loadoutOwnerId: accountId }), diff --git a/src/models/guildModel.ts b/src/models/guildModel.ts index 295d52c5..d01bf585 100644 --- a/src/models/guildModel.ts +++ b/src/models/guildModel.ts @@ -4,7 +4,8 @@ import { ITechProjectDatabase, ITechProjectClient, IDojoDecoDatabase, - ILongMOTD + ILongMOTD, + IGuildMemberDatabase } from "@/src/types/guildTypes"; import { Document, Model, model, Schema, Types } from "mongoose"; import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel"; @@ -113,3 +114,12 @@ export type TGuildDatabaseDocument = Document & keyof GuildDocumentProps > & GuildDocumentProps; + +const guildMemberSchema = new Schema({ + accountId: Types.ObjectId, + guildId: Types.ObjectId, + status: { type: Number, required: true }, + rank: { type: Number, default: 7 } +}); + +export const GuildMember = model("GuildMember", guildMemberSchema); diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index 8b9fd97b..65edb353 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -35,6 +35,13 @@ export interface ILongMOTD { //authorGuildName: ""; } +export interface IGuildMemberDatabase { + accountId: Types.ObjectId; + guildId: Types.ObjectId; + status: number; + rank: number; +} + export interface IGuildVault { DojoRefundRegularCredits?: number; DojoRefundMiscItems?: IMiscItem[];