feat: donate credits to alliance vault (#1436)

Reviewed-on: OpenWF/SpaceNinjaServer#1436
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
Sainan 2025-04-02 13:26:44 -07:00 committed by Sainan
parent 2173bdb8b8
commit 6dc54ed893
4 changed files with 28 additions and 6 deletions

View File

@ -1,4 +1,4 @@
import { GuildMember } from "@/src/models/guildModel"; import { Alliance, GuildMember } from "@/src/models/guildModel";
import { import {
addGuildMemberMiscItemContribution, addGuildMemberMiscItemContribution,
addVaultMiscItems, addVaultMiscItems,
@ -19,12 +19,27 @@ export const contributeToVaultController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req); const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId RegularCredits MiscItems ShipDecorations FusionTreasures"); const inventory = await getInventory(accountId, "GuildId RegularCredits MiscItems ShipDecorations FusionTreasures");
const guild = await getGuildForRequestEx(req, inventory); const guild = await getGuildForRequestEx(req, inventory);
const request = JSON.parse(String(req.body)) as IContributeToVaultRequest;
if (request.Alliance) {
const alliance = (await Alliance.findById(guild.AllianceId!))!;
alliance.VaultRegularCredits ??= 0;
alliance.VaultRegularCredits += request.RegularCredits;
if (request.FromVault) {
guild.VaultRegularCredits! -= request.RegularCredits;
await Promise.all([guild.save(), alliance.save()]);
} else {
updateCurrency(inventory, request.RegularCredits, false);
await Promise.all([inventory.save(), alliance.save()]);
}
res.end();
return;
}
const guildMember = (await GuildMember.findOne( const guildMember = (await GuildMember.findOne(
{ accountId, guildId: guild._id }, { accountId, guildId: guild._id },
"RegularCreditsContributed MiscItemsContributed ShipDecorationsContributed" "RegularCreditsContributed MiscItemsContributed ShipDecorationsContributed"
))!; ))!;
const request = JSON.parse(String(req.body)) as IContributeToVaultRequest;
if (request.RegularCredits) { if (request.RegularCredits) {
updateCurrency(inventory, request.RegularCredits, false); updateCurrency(inventory, request.RegularCredits, false);
@ -69,4 +84,6 @@ interface IContributeToVaultRequest {
MiscItems: IMiscItem[]; MiscItems: IMiscItem[];
ShipDecorations: ITypeCount[]; ShipDecorations: ITypeCount[];
FusionTreasures: IFusionTreasure[]; FusionTreasures: IFusionTreasure[];
Alliance?: boolean;
FromVault?: boolean;
} }

View File

@ -254,7 +254,8 @@ const allianceSchema = new Schema<IAllianceDatabase>({
Name: String, Name: String,
MOTD: longMOTDSchema, MOTD: longMOTDSchema,
LongMOTD: longMOTDSchema, LongMOTD: longMOTDSchema,
Emblem: Boolean Emblem: Boolean,
VaultRegularCredits: Number
}); });
allianceSchema.index({ Name: 1 }, { unique: true }); allianceSchema.index({ Name: 1 }, { unique: true });

View File

@ -581,6 +581,9 @@ export const getAllianceClient = async (
return { return {
_id: toOid(alliance._id), _id: toOid(alliance._id),
Name: alliance.Name, Name: alliance.Name,
Clans: clans Clans: clans,
AllianceVault: {
DojoRefundRegularCredits: alliance.VaultRegularCredits
}
}; };
}; };

View File

@ -282,6 +282,7 @@ export interface IAllianceClient {
CrossPlatformEnabled?: boolean; CrossPlatformEnabled?: boolean;
Clans: IAllianceMemberClient[]; Clans: IAllianceMemberClient[];
OriginalPlatform?: number; OriginalPlatform?: number;
AllianceVault?: IGuildVault;
} }
export interface IAllianceDatabase { export interface IAllianceDatabase {
@ -290,6 +291,7 @@ export interface IAllianceDatabase {
MOTD?: ILongMOTD; MOTD?: ILongMOTD;
LongMOTD?: ILongMOTD; LongMOTD?: ILongMOTD;
Emblem?: boolean; Emblem?: boolean;
VaultRegularCredits?: number;
} }
export interface IAllianceMemberClient { export interface IAllianceMemberClient {
@ -318,5 +320,4 @@ export interface IAllianceMemberDatabase {
// TODO: GET /api/divvyAllianceVault.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0&allianceId=000000000000000000000069&credits=0 // TODO: GET /api/divvyAllianceVault.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0&allianceId=000000000000000000000069&credits=0
// TODO: GET /api/removeFromAlliance.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0 // TODO: GET /api/removeFromAlliance.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0
// TODO: GET /api/setAllianceGuildPermissions.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=000000000000000000000042&perms=2 // TODO: GET /api/setAllianceGuildPermissions.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=000000000000000000000042&perms=2
// TODO: Handle alliance in contributeToVault
// TODO: Handle alliance in setGuildMotd // TODO: Handle alliance in setGuildMotd