68 lines
2.3 KiB
TypeScript
68 lines
2.3 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;
|
|
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;
|
|
}>;
|
|
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 }
|
|
}
|
|
]
|
|
},
|
|
{ timestamps: true }
|
|
);
|
|
|
|
gameSchema.index({ gameDate: 1, gameNumber: 1 }, { unique: true });
|
|
|
|
export const GameModel = (models.Game as Model<GameDocument>) || model<GameDocument>("Game", gameSchema);
|