diff --git a/src/controllers/api/contributeGuildClassController.ts b/src/controllers/api/contributeGuildClassController.ts index d0c91539..c5e878f7 100644 --- a/src/controllers/api/contributeGuildClassController.ts +++ b/src/controllers/api/contributeGuildClassController.ts @@ -20,6 +20,12 @@ export const contributeGuildClassController: RequestHandler = async (req, res) = for (let i = guild.Class; i != guild.CeremonyClass; ++i) { guild.CeremonyEndo += (i + 1) * 1000; } + guild.ClassChanges ??= []; + guild.ClassChanges.push({ + dateTime: new Date(), + entryType: 13, + details: guild.CeremonyClass + }); } guild.CeremonyContributors.push(new Types.ObjectId(accountId)); diff --git a/src/controllers/api/getGuildLogController.ts b/src/controllers/api/getGuildLogController.ts index 2919ce31..ab19f5e1 100644 --- a/src/controllers/api/getGuildLogController.ts +++ b/src/controllers/api/getGuildLogController.ts @@ -1,11 +1,37 @@ +import { toMongoDate } from "@/src/helpers/inventoryHelpers"; +import { Guild } from "@/src/models/guildModel"; +import { getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { IMongoDate } from "@/src/types/commonTypes"; import { RequestHandler } from "express"; -export const getGuildLogController: RequestHandler = (_req, res) => { - res.json({ +export const getGuildLogController: RequestHandler = async (req, res) => { + const log: Record = { RoomChanges: [], TechChanges: [], RosterActivity: [], StandingsUpdates: [], ClassChanges: [] - }); + }; + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId); + if (inventory.GuildId) { + const guild = await Guild.findOne({ _id: inventory.GuildId }); + if (guild) { + guild.ClassChanges?.forEach(entry => { + log.ClassChanges.push({ + dateTime: toMongoDate(entry.dateTime), + entryType: entry.entryType, + details: entry.details + }); + }); + } + } + res.json(log); }; + +interface IGuildLogEntryClient { + dateTime: IMongoDate; + entryType: number; + details: number | string; +} diff --git a/src/models/guildModel.ts b/src/models/guildModel.ts index 9815d257..f1d16068 100644 --- a/src/models/guildModel.ts +++ b/src/models/guildModel.ts @@ -5,7 +5,8 @@ import { ITechProjectClient, IDojoDecoDatabase, ILongMOTD, - IGuildMemberDatabase + IGuildMemberDatabase, + IGuildLogClassChange } from "@/src/types/guildTypes"; import { Document, Model, model, Schema, Types } from "mongoose"; import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel"; @@ -69,6 +70,15 @@ const longMOTDSchema = new Schema( { _id: false } ); +const guildLogClassChangeSchema = new Schema( + { + dateTime: Date, + entryType: Number, + details: Number + }, + { _id: false } +); + const guildSchema = new Schema( { Name: { type: String, required: true, unique: true }, @@ -89,7 +99,8 @@ const guildSchema = new Schema( CeremonyClass: Number, CeremonyContributors: { type: [Types.ObjectId], default: undefined }, CeremonyResetDate: Date, - CeremonyEndo: Number + CeremonyEndo: Number, + ClassChanges: { type: [guildLogClassChangeSchema], default: undefined } }, { id: false } ); diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index 7f241212..01348693 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -46,6 +46,8 @@ export interface IGuildDatabase { CeremonyEndo?: number; CeremonyContributors?: Types.ObjectId[]; CeremonyResetDate?: Date; + + ClassChanges?: IGuildLogClassChange[]; } export interface ILongMOTD { @@ -160,3 +162,9 @@ export interface ITechProjectClient { export interface ITechProjectDatabase extends Omit { CompletionDate?: Date; } + +export interface IGuildLogClassChange { + dateTime: Date; + entryType: number; + details: number; +}