129 lines
2.5 KiB
JavaScript
129 lines
2.5 KiB
JavaScript
|
|
import express from "express";
|
||
|
|
import { v4 as uuidv4 } from "uuid";
|
||
|
|
|
||
|
|
const router = express.Router();
|
||
|
|
|
||
|
|
// In-memory store (replace with database in production)
|
||
|
|
const profiles = new Map([
|
||
|
|
[
|
||
|
|
"1",
|
||
|
|
{
|
||
|
|
id: "1",
|
||
|
|
name: "Pastor John",
|
||
|
|
role: "admin",
|
||
|
|
avatar: "👨💼",
|
||
|
|
createdAt: new Date().toISOString(),
|
||
|
|
},
|
||
|
|
],
|
||
|
|
[
|
||
|
|
"2",
|
||
|
|
{
|
||
|
|
id: "2",
|
||
|
|
name: "Sarah Miller",
|
||
|
|
role: "leader",
|
||
|
|
avatar: "👩🎤",
|
||
|
|
createdAt: new Date().toISOString(),
|
||
|
|
},
|
||
|
|
],
|
||
|
|
[
|
||
|
|
"3",
|
||
|
|
{
|
||
|
|
id: "3",
|
||
|
|
name: "Mike Johnson",
|
||
|
|
role: "tech",
|
||
|
|
avatar: "🎛️",
|
||
|
|
createdAt: new Date().toISOString(),
|
||
|
|
},
|
||
|
|
],
|
||
|
|
]);
|
||
|
|
|
||
|
|
// Get all profiles
|
||
|
|
router.get("/", (req, res) => {
|
||
|
|
const result = Array.from(profiles.values());
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
profiles: result,
|
||
|
|
total: result.length,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// Get single profile
|
||
|
|
router.get("/:id", (req, res) => {
|
||
|
|
const profile = profiles.get(req.params.id);
|
||
|
|
|
||
|
|
if (!profile) {
|
||
|
|
return res.status(404).json({ error: "Profile not found" });
|
||
|
|
}
|
||
|
|
|
||
|
|
res.json({ profile });
|
||
|
|
});
|
||
|
|
|
||
|
|
// Create profile
|
||
|
|
router.post("/", (req, res) => {
|
||
|
|
const { name, role, avatar } = req.body;
|
||
|
|
|
||
|
|
if (!name) {
|
||
|
|
return res.status(400).json({ error: "Name is required" });
|
||
|
|
}
|
||
|
|
|
||
|
|
const profile = {
|
||
|
|
id: uuidv4(),
|
||
|
|
name,
|
||
|
|
role: role || "volunteer",
|
||
|
|
avatar: avatar || "👤",
|
||
|
|
createdAt: new Date().toISOString(),
|
||
|
|
};
|
||
|
|
|
||
|
|
profiles.set(profile.id, profile);
|
||
|
|
|
||
|
|
res.status(201).json({
|
||
|
|
message: "Profile created successfully",
|
||
|
|
profile,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// Update profile
|
||
|
|
router.put("/:id", (req, res) => {
|
||
|
|
const profile = profiles.get(req.params.id);
|
||
|
|
|
||
|
|
if (!profile) {
|
||
|
|
return res.status(404).json({ error: "Profile not found" });
|
||
|
|
}
|
||
|
|
|
||
|
|
const { name, role, avatar } = req.body;
|
||
|
|
|
||
|
|
const updatedProfile = {
|
||
|
|
...profile,
|
||
|
|
name: name || profile.name,
|
||
|
|
role: role || profile.role,
|
||
|
|
avatar: avatar || profile.avatar,
|
||
|
|
};
|
||
|
|
|
||
|
|
profiles.set(profile.id, updatedProfile);
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
message: "Profile updated successfully",
|
||
|
|
profile: updatedProfile,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
// Delete profile
|
||
|
|
router.delete("/:id", (req, res) => {
|
||
|
|
const profile = profiles.get(req.params.id);
|
||
|
|
|
||
|
|
if (!profile) {
|
||
|
|
return res.status(404).json({ error: "Profile not found" });
|
||
|
|
}
|
||
|
|
|
||
|
|
// Don't allow deleting admin profiles
|
||
|
|
if (profile.role === "admin") {
|
||
|
|
return res.status(403).json({ error: "Cannot delete admin profile" });
|
||
|
|
}
|
||
|
|
|
||
|
|
profiles.delete(req.params.id);
|
||
|
|
|
||
|
|
res.json({ message: "Profile deleted successfully" });
|
||
|
|
});
|
||
|
|
|
||
|
|
export default router;
|