XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
UTF-8
import type { IAlertDatabase, IDailyDealDatabase, IFissureDatabase } from "../types/worldStateTypes.ts";
import { model, Schema } from "mongoose";
import { typeCountSchema } from "./inventoryModels/inventoryModel.ts";

const fissureSchema = new Schema<IFissureDatabase>({
    Activation: Date,
    Expiry: Date,
    Node: String, // must be unique
    Modifier: String,
    Hard: Boolean
});

fissureSchema.index({ Expiry: 1 }, { expireAfterSeconds: 0 }); // With this, MongoDB will automatically delete expired entries.

export const Fissure = model<IFissureDatabase>("Fissure", fissureSchema);

const dailyDealSchema = new Schema<IDailyDealDatabase>({
    StoreItem: { type: String, required: true },
    Activation: { type: Date, required: true },
    Expiry: { type: Date, required: true },
    Discount: { type: Number, required: true },
    OriginalPrice: { type: Number, required: true },
    SalePrice: { type: Number, required: true },
    AmountTotal: { type: Number, required: true },
    AmountSold: { type: Number, required: true }
});

dailyDealSchema.index({ StoreItem: 1 }, { unique: true });
dailyDealSchema.index({ Expiry: 1 }, { expireAfterSeconds: 86400 });

export const DailyDeal = model<IDailyDealDatabase>("DailyDeal", dailyDealSchema);

const alertSchema = new Schema<IAlertDatabase>({
    Activation: { type: Date, required: true },
    Expiry: { type: Date, required: true },
    MissionInfo: {
        location: { type: String, required: true },
        missionType: { type: String, required: true },
        faction: { type: String, required: true },
        difficulty: { type: Number, required: true },
        missionReward: {
            credits: { type: Number, required: true },
            items: [String],
            countedItems: [typeCountSchema]
        },
        levelOverride: String,
        enemySpec: String,
        extraEnemySpec: String,
        minEnemyLevel: { type: Number, required: true },
        maxEnemyLevel: { type: Number, required: true },
        descText: String,
        nightmare: Boolean
    }
});

alertSchema.index({ Expiry: 1 }, { expireAfterSeconds: 0 });