All files / backend/controllers HiloController.js

76.92% Statements 30/39
75% Branches 3/4
66.66% Functions 14/21
76.92% Lines 30/39

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 972x 2x 2x 2x                   2x 2x   2x 2x       2x 2x       2x 2x 2x         2x         1x 1x       1x         2x 2x       2x       1x 1x       1x         1x 1x       1x         1x 1x                                 2x 2x
const HiloModel = require('../models/hilo.js');
const UsuarioModel = require('../models/usuario.js');
const authConfig = require('../config/auth.js');
const jwt = require('jsonwebtoken');
 
// Clase Hilo donde contiene todos los metodos(funciones de clases llaman metodos).
 
class Hilo {
    constructor() {
    }
 
    // Función de crear un Hilo.
    async crearHilo(body) {
        const session = await HiloModel.startSession();
        session.startTransaction();
 
        let hiloNuevo = await HiloModel.create([body], { session: session }).then(hiloNuevo => {
            return { status: 201, datos: hiloNuevo }
        }).catch(error => {
            return { status: 400, datos: { error: error.message } }
        });
        let duenoDelHilo = await UsuarioModel.findByIdAndUpdate(body.usuario.usuarioId, { $push: { publicaciones: hiloNuevo.datos } }, { new: true, session: session }).then(dueno => {
            return { status: 200, usuario: dueno }
        }).catch(error => {
            return { status: 400 }
        })
        if (hiloNuevo.status === 201 && duenoDelHilo.status === 200) {
            await session.commitTransaction();
            session.endSession();
        } else E{
            await session.abortTransaction();
            session.endSession();
        }
        return hiloNuevo;
    }
 
    // Función mostrar todos los Hilos.
    async traerHilos() {
        let hilosEncontrados = await HiloModel.find().then(hilo => {
            return { status: 200, datos: hilo }
        }).catch(error => {
            return { status: 404, datos: { error: error.message } }
        });
        return hilosEncontrados;
    }
 
    // Función mostrar un Hilo por ID.
    async traerHiloId(id) {
        let hiloEncontrado = await HiloModel.findById(id).then(hilo => {
            return { status: 200, datos: hilo }
        }).catch(error => {
            return { status: 404, datos: { error: error.message } }
        });
        return hiloEncontrado;
    }
 
    async getLikesDeHilo(id) {
        let hiloEncontrado = await HiloModel.findById(id).select('likes').then(hilo => {
            return { status: 200, datos: hilo }
        }).catch(error => {
            return { status: 404, datos: { error: error.message } }
        });
        return hiloEncontrado;
    }
 
    // Función de actualizar un Hilo.
    async cambiaHilo(id, body) {
        let hiloActualizado = await HiloModel.findByIdAndUpdate(id, body, {new: true}).then(hiloActualizado => {
            return { status: 200, datos: hiloActualizado }
        }).catch(error => {
            return { status: 400, datos: { error: error.message } }
        });
        return hiloActualizado;
    }
 
    // Funcion de borrar un Hilo por ID.
    async borrarHilo(id) {
        return await HiloModel.findByIdAndRemove(id).then(hiloBorrado => {
            return {
                status: 200,
                datos: {
                    hilo: `Hilo con el titulo ${hiloBorrado.titulo} ha sido borrado con suceso`
                }
            }
        }).catch(error => {
            return {
                status: 404,
                datos: {
                    error: error.message
                }
            }
        });
    }
}
 
let HiloController = new Hilo();
module.exports = HiloController;