77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
import express from "express";
|
|
import multer from "multer";
|
|
import Link from "../models/Link.js";
|
|
import { authMiddleware } from "../middleware/auth.js";
|
|
|
|
const router = express.Router();
|
|
|
|
// Config upload
|
|
const storage = multer.diskStorage({
|
|
destination: "uploads/",
|
|
filename: (req, file, cb) => {
|
|
const unique = Date.now() + "-" + file.originalname;
|
|
cb(null, unique);
|
|
}
|
|
});
|
|
const upload = multer({ storage });
|
|
|
|
// Tutte le rotte protette
|
|
router.use(authMiddleware);
|
|
|
|
// GET /links - lista dei link dell'utente
|
|
router.get("/", async (req, res) => {
|
|
const links = await Link.find({ owner: req.userId });
|
|
res.json(links);
|
|
});
|
|
|
|
// POST /links - crea nuovo link con eventuale icona
|
|
router.post("/", upload.single("icon"), async (req, res) => {
|
|
const { url, name } = req.body;
|
|
const iconPath = req.file ? `/uploads/${req.file.filename}` : null;
|
|
|
|
const link = await Link.create({
|
|
url,
|
|
name,
|
|
icon: iconPath,
|
|
owner: req.userId
|
|
});
|
|
|
|
res.json(link);
|
|
});
|
|
|
|
// DELETE /links/:id
|
|
router.delete("/:id", async (req, res) => {
|
|
const { id } = req.params;
|
|
|
|
const link = await Link.findOneAndDelete({
|
|
_id: id,
|
|
owner: req.userId
|
|
});
|
|
|
|
if (!link) return res.status(404).json({ error: "Link non trovato" });
|
|
|
|
res.json({ success: true });
|
|
});
|
|
|
|
// PUT /links/:id
|
|
router.put("/:id", upload.single("icon"), async (req, res) => {
|
|
const { id } = req.params;
|
|
const { name, url } = req.body;
|
|
|
|
const update = {};
|
|
if (name) update.name = name;
|
|
if (url) update.url = url;
|
|
if (req.file) update.icon = `/uploads/${req.file.filename}`;
|
|
|
|
const link = await Link.findOneAndUpdate(
|
|
{ _id: id, owner: req.userId },
|
|
update,
|
|
{ new: true }
|
|
);
|
|
|
|
if (!link) return res.status(404).json({ error: "Link non trovato" });
|
|
|
|
res.json(link);
|
|
});
|
|
|
|
export default router;
|