mirror of
https://github.com/Qortal/qort.trade.git
synced 2026-05-01 20:19:30 +00:00
35 lines
1.7 KiB
JavaScript
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);
|