my_app_remote_server_ui_app/server/backend/routes/links.js
2025-12-31 17:26:53 +01:00

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;