diff --git a/backend/src/controllers/auction.controller.ts b/backend/src/controllers/auction.controller.ts new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/models/auction.model.ts b/backend/src/models/auction.model.ts new file mode 100644 index 0000000..ce56b61 --- /dev/null +++ b/backend/src/models/auction.model.ts @@ -0,0 +1,56 @@ +import mongoose from "mongoose"; + +const auctionSchema = new mongoose.Schema({ + itemName: { + type: String, + required: true, + trim: true, + }, + itemDescription: { + type: String, + trim: true, + }, + startPrice: { + type: Number, + required: true, + min: 0, + }, + currentHighestBid: { + type: Number, + default: function () { return this.startPrice; }, + }, + highestBidder: { + type: mongoose.Schema.Types.ObjectId, + ref: "User", + default: null, + }, + seller: { + type: mongoose.Schema.Types.ObjectId, + ref: "User", + required: true, + }, + createdAt: { + type: Date, + default: Date.now, + }, + expiresAt: { + type: Date, + required: true, + }, + status: { + type: String, + enum: ["active", "expired", "sold"], + default: "active", + }, + soldTo: { + type: mongoose.Schema.Types.ObjectId, + ref: "User", + default: null, + }, + soldPrice: { + type: Number, + default: 0, + }, +}); + +export default mongoose.model("Auction", auctionSchema); diff --git a/backend/src/models/bid.model.ts b/backend/src/models/bid.model.ts new file mode 100644 index 0000000..b4f3c5c --- /dev/null +++ b/backend/src/models/bid.model.ts @@ -0,0 +1,25 @@ +import mongoose from "mongoose"; + +const bidSchema = new mongoose.Schema({ + auctionId: { + type: mongoose.Schema.Types.ObjectId, + ref: "Auction", + required: true, + }, + bidder: { + type: mongoose.Schema.Types.ObjectId, + ref: "User", + required: true, + }, + amount: { + type: Number, + required: true, + min: 1, + }, + createdAt: { + type: Date, + default: Date.now, + }, +}); + +export default mongoose.model("Bid", bidSchema); diff --git a/backend/src/routes/auctionRoutes.ts b/backend/src/routes/auctionRoutes.ts new file mode 100644 index 0000000..5f4f908 --- /dev/null +++ b/backend/src/routes/auctionRoutes.ts @@ -0,0 +1,20 @@ +import express from "express"; +import { + createAuction, + placeBid, + acceptHighestBid, +} from "../controllers/auction.controller"; +import { authenticate, authorizeRole } from "../middleware/authMiddleware"; + +const router = express.Router(); + +// Create a new auction (only sellers) +router.post("/", authenticate, authorizeRole("seller"), createAuction); + +// Place a bid (only buyers) +router.post("/:id/bid", authenticate, authorizeRole("buyer"), placeBid); + +// Seller accepts the highest bid (only sellers) +router.post("/:id/accept", authenticate, authorizeRole("seller"), acceptHighestBid); + +export default router;