gfw-api/fw-teams

View on GitHub
app/src/services/team.service.js

Summary

Maintainability
A
0 mins
Test Coverage
F
23%
const logger = require('logger');
const JWT = require('jsonwebtoken');
const config = require('config');
const MailService = require('services/MailService');
const UserService = require('services/user.service');
const TeamModel = require('models/team.model');

class TeamService {

    // eslint-disable-next-line consistent-return
    static verifyToken(token) {
        try {
            return JWT.verify(token, config.get('jwt.token'));
        } catch (e) {
            logger.info(`Generated token ${e}`);
        }
    }

    static generateToken(email, teamId) {
        const token = JWT.sign({ email, teamId }, config.get('jwt.token'), {});
        logger.info(`Generated token ${token}`);
        return token;
    }

    static sendNotifications(users = [], team, locale) {
        users.forEach(async (email) => {
            const generatedToken = this.generateToken(email, team.id);
            const link = `${config.get('application.url')}/login?callbackUrl=${config.get('application.url')}/settings?confirmToken=${generatedToken}&confirmToken=${generatedToken}`;
            if (!team.sentInvitations.includes(email)) {
                const invitationMailId = `team-invitation-${locale || 'en'}`;
                MailService.sendMail(invitationMailId, { link }, [{ address: { email } }]);
                team.sentInvitations = team.sentInvitations.concat(email);
                await team.save();
            }
        });
    }

    static sendManagerConfirmation(confirmedUserEmail, managers, locale) {
        managers.forEach(async (manager) => {
            const joinedMailId = `team-joined-${locale || 'en'}`;
            const managerEmail = manager.email || await UserService.getEmailById(manager.id);
            MailService.sendMail(joinedMailId, { email: confirmedUserEmail }, [{ address: { managerEmail } }]);
        });
    }

    static async deleteConfirmedUserFromPreviousTeams(userId) {
        const userTeam = await TeamModel.findOne({ confirmedUsers: userId });
        logger.info(`User was in ${userTeam}`);
        userTeam.confirmedUsers = userTeam.confirmedUsers.filter((user) => user !== userId);
        await userTeam.save();
        logger.info(`User is not in ${userTeam}`);
    }

}

module.exports = TeamService;