31 lines
937 B
TypeScript
31 lines
937 B
TypeScript
import {
|
|
type MSTeamsPoll,
|
|
type MSTeamsPollStore,
|
|
normalizeMSTeamsPollSelections,
|
|
} from "./polls.js";
|
|
|
|
export function createMSTeamsPollStoreMemory(initial: MSTeamsPoll[] = []): MSTeamsPollStore {
|
|
const polls = new Map<string, MSTeamsPoll>();
|
|
for (const poll of initial) {
|
|
polls.set(poll.id, { ...poll });
|
|
}
|
|
|
|
const createPoll = async (poll: MSTeamsPoll) => {
|
|
polls.set(poll.id, { ...poll });
|
|
};
|
|
|
|
const getPoll = async (pollId: string) => polls.get(pollId) ?? null;
|
|
|
|
const recordVote = async (params: { pollId: string; voterId: string; selections: string[] }) => {
|
|
const poll = polls.get(params.pollId);
|
|
if (!poll) return null;
|
|
const normalized = normalizeMSTeamsPollSelections(poll, params.selections);
|
|
poll.votes[params.voterId] = normalized;
|
|
poll.updatedAt = new Date().toISOString();
|
|
polls.set(poll.id, poll);
|
|
return poll;
|
|
};
|
|
|
|
return { createPoll, getPoll, recordVote };
|
|
}
|