forked from OpenWF/SpaceNinjaServer
feat: track RosterActivity in clan log (#1173)
Reviewed-on: OpenWF/SpaceNinjaServer#1173
This commit is contained in:
parent
3a995ef6d1
commit
6508d16190
@ -1,22 +1,36 @@
|
|||||||
import { Guild, GuildMember } from "@/src/models/guildModel";
|
import { Guild, GuildMember } from "@/src/models/guildModel";
|
||||||
import { getGuildClient, updateInventoryForConfirmedGuildJoin } from "@/src/services/guildService";
|
import { getGuildClient, updateInventoryForConfirmedGuildJoin } from "@/src/services/guildService";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest, getSuffixedName } from "@/src/services/loginService";
|
||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
|
|
||||||
export const confirmGuildInvitationController: RequestHandler = async (req, res) => {
|
export const confirmGuildInvitationController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const account = await getAccountForRequest(req);
|
||||||
const guildMember = await GuildMember.findOne({
|
const guildMember = await GuildMember.findOne({
|
||||||
accountId: accountId,
|
accountId: account._id,
|
||||||
guildId: req.query.clanId as string
|
guildId: req.query.clanId as string
|
||||||
});
|
});
|
||||||
if (guildMember) {
|
if (guildMember) {
|
||||||
guildMember.status = 0;
|
guildMember.status = 0;
|
||||||
await guildMember.save();
|
await guildMember.save();
|
||||||
await updateInventoryForConfirmedGuildJoin(accountId, new Types.ObjectId(req.query.clanId as string));
|
|
||||||
|
await updateInventoryForConfirmedGuildJoin(
|
||||||
|
account._id.toString(),
|
||||||
|
new Types.ObjectId(req.query.clanId as string)
|
||||||
|
);
|
||||||
|
|
||||||
const guild = (await Guild.findOne({ _id: req.query.clanId as string }))!;
|
const guild = (await Guild.findOne({ _id: req.query.clanId as string }))!;
|
||||||
|
|
||||||
|
guild.RosterActivity ??= [];
|
||||||
|
guild.RosterActivity.push({
|
||||||
|
dateTime: new Date(),
|
||||||
|
entryType: 6,
|
||||||
|
details: getSuffixedName(account)
|
||||||
|
});
|
||||||
|
await guild.save();
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
...(await getGuildClient(guild, accountId)),
|
...(await getGuildClient(guild, account._id.toString())),
|
||||||
InventoryChanges: {
|
InventoryChanges: {
|
||||||
Recipes: [
|
Recipes: [
|
||||||
{
|
{
|
||||||
|
@ -25,6 +25,13 @@ export const getGuildLogController: RequestHandler = async (req, res) => {
|
|||||||
details: entry.details
|
details: entry.details
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
guild.RosterActivity?.forEach(entry => {
|
||||||
|
log.RosterActivity.push({
|
||||||
|
dateTime: toMongoDate(entry.dateTime),
|
||||||
|
entryType: entry.entryType,
|
||||||
|
details: entry.details
|
||||||
|
});
|
||||||
|
});
|
||||||
guild.ClassChanges?.forEach(entry => {
|
guild.ClassChanges?.forEach(entry => {
|
||||||
log.ClassChanges.push({
|
log.ClassChanges.push({
|
||||||
dateTime: toMongoDate(entry.dateTime),
|
dateTime: toMongoDate(entry.dateTime),
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
import { GuildMember } from "@/src/models/guildModel";
|
import { GuildMember } from "@/src/models/guildModel";
|
||||||
|
import { Account } from "@/src/models/loginModel";
|
||||||
import { getGuildForRequest } from "@/src/services/guildService";
|
import { getGuildForRequest } from "@/src/services/guildService";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "@/src/services/inventoryService";
|
||||||
|
import { getAccountForRequest, getSuffixedName } from "@/src/services/loginService";
|
||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
|
|
||||||
export const removeFromGuildController: RequestHandler = async (req, res) => {
|
export const removeFromGuildController: RequestHandler = async (req, res) => {
|
||||||
|
const account = await getAccountForRequest(req);
|
||||||
const guild = await getGuildForRequest(req);
|
const guild = await getGuildForRequest(req);
|
||||||
// TODO: Check permissions
|
// TODO: Check permissions
|
||||||
const payload = JSON.parse(String(req.body)) as IRemoveFromGuildRequest;
|
const payload = JSON.parse(String(req.body)) as IRemoveFromGuildRequest;
|
||||||
@ -32,6 +35,25 @@ export const removeFromGuildController: RequestHandler = async (req, res) => {
|
|||||||
}
|
}
|
||||||
await GuildMember.deleteOne({ _id: guildMember._id });
|
await GuildMember.deleteOne({ _id: guildMember._id });
|
||||||
|
|
||||||
|
guild.RosterActivity ??= [];
|
||||||
|
if (account._id.equals(payload.userId)) {
|
||||||
|
// Leave
|
||||||
|
guild.RosterActivity.push({
|
||||||
|
dateTime: new Date(),
|
||||||
|
entryType: 7,
|
||||||
|
details: getSuffixedName(account)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Kick
|
||||||
|
const kickee = (await Account.findOne({ _id: payload.userId }))!;
|
||||||
|
guild.RosterActivity.push({
|
||||||
|
dateTime: new Date(),
|
||||||
|
entryType: 12,
|
||||||
|
details: getSuffixedName(kickee) + "," + getSuffixedName(account)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
await guild.save();
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
_id: payload.userId,
|
_id: payload.userId,
|
||||||
ItemToRemove: "/Lotus/Types/Keys/DojoKey",
|
ItemToRemove: "/Lotus/Types/Keys/DojoKey",
|
||||||
|
@ -5,8 +5,8 @@ import {
|
|||||||
IDojoDecoDatabase,
|
IDojoDecoDatabase,
|
||||||
ILongMOTD,
|
ILongMOTD,
|
||||||
IGuildMemberDatabase,
|
IGuildMemberDatabase,
|
||||||
IGuildLogClassChange,
|
IGuildLogEntryNumber,
|
||||||
IGuildLogTechChange,
|
IGuildLogEntryString,
|
||||||
IGuildRank
|
IGuildRank
|
||||||
} from "@/src/types/guildTypes";
|
} from "@/src/types/guildTypes";
|
||||||
import { Document, Model, model, Schema, Types } from "mongoose";
|
import { Document, Model, model, Schema, Types } from "mongoose";
|
||||||
@ -106,7 +106,7 @@ const defaultRanks: IGuildRank[] = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
const guildLogTechChangeSchema = new Schema<IGuildLogTechChange>(
|
const guildLogEntryStringSchema = new Schema<IGuildLogEntryString>(
|
||||||
{
|
{
|
||||||
dateTime: Date,
|
dateTime: Date,
|
||||||
entryType: Number,
|
entryType: Number,
|
||||||
@ -115,7 +115,7 @@ const guildLogTechChangeSchema = new Schema<IGuildLogTechChange>(
|
|||||||
{ _id: false }
|
{ _id: false }
|
||||||
);
|
);
|
||||||
|
|
||||||
const guildLogClassChangeSchema = new Schema<IGuildLogClassChange>(
|
const guildLogEntryNumberSchema = new Schema<IGuildLogEntryNumber>(
|
||||||
{
|
{
|
||||||
dateTime: Date,
|
dateTime: Date,
|
||||||
entryType: Number,
|
entryType: Number,
|
||||||
@ -146,8 +146,9 @@ const guildSchema = new Schema<IGuildDatabase>(
|
|||||||
CeremonyContributors: { type: [Types.ObjectId], default: undefined },
|
CeremonyContributors: { type: [Types.ObjectId], default: undefined },
|
||||||
CeremonyResetDate: Date,
|
CeremonyResetDate: Date,
|
||||||
CeremonyEndo: Number,
|
CeremonyEndo: Number,
|
||||||
TechChanges: { type: [guildLogTechChangeSchema], default: undefined },
|
TechChanges: { type: [guildLogEntryStringSchema], default: undefined },
|
||||||
ClassChanges: { type: [guildLogClassChangeSchema], default: undefined }
|
RosterActivity: { type: [guildLogEntryStringSchema], default: undefined },
|
||||||
|
ClassChanges: { type: [guildLogEntryNumberSchema], default: undefined }
|
||||||
},
|
},
|
||||||
{ id: false }
|
{ id: false }
|
||||||
);
|
);
|
||||||
|
@ -48,8 +48,9 @@ export interface IGuildDatabase {
|
|||||||
CeremonyContributors?: Types.ObjectId[];
|
CeremonyContributors?: Types.ObjectId[];
|
||||||
CeremonyResetDate?: Date;
|
CeremonyResetDate?: Date;
|
||||||
|
|
||||||
TechChanges?: IGuildLogTechChange[];
|
TechChanges?: IGuildLogEntryString[];
|
||||||
ClassChanges?: IGuildLogClassChange[];
|
RosterActivity?: IGuildLogEntryString[];
|
||||||
|
ClassChanges?: IGuildLogEntryNumber[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ILongMOTD {
|
export interface ILongMOTD {
|
||||||
@ -186,13 +187,13 @@ export interface ITechProjectDatabase extends Omit<ITechProjectClient, "Completi
|
|||||||
CompletionDate?: Date;
|
CompletionDate?: Date;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IGuildLogTechChange {
|
export interface IGuildLogEntryString {
|
||||||
dateTime: Date;
|
dateTime: Date;
|
||||||
entryType: number;
|
entryType: number;
|
||||||
details: string;
|
details: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IGuildLogClassChange {
|
export interface IGuildLogEntryNumber {
|
||||||
dateTime: Date;
|
dateTime: Date;
|
||||||
entryType: number;
|
entryType: number;
|
||||||
details: number;
|
details: number;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user