import mongoose from 'mongoose'; const BetOrderSchema = new mongoose.Schema({ sid: { type: String, index: true }, stake: { type: Number, default: 0 }, platform: { type: String, default: 'polymarket', index: true }, status: { type: String, default: 'created', index: true }, side: { type: String, default: 'BUY', index: true }, size: { type: Number }, polymarketOrderID: { type: String, index: true }, polymarketOrder: { type: mongoose.Schema.Types.Mixed }, iorsValues: { type: mongoose.Schema.Types.Mixed }, sol: { type: mongoose.Schema.Types.Mixed }, stakeLimit: { type: mongoose.Schema.Types.Mixed }, winLimit: { type: mongoose.Schema.Types.Mixed }, iorsInfo: { type: mongoose.Schema.Types.Mixed }, cpr: { type: mongoose.Schema.Types.Mixed }, gameRelation: { type: mongoose.Schema.Types.Mixed }, }, { timestamps: true, }); BetOrderSchema.index({ createdAt: -1 }); const BetOrder = mongoose.models.BetOrder || mongoose.model('BetOrder', BetOrderSchema); export const createBetOrder = async ({ sid, stake, side = 'BUY', size, polymarketOrder, iorsValues, sol, stakeLimit, winLimit, iorsInfo, cpr, gameRelation, } = {}) => { const orderID = polymarketOrder?.orderID || polymarketOrder?.id; const status = polymarketOrder?.status || 'created'; return BetOrder.create({ sid: sid != null ? String(sid) : undefined, stake: Number(stake) || 0, status, side, size: Number.isFinite(Number(size)) ? Number(size) : undefined, polymarketOrderID: orderID, polymarketOrder, iorsValues, sol, stakeLimit, winLimit, iorsInfo, cpr, gameRelation, }); } export const getBetOrders = async ({ limit = 100 } = {}) => { const queryLimit = Math.min(Math.max(Number(limit) || 100, 1), 500); return BetOrder.find({}) .sort({ createdAt: -1 }) .limit(queryLimit) .lean(); } export const removeBetOrder = async (id) => { if (!id) { throw new Error('id is required', { cause: 400 }); } const result = await BetOrder.findByIdAndDelete(id).lean(); if (!result) { throw new Error('order not found', { cause: 404 }); } return result; } export default { createBetOrder, getBetOrders, removeBetOrder, };