feat: Initial commit of backend services and AGENTS.md

This commit is contained in:
William Valentin
2025-10-29 13:12:30 -07:00
commit 999d37babb
25 changed files with 3881 additions and 0 deletions

70
backend/routes/rewards.js Normal file
View File

@@ -0,0 +1,70 @@
const express = require("express");
const Reward = require("../models/Reward");
const User = require("../models/User");
const auth = require("../middleware/auth");
const router = express.Router();
// Get all rewards
router.get("/", async (req, res) => {
try {
const rewards = await Reward.find();
res.json(rewards);
} catch (err) {
console.error(err.message);
res.status(500).send("Server error");
}
});
// Create a reward
router.post("/", auth, async (req, res) => {
const { name, description, cost, isPremium } = req.body;
try {
const newReward = new Reward({
name,
description,
cost,
isPremium,
});
const reward = await newReward.save();
res.json(reward);
} catch (err) {
console.error(err.message);
res.status(500).send("Server error");
}
});
// Redeem a reward
router.post("/redeem/:id", auth, async (req, res) => {
try {
const reward = await Reward.findById(req.params.id);
if (!reward) {
return res.status(404).json({ msg: "Reward not found" });
}
const user = await User.findById(req.user.id);
if (!user) {
return res.status(404).json({ msg: "User not found" });
}
if (user.points < reward.cost) {
return res.status(400).json({ msg: "Not enough points" });
}
if (reward.isPremium && !user.isPremium) {
return res.status(403).json({ msg: "Premium reward not available" });
}
user.points -= reward.cost;
await user.save();
res.json({ msg: "Reward redeemed successfully" });
} catch (err) {
console.error(err.message);
res.status(500).send("Server error");
}
});
module.exports = router;