import axios from 'axios' const settings = { withCredentials: true, headers: { 'API-KEY': '1cdd9f77-c60e-4af5-b194-659e4ebd5d41' } } const instance = axios.create({ baseURL: 'https://social-network.samuraijs.com/api/1.1/', ...settings }) // api export const todolistsAPI = { getTodolists() { const promise = instance.get('todo-lists'); return promise; }, createTodolist(title: string) { const promise = instance.post>('todo-lists', {title: title}); return promise; }, deleteTodolist(id: string) { const promise = instance.delete(`todo-lists/${id}`); return promise; }, updateTodolist(id: string, title: string) { const promise = instance.put(`todo-lists/${id}`, {title: title}); return promise; }, getTasks(todolistId: string) { return instance.get(`todo-lists/${todolistId}/tasks`); }, deleteTask(todolistId: string, taskId: string) { return instance.delete(`todo-lists/${todolistId}/tasks/${taskId}`); }, createTask(todolistId: string, taskTitile: string) { return instance.post>(`todo-lists/${todolistId}/tasks`, {title: taskTitile}); }, updateTask(todolistId: string, taskId: string, model: UpdateTaskModelType) { return instance.put>(`todo-lists/${todolistId}/tasks/${taskId}`, model); } } export type LoginParamsType = { email: string password: string rememberMe: boolean captcha?: string } export const authAPI = { login(data: LoginParamsType) { const promise = instance.post>('auth/login', data); return promise; }, logout() { const promise = instance.delete>('auth/login'); return promise; }, me() { const promise = instance.get>('auth/me'); return promise } } // types export type TodolistType = { id: string title: string addedDate: string order: number } export type ResponseType = { resultCode: number messages: Array data: D } export enum TaskStatuses { New = 0, InProgress = 1, Completed = 2, Draft = 3 } export enum TaskPriorities { Low = 0, Middle = 1, Hi = 2, Urgently = 3, Later = 4 } export type TaskType = { description: string title: string status: TaskStatuses priority: TaskPriorities startDate: string deadline: string id: string todoListId: string order: number addedDate: string } export type UpdateTaskModelType = { title: string description: string status: TaskStatuses priority: TaskPriorities startDate: string deadline: string } type GetTasksResponse = { error: string | null totalCount: number items: TaskType[] }