BetOrder.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import mongoose from 'mongoose';
  2. const BetOrderSchema = new mongoose.Schema({
  3. sid: { type: String, index: true },
  4. stake: { type: Number, default: 0 },
  5. platform: { type: String, default: 'polymarket', index: true },
  6. status: { type: String, default: 'created', index: true },
  7. side: { type: String, default: 'BUY', index: true },
  8. size: { type: Number },
  9. polymarketOrderID: { type: String, index: true },
  10. polymarketOrder: { type: mongoose.Schema.Types.Mixed },
  11. iorsValues: { type: mongoose.Schema.Types.Mixed },
  12. sol: { type: mongoose.Schema.Types.Mixed },
  13. stakeLimit: { type: mongoose.Schema.Types.Mixed },
  14. winLimit: { type: mongoose.Schema.Types.Mixed },
  15. iorsInfo: { type: mongoose.Schema.Types.Mixed },
  16. cpr: { type: mongoose.Schema.Types.Mixed },
  17. gameRelation: { type: mongoose.Schema.Types.Mixed },
  18. }, {
  19. timestamps: true,
  20. });
  21. BetOrderSchema.index({ createdAt: -1 });
  22. const BetOrder = mongoose.models.BetOrder || mongoose.model('BetOrder', BetOrderSchema);
  23. export const createBetOrder = async ({
  24. sid,
  25. stake,
  26. side = 'BUY',
  27. size,
  28. polymarketOrder,
  29. iorsValues,
  30. sol,
  31. stakeLimit,
  32. winLimit,
  33. iorsInfo,
  34. cpr,
  35. gameRelation,
  36. } = {}) => {
  37. const orderID = polymarketOrder?.orderID || polymarketOrder?.id;
  38. const status = polymarketOrder?.status || 'created';
  39. return BetOrder.create({
  40. sid: sid != null ? String(sid) : undefined,
  41. stake: Number(stake) || 0,
  42. status,
  43. side,
  44. size: Number.isFinite(Number(size)) ? Number(size) : undefined,
  45. polymarketOrderID: orderID,
  46. polymarketOrder,
  47. iorsValues,
  48. sol,
  49. stakeLimit,
  50. winLimit,
  51. iorsInfo,
  52. cpr,
  53. gameRelation,
  54. });
  55. }
  56. export const getBetOrders = async ({ limit = 100 } = {}) => {
  57. const queryLimit = Math.min(Math.max(Number(limit) || 100, 1), 500);
  58. return BetOrder.find({})
  59. .sort({ createdAt: -1 })
  60. .limit(queryLimit)
  61. .lean();
  62. }
  63. export const removeBetOrder = async (id) => {
  64. if (!id) {
  65. throw new Error('id is required', { cause: 400 });
  66. }
  67. const result = await BetOrder.findByIdAndDelete(id).lean();
  68. if (!result) {
  69. throw new Error('order not found', { cause: 404 });
  70. }
  71. return result;
  72. }
  73. export default {
  74. createBetOrder,
  75. getBetOrders,
  76. removeBetOrder,
  77. };