diff --git a/server/controller/link.js b/server/controller/link.js new file mode 100644 index 0000000..de88d8c --- /dev/null +++ b/server/controller/link.js @@ -0,0 +1,48 @@ +const Link = require('../models/Link'); +const {getUserByName} = require("./user"); +const {Op} = require("sequelize"); + +module.exports.mapLink = (link) => ({ + id: link.id, accessId: link.accessId, domainName: link.domainName, tags: link.tags.split(","), + title: link.title, type: link.type, clicks: link.clicks, meta: JSON.parse(link.meta) +}); + +module.exports.listLinks = async (domainName, configuration) => { + if (configuration.creator) { + configuration.creatorId = (await getUserByName(configuration.creator))?.id; + if (!configuration.creatorId) delete configuration.creatorId; + delete configuration.creator; + } + + if (configuration.tags) + configuration.tags = configuration.tags.split(","); + + if (configuration.title) + configuration.title = {[Op.like]: "%" + configuration.title + "%"}; + + return (await Link.findAll({ + where: {...configuration, domainName}, + limit: configuration.limit || 5000, + order: [['createdAt', 'DESC']] + })); +} + +module.exports.getLinkById = async (id) => { + return await Link.findOne({where: {id}}); +} + +module.exports.getLinkByAccess = async (accessId, domainName) => { + return await Link.findOne({where: {accessId, domainName}}); +} + +module.exports.deleteById = async (id) => { + await Link.destroy({where: {id}}); +} + +module.exports.clickLink = async (accessId, domainName) => { + await Link.increment({clicks: 1}, {where: {accessId, domainName}}); +} + +module.exports.createLink = async (configuration) => { + return await Link.create(configuration); +} \ No newline at end of file