51 lines
2.0 KiB
JavaScript
51 lines
2.0 KiB
JavaScript
const app = require('express').Router();
|
|
const crypto = require("crypto");
|
|
const checkPermission = require("../middlewares/checkPermission");
|
|
const ShortenedLink = require("../models/ShortenedLink");
|
|
const linkValidation = require("../validation/linkValidation");
|
|
|
|
app.put("/", checkPermission("url.create"), async (req, res) => {
|
|
// Validate request
|
|
const {error} = linkValidation.short.validate(req.body);
|
|
if (error) return res.status(400).json({message: error.details[0].message});
|
|
|
|
// Set optional fields
|
|
req.body.shorten_url = req.body.custom_url || crypto.randomBytes(3).toString('hex');
|
|
|
|
// Check if shorten url exists
|
|
const {count} = await ShortenedLink.findAndCountAll({where: {shorten_url: req.body.shorten_url}});
|
|
if (count === 1) return res.status(400).json({message: "URL already exists"});
|
|
|
|
// Create the link
|
|
await ShortenedLink.create(req.body);
|
|
|
|
// Return the response
|
|
res.status(200).json({message: "Link successfully created", "shorten_url": req.body.shorten_url});
|
|
});
|
|
|
|
app.delete("/:code", checkPermission("url.delete"), async (req, res) => {
|
|
if (!req.params.code) return res.status(400).json({message: "You need to provide the shorten url code"});
|
|
|
|
// Search for the link
|
|
const link = await ShortenedLink.findOne({where: {shorten_url: req.params.code}});
|
|
if (link) {
|
|
// Destroy the link
|
|
await ShortenedLink.destroy({where: {shorten_url: req.params.code}});
|
|
|
|
// Return response
|
|
res.status(200).json({message: "Link successfully deleted"});
|
|
} else res.status(404).json({message: "Link not found"});
|
|
});
|
|
|
|
app.get("/:code", checkPermission("url.info"), async (req, res) => {
|
|
if (!req.params.code) return res.status(400).json({message: "You need to provide the shorten url code"});
|
|
|
|
// Search the link
|
|
const link = await ShortenedLink.findOne({where: {shorten_url: req.params.code}});
|
|
if (link) {
|
|
// Return response
|
|
res.status(200).json(link);
|
|
} else res.status(404).json({message: "Link not found"});
|
|
})
|
|
|
|
module.exports = app; |