Skip to content

Commit 489c875

Browse files
authored
Merge pull request #58 from LONECODER1/feature/auctionbidlogic
added auction logic
2 parents c044f91 + a52b2ed commit 489c875

File tree

4 files changed

+101
-0
lines changed

4 files changed

+101
-0
lines changed

backend/src/controllers/auction.controller.ts

Whitespace-only changes.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import mongoose from "mongoose";
2+
3+
const auctionSchema = new mongoose.Schema({
4+
itemName: {
5+
type: String,
6+
required: true,
7+
trim: true,
8+
},
9+
itemDescription: {
10+
type: String,
11+
trim: true,
12+
},
13+
startPrice: {
14+
type: Number,
15+
required: true,
16+
min: 0,
17+
},
18+
currentHighestBid: {
19+
type: Number,
20+
default: function () { return this.startPrice; },
21+
},
22+
highestBidder: {
23+
type: mongoose.Schema.Types.ObjectId,
24+
ref: "User",
25+
default: null,
26+
},
27+
seller: {
28+
type: mongoose.Schema.Types.ObjectId,
29+
ref: "User",
30+
required: true,
31+
},
32+
createdAt: {
33+
type: Date,
34+
default: Date.now,
35+
},
36+
expiresAt: {
37+
type: Date,
38+
required: true,
39+
},
40+
status: {
41+
type: String,
42+
enum: ["active", "expired", "sold"],
43+
default: "active",
44+
},
45+
soldTo: {
46+
type: mongoose.Schema.Types.ObjectId,
47+
ref: "User",
48+
default: null,
49+
},
50+
soldPrice: {
51+
type: Number,
52+
default: 0,
53+
},
54+
});
55+
56+
export default mongoose.model("Auction", auctionSchema);

backend/src/models/bid.model.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import mongoose from "mongoose";
2+
3+
const bidSchema = new mongoose.Schema({
4+
auctionId: {
5+
type: mongoose.Schema.Types.ObjectId,
6+
ref: "Auction",
7+
required: true,
8+
},
9+
bidder: {
10+
type: mongoose.Schema.Types.ObjectId,
11+
ref: "User",
12+
required: true,
13+
},
14+
amount: {
15+
type: Number,
16+
required: true,
17+
min: 1,
18+
},
19+
createdAt: {
20+
type: Date,
21+
default: Date.now,
22+
},
23+
});
24+
25+
export default mongoose.model("Bid", bidSchema);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import express from "express";
2+
import {
3+
createAuction,
4+
placeBid,
5+
acceptHighestBid,
6+
} from "../controllers/auction.controller";
7+
import { authenticate, authorizeRole } from "../middleware/authMiddleware";
8+
9+
const router = express.Router();
10+
11+
// Create a new auction (only sellers)
12+
router.post("/", authenticate, authorizeRole("seller"), createAuction);
13+
14+
// Place a bid (only buyers)
15+
router.post("/:id/bid", authenticate, authorizeRole("buyer"), placeBid);
16+
17+
// Seller accepts the highest bid (only sellers)
18+
router.post("/:id/accept", authenticate, authorizeRole("seller"), acceptHighestBid);
19+
20+
export default router;

0 commit comments

Comments
 (0)