Files
monorepo/baseball/src/models/Game.ts
T
2026-05-06 18:31:27 +00:00

79 lines
2.8 KiB
TypeScript

import { Model, Schema, Types, model, models } from "mongoose";
export interface GameDocument {
gameDate: Date;
gameNumber: number;
activePlayerIds: Types.ObjectId[];
startingPitcherId?: Types.ObjectId | null;
lineupId?: Types.ObjectId | null;
lineupNumber?: number | null;
opponent?: string;
teamScore?: number | null;
opponentScore?: number | null;
notes?: string;
playerStats: Array<{
playerId: Types.ObjectId;
playerName: string;
pitchCount?: number | null;
atBats?: number | null;
runs?: number | null;
hits?: number | null;
doubles?: number | null;
triples?: number | null;
homeRuns?: number | null;
runsBattedIn?: number | null;
walks?: number | null;
strikeouts?: number | null;
stolenBases?: number | null;
inningsPitchedOuts?: number | null;
earnedRunsAllowed?: number | null;
hitsAllowed?: number | null;
walksAllowed?: number | null;
strikeoutsPitched?: number | null;
}>;
createdAt?: Date;
updatedAt?: Date;
}
const gameSchema = new Schema<GameDocument>(
{
gameDate: { type: Date, required: true, index: true },
gameNumber: { type: Number, required: true, min: 1 },
activePlayerIds: [{ type: Schema.Types.ObjectId, ref: "Player" }],
startingPitcherId: { type: Schema.Types.ObjectId, ref: "Player", default: null },
lineupId: { type: Schema.Types.ObjectId, ref: "Lineup", default: null },
lineupNumber: { type: Number, default: null },
opponent: { type: String, default: "" },
teamScore: { type: Number, default: null },
opponentScore: { type: Number, default: null },
notes: { type: String, default: "" },
playerStats: [
{
playerId: { type: Schema.Types.ObjectId, ref: "Player", required: true },
playerName: { type: String, required: true },
atBats: { type: Number, default: null },
runs: { type: Number, default: null },
hits: { type: Number, default: null },
doubles: { type: Number, default: null },
triples: { type: Number, default: null },
homeRuns: { type: Number, default: null },
runsBattedIn: { type: Number, default: null },
walks: { type: Number, default: null },
strikeouts: { type: Number, default: null },
stolenBases: { type: Number, default: null },
pitchCount: { type: Number, default: null },
inningsPitchedOuts: { type: Number, default: null },
earnedRunsAllowed: { type: Number, default: null },
hitsAllowed: { type: Number, default: null },
walksAllowed: { type: Number, default: null },
strikeoutsPitched: { type: Number, default: null }
}
]
},
{ timestamps: true }
);
gameSchema.index({ gameDate: 1, gameNumber: 1 }, { unique: true });
export const GameModel = (models.Game as Model<GameDocument>) || model<GameDocument>("Game", gameSchema);