import { FeatureRequest } from "../../types"; import getStorage from "./storage"; interface VotingData { [login: string]: FeatureRequest[], } const storage = getStorage(); const STORAGE_KEY = 'voting'; /** * Vrátí pole voleb, pro které uživatel aktuálně hlasuje. * * @param login login uživatele * @returns pole voleb */ export async function getUserVotes(login: string) { const data: VotingData = await storage.getData(STORAGE_KEY); return data?.[login] || []; } /** * Aktualizuje hlas uživatele pro konkrétní volbu. * * @param login login uživatele * @param option volba * @param active příznak, zda volbu přidat nebo odebrat * @returns aktuální data */ export async function updateFeatureVote(login: string, option: FeatureRequest, active: boolean): Promise { let data: VotingData = await storage.getData(STORAGE_KEY); if (data == null) { data = {}; } if (!(login in data)) { data[login] = []; } const index = data[login].indexOf(option); if (index > -1) { if (active) { throw Error('Pro tuto možnost jste již hlasovali'); } else { data[login].splice(index, 1); if (data[login].length === 0) { delete data[login]; } } } else if (active) { if (data[login].length == 3) { throw Error('Je možné hlasovat pro maximálně 3 možnosti'); } data[login].push(option); } await storage.setData(STORAGE_KEY, data); return data; }