59 lines
1.8 KiB
JavaScript
Raw Normal View History

2024-02-11 00:00:27 -06:00
import { getUserById, getUserByPubkey, updateUser, deleteUser } from "@/db/models/userModels";
export default async function handler(req, res) {
const { slug } = req.query;
2024-02-11 00:00:27 -06:00
// Determine if slug is a pubkey or an ID
const isPubkey = /^[0-9a-fA-F]{64}$/.test(slug);
try {
let user;
if (isPubkey) {
// If slug is a pubkey
user = await getUserByPubkey(slug);
} else {
// Assume slug is an ID
const id = parseInt(slug);
if (isNaN(id)) {
res.status(400).json({ error: "Invalid identifier" });
return;
}
2024-02-11 00:00:27 -06:00
user = await getUserById(id);
}
2024-02-11 00:00:27 -06:00
if (!user) {
res.status(204).end();
return;
}
2024-02-11 00:00:27 -06:00
switch (req.method) {
case 'GET':
res.status(200).json(user);
break;
2024-02-11 00:00:27 -06:00
case 'PUT':
if (!isPubkey) {
// Update operation should be done with an ID, not a pubkey
2024-08-09 14:28:57 -05:00
const updatedUser = await updateUser(slug, req.body);
res.status(200).json(updatedUser);
2024-02-11 00:00:27 -06:00
} else {
// Handle attempt to update user with pubkey
res.status(400).json({ error: "Cannot update user with pubkey. Use ID instead." });
2024-02-11 00:00:27 -06:00
}
break;
2024-02-11 00:00:27 -06:00
case 'DELETE':
if (!isPubkey) {
// Delete operation should be done with an ID, not a pubkey
await deleteUser(parseInt(slug));
res.status(204).end();
2024-02-11 00:00:27 -06:00
} else {
// Handle attempt to delete user with pubkey
res.status(400).json({ error: "Cannot delete user with pubkey. Use ID instead." });
2024-02-11 00:00:27 -06:00
}
break;
2024-02-11 00:00:27 -06:00
default:
res.setHeader('Allow', ['GET', 'PUT', 'DELETE']);
res.status(405).end(`Method ${req.method} Not Allowed`);
}
2024-02-11 00:00:27 -06:00
} catch (error) {
res.status(500).json({ error: error.message });
}
}