11import { useState , useEffect } from 'react' ;
22import { Experience } from '../interfaces' ;
33import { getBackendEndpoint } from '@/utils/backend_endpoint' ;
4+ import { retryAsync } from '@/utils/retryAsync' ;
45
56interface CompanyDuration {
67 name : string ;
@@ -26,52 +27,60 @@ export function useExperience(): ExperienceData {
2627 try {
2728 // Buscar experiências
2829 const experiencesEndpoint = getBackendEndpoint ( '/experiences' ) ;
29- const experiencesResponse = await fetch ( experiencesEndpoint , {
30- method : 'GET' ,
31- headers : {
32- 'Accept' : 'application/json' ,
33- } ,
34- mode : 'cors' ,
35- } ) ;
30+ const experiencesData = await retryAsync ( async ( ) => {
31+ const experiencesResponse = await fetch ( experiencesEndpoint , {
32+ method : 'GET' ,
33+ headers : {
34+ 'Accept' : 'application/json' ,
35+ } ,
36+ mode : 'cors' ,
37+ } ) ;
3638
37- if ( ! experiencesResponse . ok ) {
38- console . error ( `Erro na requisição de experiências: Status ${ experiencesResponse . status } ` ) ;
39- const responseText = await experiencesResponse . text ( ) ;
40- console . error ( 'Resposta do servidor:' , responseText ) ;
41- throw new Error ( `Falha ao carregar as experiências. Status: ${ experiencesResponse . status } ` ) ;
42- }
43-
44- const experiencesData = await experiencesResponse . json ( ) ;
45-
46- if ( ! Array . isArray ( experiencesData ) ) {
47- throw new Error ( 'Resposta inválida: os dados não são um array' ) ;
48- }
39+ if ( ! experiencesResponse . ok ) {
40+ console . error ( `Erro na requisição de experiências: Status ${ experiencesResponse . status } ` ) ;
41+ const responseText = await experiencesResponse . text ( ) ;
42+ console . error ( 'Resposta do servidor:' , responseText ) ;
43+ throw new Error ( `Falha ao carregar as experiências. Status: ${ experiencesResponse . status } ` ) ;
44+ }
45+
46+ const jsonData = await experiencesResponse . json ( ) ;
47+
48+ if ( ! Array . isArray ( jsonData ) ) {
49+ throw new Error ( 'Resposta inválida: os dados não são um array' ) ;
50+ }
51+
52+ return jsonData as Experience [ ] ;
53+ } ) ;
4954
5055 setExperiences ( experiencesData ) ;
5156
5257 // Buscar duração por empresa
5358 const companyDurationsEndpoint = getBackendEndpoint ( '/experiences?company_duration=true' ) ;
54- const companyDurationsResponse = await fetch ( companyDurationsEndpoint , {
55- method : 'GET' ,
56- headers : {
57- 'Accept' : 'application/json' ,
58- } ,
59- mode : 'cors' ,
59+ const durationsData = await retryAsync ( async ( ) => {
60+ const companyDurationsResponse = await fetch ( companyDurationsEndpoint , {
61+ method : 'GET' ,
62+ headers : {
63+ 'Accept' : 'application/json' ,
64+ } ,
65+ mode : 'cors' ,
66+ } ) ;
67+
68+ if ( ! companyDurationsResponse . ok ) {
69+ console . error ( `Erro na requisição de durações por empresa: Status ${ companyDurationsResponse . status } ` ) ;
70+ const responseText = await companyDurationsResponse . text ( ) ;
71+ console . error ( 'Resposta do servidor:' , responseText ) ;
72+ throw new Error ( `Falha ao carregar as durações por empresa. Status: ${ companyDurationsResponse . status } ` ) ;
73+ }
74+
75+ const jsonData = await companyDurationsResponse . json ( ) ;
76+
77+ if ( ! Array . isArray ( jsonData ) ) {
78+ throw new Error ( 'Resposta inválida de durações: os dados não são um array' ) ;
79+ }
80+
81+ return jsonData as CompanyDuration [ ] ;
6082 } ) ;
6183
62- if ( ! companyDurationsResponse . ok ) {
63- console . error ( `Erro na requisição de durações por empresa: Status ${ companyDurationsResponse . status } ` ) ;
64- const responseText = await companyDurationsResponse . text ( ) ;
65- console . error ( 'Resposta do servidor:' , responseText ) ;
66- throw new Error ( `Falha ao carregar as durações por empresa. Status: ${ companyDurationsResponse . status } ` ) ;
67- }
68-
69- const durationsData = await companyDurationsResponse . json ( ) ;
70-
71- if ( ! Array . isArray ( durationsData ) ) {
72- throw new Error ( 'Resposta inválida de durações: os dados não são um array' ) ;
73- }
74-
7584 // Mapear durações por empresa
7685 const durationsMap : Record < string , string > = { } ;
7786 durationsData . forEach ( ( item : CompanyDuration ) => {
@@ -82,23 +91,25 @@ export function useExperience(): ExperienceData {
8291
8392 // Buscar tempo total de carreira
8493 const totalDurationEndpoint = getBackendEndpoint ( '/experiences?total_duration=true' ) ;
85- const totalDurationResponse = await fetch ( totalDurationEndpoint , {
86- method : 'GET' ,
87- headers : {
88- 'Accept' : 'application/json' ,
89- } ,
90- mode : 'cors' ,
94+ const totalData = await retryAsync ( async ( ) => {
95+ const totalDurationResponse = await fetch ( totalDurationEndpoint , {
96+ method : 'GET' ,
97+ headers : {
98+ 'Accept' : 'application/json' ,
99+ } ,
100+ mode : 'cors' ,
101+ } ) ;
102+
103+ if ( ! totalDurationResponse . ok ) {
104+ console . error ( `Erro na requisição de tempo total: Status ${ totalDurationResponse . status } ` ) ;
105+ const responseText = await totalDurationResponse . text ( ) ;
106+ console . error ( 'Resposta do servidor:' , responseText ) ;
107+ throw new Error ( `Falha ao carregar o tempo total. Status: ${ totalDurationResponse . status } ` ) ;
108+ }
109+
110+ return totalDurationResponse . json ( ) ;
91111 } ) ;
92112
93- if ( ! totalDurationResponse . ok ) {
94- console . error ( `Erro na requisição de tempo total: Status ${ totalDurationResponse . status } ` ) ;
95- const responseText = await totalDurationResponse . text ( ) ;
96- console . error ( 'Resposta do servidor:' , responseText ) ;
97- throw new Error ( `Falha ao carregar o tempo total. Status: ${ totalDurationResponse . status } ` ) ;
98- }
99-
100- const totalData = await totalDurationResponse . json ( ) ;
101-
102113 if ( typeof totalData . total_duration === 'string' ) {
103114 setTempoTotalCarreira ( totalData . total_duration ) ;
104115 } else {
0 commit comments