Files
bedolaga-cabinet/src/api/polls.ts
c0mrade bc90ba3779 refactor: migrate to eslint flat config and format codebase with prettier
- Remove legacy .eslintrc.cjs and .eslintignore
- Add eslint.config.js with flat config, security rules (no-eval, no-implied-eval, no-new-func, no-script-url)
- Add .prettierrc and .prettierignore
- Format entire codebase with prettier
2026-01-27 17:37:31 +03:00

86 lines
2.1 KiB
TypeScript

import apiClient from './client';
export interface PollOption {
id: number;
text: string;
order: number;
}
export interface PollQuestion {
id: number;
text: string;
order: number;
options: PollOption[];
}
export interface PollInfo {
id: number;
response_id: number;
title: string;
description: string | null;
total_questions: number;
answered_questions: number;
is_completed: boolean;
reward_amount: number | null;
}
export interface PollStartResponse {
response_id: number;
current_question_index: number;
total_questions: number;
question: PollQuestion;
}
export interface PollAnswerResponse {
success: boolean;
is_completed: boolean;
next_question: PollQuestion | null;
current_question_index: number | null;
total_questions: number;
reward_granted: number | null;
message: string | null;
}
export interface PollsCountResponse {
count: number;
}
export const pollsApi = {
// Get count of available polls
getCount: async (): Promise<PollsCountResponse> => {
const response = await apiClient.get<PollsCountResponse>('/cabinet/polls/count');
return response.data;
},
// Get available polls
getPolls: async (): Promise<PollInfo[]> => {
const response = await apiClient.get<PollInfo[]>('/cabinet/polls');
return response.data;
},
// Get poll details
getPollDetails: async (responseId: number): Promise<PollInfo> => {
const response = await apiClient.get<PollInfo>(`/cabinet/polls/${responseId}`);
return response.data;
},
// Start or continue poll
startPoll: async (responseId: number): Promise<PollStartResponse> => {
const response = await apiClient.post<PollStartResponse>(`/cabinet/polls/${responseId}/start`);
return response.data;
},
// Answer a question
answerQuestion: async (
responseId: number,
questionId: number,
optionId: number,
): Promise<PollAnswerResponse> => {
const response = await apiClient.post<PollAnswerResponse>(
`/cabinet/polls/${responseId}/questions/${questionId}/answer`,
{ option_id: optionId },
);
return response.data;
},
};