Backend for Transactions

Added in 3 files, for the backend
This commit is contained in:
aruhani
2025-04-20 10:42:52 -06:00
parent 90789b6fd4
commit f7e4b49ac8
3 changed files with 185 additions and 0 deletions

View File

@@ -0,0 +1,153 @@
// controllers/transaction.js
const db = require("../utils/database");
// Create a new transaction
exports.createTransaction = async (req, res) => {
const { userID, productID, date, paymentStatus } = req.body;
try {
const [result] = await db.execute(
`INSERT INTO Transaction (UserID, ProductID, Date, PaymentStatus)
VALUES (?, ?, ?, ?)`,
[userID, productID, date, paymentStatus]
);
res.json({
success: true,
message: "Transaction created successfully",
transactionID: result.insertId,
});
} catch (error) {
console.error("Error creating transaction:", error);
res.status(500).json({ error: "Could not create transaction" });
}
};
// Get all transactions for a given product
exports.getTransactionsByProduct = async (req, res) => {
const { productID } = req.params;
try {
const [transactions] = await db.execute(
`SELECT
TransactionID,
UserID,
ProductID,
Date,
PaymentStatus
FROM Transaction
WHERE ProductID = ?`,
[productID]
);
res.json({
success: true,
transactions,
});
} catch (error) {
console.error("Error fetching transactions by product:", error);
res.status(500).json({ error: "Could not retrieve transactions" });
}
};
// Get all transactions for a given user
exports.getTransactionsByUser = async (req, res) => {
const { userID } = req.body;
try {
const [transactions] = await db.execute(
`SELECT
TransactionID,
UserID,
ProductID,
Date,
PaymentStatus
FROM Transaction
WHERE UserID = ?`,
[userID]
);
res.json({
success: true,
transactions,
});
} catch (error) {
console.error("Error fetching transactions by user:", error);
res.status(500).json({ error: "Could not retrieve transactions" });
}
};
// Get all transactions in the system
exports.getAllTransactions = async (req, res) => {
try {
const [transactions] = await db.execute(
`SELECT
TransactionID,
UserID,
ProductID,
Date,
PaymentStatus
FROM Transaction`
);
res.json({
success: true,
transactions,
});
} catch (error) {
console.error("Error fetching all transactions:", error);
res.status(500).json({ error: "Could not retrieve transactions" });
}
};
// Update the payment status of a transaction
exports.updatePaymentStatus = async (req, res) => {
const { transactionID, paymentStatus } = req.body;
try {
const [result] = await db.execute(
`UPDATE Transaction
SET PaymentStatus = ?
WHERE TransactionID = ?`,
[paymentStatus, transactionID]
);
if (result.affectedRows === 0) {
return res.status(404).json({ success: false, message: "Transaction not found" });
}
res.json({
success: true,
message: "Payment status updated successfully",
});
} catch (error) {
console.error("Error updating payment status:", error);
res.status(500).json({ error: "Could not update payment status" });
}
};
// Delete a transaction
exports.deleteTransaction = async (req, res) => {
const { transactionID } = req.body;
try {
const [result] = await db.execute(
`DELETE FROM Transaction
WHERE TransactionID = ?`,
[transactionID]
);
if (result.affectedRows === 0) {
return res.status(404).json({ success: false, message: "Transaction not found" });
}
res.json({
success: true,
message: "Transaction deleted successfully",
});
} catch (error) {
console.error("Error deleting transaction:", error);
res.status(500).json({ error: "Could not delete transaction" });
}
};

View File

@@ -9,6 +9,7 @@ const searchRouter = require("./routes/search");
const recommendedRouter = require("./routes/recommendation"); const recommendedRouter = require("./routes/recommendation");
const history = require("./routes/history"); const history = require("./routes/history");
const review = require("./routes/review"); const review = require("./routes/review");
const transactionRouter = require("./routes/transaction");
const { generateEmailTransporter } = require("./utils/mail"); const { generateEmailTransporter } = require("./utils/mail");
const { const {
@@ -42,6 +43,7 @@ app.use("/api/search", searchRouter);
app.use("/api/engine", recommendedRouter); app.use("/api/engine", recommendedRouter);
app.use("/api/history", history); app.use("/api/history", history);
app.use("/api/review", review); app.use("/api/review", review);
app.use("/api/transaction", transactionRouter);
// Set up a scheduler to run cleanup every hour // Set up a scheduler to run cleanup every hour

View File

@@ -0,0 +1,30 @@
// routes/transaction.js
const express = require("express");
const txCtrl = require("../controllers/transaction"); // <— grab the module
const router = express.Router();
// logging middleware
router.use((req, res, next) => {
console.log(`Incoming ${req.method} ${req.originalUrl}`);
next();
});
// Create a new transaction
router.post("/createTransaction", txCtrl.createTransaction);
// Get all transactions for a specific product
router.get("/getTransactionsByProduct/:productID", txCtrl.getTransactionsByProduct);
// Get all transactions for a specific user
router.post("/getTransactionsByUser", txCtrl.getTransactionsByUser);
// Get all transactions in the system
router.get("/getAllTransactions", txCtrl.getAllTransactions);
// Update payment status on a transaction
router.patch("/updatePaymentStatus", txCtrl.updatePaymentStatus);
// Delete a transaction
router.delete("/deleteTransaction", txCtrl.deleteTransaction);
module.exports = router;