All files / src/lib/routes/admin-api user-feedback-controller.ts

100% Statements 23/23
80% Branches 4/5
100% Functions 3/3
100% Lines 23/23

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    59x           59x                                 142x 142x 142x   142x 142x             2x 2x   2x   2x 1x     1x     1x             1x 1x             1x 1x   1x             1x 1x       59x 59x  
import { Response } from 'express';
 
import Controller from '../controller';
import { Logger } from '../../logger';
import { IUnleashConfig } from '../../types/option';
import { IUnleashServices } from '../../types/services';
import UserFeedbackService from '../../services/user-feedback-service';
import { IAuthRequest } from '../unleash-types';
import { NONE } from '../../types/permissions';
 
interface IFeedbackBody {
    neverShow?: boolean;
    feedbackId: string;
    given?: Date;
}
 
class UserFeedbackController extends Controller {
    private logger: Logger;
 
    private userFeedbackService: UserFeedbackService;
 
    constructor(
        config: IUnleashConfig,
        { userFeedbackService }: Pick<IUnleashServices, 'userFeedbackService'>,
    ) {
        super(config);
        this.logger = config.getLogger('feedback-controller.ts');
        this.userFeedbackService = userFeedbackService;
 
        this.post('/', this.recordFeedback, NONE);
        this.put('/:id', this.updateFeedbackSettings, NONE);
    }
 
    private async recordFeedback(
        req: IAuthRequest<any, any, IFeedbackBody, any>,
        res: Response,
    ): Promise<void> {
        const BAD_REQUEST = 400;
        const { user } = req;
 
        const { feedbackId } = req.body;
 
        if (!feedbackId) {
            res.status(BAD_REQUEST).json({
                error: 'feedbackId must be present.',
            });
            return;
        }
 
        const feedback = {
            ...req.body,
            userId: user.id,
            given: new Date(),
            neverShow: req.body.neverShow || false,
        };
 
        const updated = await this.userFeedbackService.updateFeedback(feedback);
        res.json(updated);
    }
 
    private async updateFeedbackSettings(
        req: IAuthRequest<any, any, IFeedbackBody, any>,
        res: Response,
    ): Promise<void> {
        const { user } = req;
        const { id } = req.params;
 
        const feedback = {
            ...req.body,
            feedbackId: id,
            userId: user.id,
            neverShow: req.body.neverShow || false,
        };
 
        const updated = await this.userFeedbackService.updateFeedback(feedback);
        res.json(updated);
    }
}
 
module.exports = UserFeedbackController;
export default UserFeedbackController;