diff --git a/src/api/artiste/controllers/artiste.js b/src/api/artiste/controllers/artiste.js index b91287b..0afa557 100644 --- a/src/api/artiste/controllers/artiste.js +++ b/src/api/artiste/controllers/artiste.js @@ -1,5 +1,56 @@ 'use strict'; const { createCoreController } = require('@strapi/strapi').factories; +const { ValidationError } = require("@strapi/utils").errors +const slugify = require('slugify') -module.exports = createCoreController('api::artiste.artiste') +const getSlug = text => { + return slugify(text, {lower: true, remove: /[*#+~.()'"!:@]/g}) +} + +module.exports = createCoreController('api::artiste.artiste', ({strapi}) => ({ + async create(ctx) { + const {body} = ctx.request + let {data} = body + + if (ctx.request && ctx.request.header && ctx.request.header.authorization) { + try { + const {id} = await strapi.plugins[ + 'users-permissions' + ].services.jwt.getToken(ctx) + + if (id !== data.user.id) { + throw new UnauthorizedError('Opération non autorisée') + } + } catch (err) { + throw new UnauthorizedError(ctx, err, 'Opération non autorisée') + } + } + + const user = await strapi.entityService.findOne('plugin::users-permissions.user', body.data.user.id) + + if (!user) { + throw new NotFoundError('Utilisateur introuvable.') + } + + if (user.id !== data.user.id || user.username !== data.user.username || user.email !== data.user.email) { + throw new ValidationError('Informations non valides.') + } + + const artiste = await strapi.db.query('api::artiste.artiste').findOne({ + where: {slug: getSlug(data.alias)} + }) + + if (artiste) { + return artiste + } else { + const newArtiste = await strapi.entityService.create('api::artiste.artiste', { + data: { + ...data + } + }) + return newArtiste + } + } + +}))