1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-18 20:09:08 +02:00
unleash.unleash/src/lib/routes/admin-api/user-feedback.ts

82 lines
2.3 KiB
TypeScript
Raw Normal View History

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;