fix sending vote notifications (#126)
This commit is contained in:
commit
f86040af55
@ -1,6 +1,5 @@
|
||||
import authHandler from "@App/middlewares/AuthHandler";
|
||||
import roleHandler from "@App/middlewares/RolesHandler";
|
||||
import NotificationBuilder from "@Common/notifications/NotificationBuilder";
|
||||
import ApiController from "@Common/system/controller-pattern/ApiController";
|
||||
import { Controller, Delete, Post } from "@ControllerPattern/index";
|
||||
import { EAppointmentStatus, Votes } from "@prisma/client";
|
||||
@ -17,7 +16,6 @@ export default class LiveVoteController extends ApiController {
|
||||
constructor(
|
||||
private liveVoteService: LiveVoteService,
|
||||
private usersService: UsersService,
|
||||
private notificationBuilder: NotificationBuilder,
|
||||
) {
|
||||
super();
|
||||
}
|
||||
@ -81,8 +79,6 @@ export default class LiveVoteController extends ApiController {
|
||||
//Hydrate ressource with prisma entity
|
||||
const vote = Vote.hydrate<Vote>(voteEntityCreated, { strategy: "excludeAll" });
|
||||
|
||||
await this.notificationBuilder.sendVoteNotification(vote);
|
||||
|
||||
//success
|
||||
this.httpCreated(response, vote);
|
||||
} catch (error) {
|
||||
|
@ -69,6 +69,8 @@ export default class NotificationBuilder {
|
||||
public async sendVoteNotification(vote: Vote) {
|
||||
if (vote.appointment.status !== "OPEN") return;
|
||||
const superAdminList = await this.usersService.get({ where: { role: { name: "super-admin" } } });
|
||||
const voterIndex = superAdminList.findIndex((user) => user.uid === vote.voter.uid);
|
||||
superAdminList.splice(voterIndex, 1);
|
||||
const userTargeted = await this.usersService.getByUid(vote.appointment.user.uid!, { contact: true });
|
||||
const userTargetedEntity = User.hydrate<User>(userTargeted!, { strategy: "excludeAll" });
|
||||
let message = "";
|
||||
@ -83,7 +85,7 @@ export default class NotificationBuilder {
|
||||
redirection_url: `${this.backendVariables.APP_HOST}/users/${vote.appointment.user.uid}`,
|
||||
created_at: new Date(),
|
||||
updated_at: new Date(),
|
||||
user: superAdminList || [],
|
||||
user: superAdminList,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ export default class VotesRepository extends BaseRepository {
|
||||
}
|
||||
};
|
||||
|
||||
return this.model.create({...createArgs, include: {appointment: {include: {votes: true, user: true}}}});
|
||||
return this.model.create({...createArgs, include: {voter: true, appointment: {include: {votes: true, user: true}}}});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -67,7 +67,7 @@ export default class LiveVoteService extends BaseService {
|
||||
return this.appointmentRepository.findOneByUid(uid, query);
|
||||
}
|
||||
|
||||
public async getAppointmentWithVotes(vote: Vote): Promise<(Appointments & {votes: Votes[], user: Users}) | null> {
|
||||
public async getAppointmentWithVotes(vote: Vote): Promise<(Appointments & { votes: Votes[]; user: Users }) | null> {
|
||||
if (vote.appointment.uid) {
|
||||
return this.appointmentRepository.findOneByUidWithVotes(vote.appointment.uid);
|
||||
}
|
||||
@ -88,8 +88,12 @@ export default class LiveVoteService extends BaseService {
|
||||
}
|
||||
|
||||
private async closeVote(appointment: Appointments, vote: Votes) {
|
||||
const apointmentFound = await this.appointmentRepository.findOneByStatusUserAndChoice(appointment.user_uid, EVote[appointment.choice as keyof typeof EVote], EAppointmentStatus.CLOSED);
|
||||
if(apointmentFound) {
|
||||
const apointmentFound = await this.appointmentRepository.findOneByStatusUserAndChoice(
|
||||
appointment.user_uid,
|
||||
EVote[appointment.choice as keyof typeof EVote],
|
||||
EAppointmentStatus.CLOSED,
|
||||
);
|
||||
if (apointmentFound) {
|
||||
await this.appointmentRepository.delete(apointmentFound.uid);
|
||||
}
|
||||
await this.appointmentRepository.update(vote.appointment_uid, EAppointmentStatus.CLOSED);
|
||||
@ -127,7 +131,7 @@ export default class LiveVoteService extends BaseService {
|
||||
|
||||
if (appointment) {
|
||||
const voteEntity = Vote.hydrateArray<Vote>(appointment.votes, { strategy: "excludeAll" });
|
||||
const appointementWithVotesHydrated = {...appointment, votes: voteEntity};
|
||||
const appointementWithVotesHydrated = { ...appointment, votes: voteEntity };
|
||||
const appointmentEntity = Appointment.hydrate<Appointment>(appointementWithVotesHydrated, { strategy: "excludeAll" });
|
||||
if (appointmentEntity.votes && appointmentEntity.votes.length >= 2) {
|
||||
const voteCreated = await this.voteRepository.create(vote);
|
||||
@ -137,7 +141,9 @@ export default class LiveVoteService extends BaseService {
|
||||
|
||||
const approvedChoice = await this.verifyVoterChoice(vote);
|
||||
if (!approvedChoice) return null;
|
||||
|
||||
return this.voteRepository.create(vote);
|
||||
const voteCreated = await this.voteRepository.create(vote);
|
||||
const voteEntity = Vote.hydrate<Vote>(voteCreated, { strategy: "excludeAll" });
|
||||
await this.notificationBuilder.sendVoteNotification(voteEntity);
|
||||
return voteCreated;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user