1- const API_BASE_URL = " https://wedev-api.sky.pro/api/v1" ;
2- const PERSONAL_KEY = " eduard-zakharevskiy" ;
3- const API_URL = `${ API_BASE_URL } /${ PERSONAL_KEY } /comments` ;
1+ const API_BASE_URL = ' https://wedev-api.sky.pro/api/v1'
2+ const PERSONAL_KEY = ' eduard-zakharevskiy'
3+ const API_URL = `${ API_BASE_URL } /${ PERSONAL_KEY } /comments`
44
55export async function getComments ( ) {
6- const response = await fetch ( API_URL ) ;
7- if ( ! response . ok ) throw new Error ( 'Ошибка загрузки' ) ;
8- const data = await response . json ( ) ;
9- return data . comments ;
10- }
6+ try {
7+ const response = await fetch ( API_URL )
8+
9+ // обработка статусов для GET запроса
10+ if ( response . status === 500 ) {
11+ throw new Error ( 'Сервер сломался, попробуй позже' )
12+ }
1113
12- export async function addComment ( { name, text } ) {
13- const response = await fetch ( API_URL , {
14- method : 'POST' ,
15- body : JSON . stringify ( { name, text } )
16- } ) ;
14+ if ( ! response . ok ) {
15+ throw new Error ( `Ошибка загрузки: ${ response . status } ` )
16+ }
1717
18- if ( ! response . ok ) {
19- const errorData = await response . json ( ) ;
20- throw new Error ( errorData . error || 'Ошибка сервера' ) ;
18+ const data = await response . json ( )
19+ return data . comments
20+ } catch ( error ) {
21+ console . error ( 'Ошибка при загрузке комментариев:' , error )
22+ throw error // прокидываем ошибку дальше
2123 }
24+ }
25+
26+ export async function addComment (
27+ { name, text, forceError = false } ,
28+ retryCount = 0 ,
29+ ) {
30+ const maxRetries = 2 // максимально 2 повторные попытки
31+
32+ try {
33+ const response = await fetch ( API_URL , {
34+ method : 'POST' ,
35+ body : JSON . stringify ( { name, text, forceError } ) ,
36+ } )
37+
38+ // обработка HTTP статусов
39+ if ( response . status === 500 ) {
40+ // если есть еще попытки, повторяем
41+ if ( retryCount < maxRetries ) {
42+ console . log (
43+ `Сервер вернул 500, повторяем попытку ${ retryCount + 1 } /${ maxRetries } ` ,
44+ )
45+ // ждем 1 сек перед повторной попыткой
46+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) )
47+ return addComment ( { name, text, forceError } , retryCount + 1 )
48+ }
49+ throw new Error ( 'Сервер сломался, попробуй позже' )
50+ }
2251
23- return await response . json ( ) ;
24- }
52+ if ( response . status === 400 ) {
53+ throw new Error (
54+ 'Имя и комментарий должны быть не короче 3 символов' ,
55+ )
56+ }
57+
58+ if ( ! response . ok ) {
59+ throw new Error ( `Ошибка сервера: ${ response . status } ` )
60+ }
61+
62+ return await response . json ( )
63+ } catch ( error ) {
64+ // если ошибка сети и есть еще попытки - повторяем
65+ if ( error . message === 'Failed to fetch' && retryCount < maxRetries ) {
66+ console . log (
67+ `Сетевая ошибка, повторяем попытку ${ retryCount + 1 } /${ maxRetries } ` ,
68+ )
69+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) )
70+ return addComment ( { name, text, forceError } , retryCount + 1 )
71+ }
72+
73+ console . error ( 'Ошибка при добавлении комментария:' , error )
74+ throw error
75+ }
76+ }
0 commit comments