Controllers_AdminsController.js

const CrudController = require("./CrudController");
const AdminsService = require("../Services/AdminsService");
const JsonResponse = require("./JsonResponse");
const AdminValidator = require("../Validators/AdminValidator");

const logger = require("../Logger");
const AdminDto = require("../database/dto/AdminDto");


/**
 * @extends Myintranet.Controllers.CrudController
 * @memberOf Myintranet.Controllers
 * @inheritDoc
 */
class AdminsController extends CrudController {

    constructor(db) {
        let service = new AdminsService(db);
        super(service, AdminValidator, db);
    }

    /**
     * Ajoute un administrateur a la base de données
     * @param {*} request 
     * @param {*} response 
     */
    add(request, response) {
        let errors = this.isValidForAdd(request);
        if (errors.length === 0) {
            this.service.add(request).then(data => {
                response.json(new JsonResponse(true, data, ""));
            }).catch(err => {
                if (err.parent && err.parent.code === "ER_DUP_ENTRY") {
                    response.json(new JsonResponse(false, err, err.errors[0].path + "=>" + err.errors[0].value + " exist deja"));
                } else {
                    response.json(new JsonResponse(false, err, err.message));
                }
            })
        } else {
            logger.error(errors);
            let e = errors.map((err) => {
                return err.message;
            })
            response.json(new JsonResponse(false, e, errors[0].message));
        }
    }

    /**
     * Associe Emloyeurs aux utilisateurs de type administrateur
     * @param request
     * @param response
     */
    setAssociatedEmployeurs(request, response) {
        //sets the ids of associated ESNS
        this.service.updateAttributions(request).then(data => {
            response.json(new JsonResponse(true, data, ""));
        }).catch(err => {

            response.json(new JsonResponse(false, err, err.message));
        })

    }

    /**
     * Transform un object model a un Dto
     * @param {*} data 
     * @returns {AdminDto} the Data transformed into a DTO
     */
    toDto(data) {
        return new AdminDto(data);
    }

}

module.exports = AdminsController;