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[] }