Files
vote-back/src/vote/vote.service.ts
T
2025-05-31 20:22:20 +02:00

55 lines
1.5 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { VoteCreateDTO } from './vote.dto';
import { Vote } from './vote.entity';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
interface IAnswer {
question_id: string;
answer: string;
}
interface IVote {
answers: IAnswer[];
}
@Injectable()
export class VoteService {
constructor(
@InjectRepository(Vote) private voteRepository: Repository<Vote>,
) {}
async create(value: VoteCreateDTO) {
const vote = Object.entries(value).reduce<IVote>(
(acc, [question_id, a]) => {
const answer = String(a);
acc.answers.push({ question_id, answer });
return acc;
},
{
answers: [],
},
);
const voteEntity = this.voteRepository.create(vote);
await this.voteRepository.save(voteEntity);
}
async getResults() {
const all_votes = await this.voteRepository.find();
const compiled_results: { [question: string]: { [vote: string]: number } } =
{};
for (const vote of all_votes) {
for (const answer of vote.answers) {
if (!(answer.question_id in compiled_results)) {
compiled_results[answer.question_id] = {};
}
if (!(answer.answer in compiled_results[answer.question_id])) {
compiled_results[answer.question_id][answer.answer] = 0;
}
compiled_results[answer.question_id][answer.answer]++;
}
}
return compiled_results;
}
}