Files
2024-07-13 10:19:09 -04:00

35 lines
1.7 KiB
JavaScript

const mongoose = require("mongoose");
const gameSchema = new mongoose.Schema({
players: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }], // This remains to keep track of all players in the game
playerPayments: [{
player: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
payment: { type: mongoose.Schema.Types.ObjectId, ref: 'Payment', default: null } // Reference to their payment
}],
history: [{
state: [[String]], // 2D array representing the game's final state
winner: { type: mongoose.Schema.Types.ObjectId, ref: 'User', default: null }, // Game winner
startedAt: { type: Date, default: Date.now },
tie: { type: Boolean, default: false }, // Indicates if the game ended in a tie
}],
winner: { type: mongoose.Schema.Types.ObjectId, ref: 'User', default: null },
status: { type: String, enum: ['waiting', 'active', 'finished', 'finished-forfeit', 'finished-both-disconnected'], default: 'waiting' },
createdAt: { type: Date, default: Date.now },
roomId: { type: String, required: true, unique: true }, // Makes `roomId` a required field
payoutStatus: { type: String, enum: ['paid', 'refund', 'pending'], default: 'pending' },
payoutPayments: [{
player: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
payment: { type: mongoose.Schema.Types.ObjectId, ref: 'Payment', default: null }
}],
// New fields for series handling
series: {
totalGames: { type: Number, default: 3 }, // Default to a best-of-3 series
scores: [{
player: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, // Reference to the User model
score: Number
}]
}
});
module.exports = Game = mongoose.model('Game', gameSchema);