Skip to content

Commit f10aa3c

Browse files
committed
Refactors APIService and OnibusService to remove file handling and return coordenadas directly
1 parent e0a25e0 commit f10aa3c

File tree

5 files changed

+19
-76
lines changed

5 files changed

+19
-76
lines changed

src/data/coordenadas/coordenadas.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/main/java/com/dmware/api_onibusbh/scheduler/CoordenadasScheduler.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.dmware.api_onibusbh.scheduler;
22

33
import java.io.IOException;
4+
import java.util.List;
45
import java.util.concurrent.TimeUnit;
56

7+
import com.dmware.api_onibusbh.dto.CoordenadaDTO;
68
import com.dmware.api_onibusbh.services.APIService;
7-
import org.springframework.beans.factory.annotation.Autowired;
89
import org.springframework.scheduling.annotation.Async;
910
import org.springframework.scheduling.annotation.Scheduled;
1011
import org.springframework.stereotype.Component;
@@ -24,9 +25,9 @@ public CoordenadasScheduler(APIService apiService, OnibusService onibusService)
2425

2526
@Async
2627
@Scheduled(fixedDelay = 20, timeUnit = TimeUnit.SECONDS)
27-
public void fetchCoordenadasOnibus() throws IOException {
28-
apiService.getOnibusCoordenadaBH();
29-
onibusService.salvaCoordenadas();
28+
public void fetchCoordenadasOnibus() {
29+
List<CoordenadaDTO> coordenadas = apiService.getOnibusCoordenadaBH();
30+
onibusService.salvaCoordenadas(coordenadas);
3031
}
3132

3233
}

src/main/java/com/dmware/api_onibusbh/services/APIService.java

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
package com.dmware.api_onibusbh.services;
22

33
import java.io.IOException;
4-
import java.nio.file.Files;
5-
import java.nio.file.Path;
6-
import java.nio.file.Paths;
74
import java.util.ArrayList;
85
import java.util.List;
9-
import java.util.Map;
106

11-
import org.springframework.beans.factory.annotation.Value;
7+
import com.dmware.api_onibusbh.dto.CoordenadaDTO;
128
import org.springframework.stereotype.Service;
139
import org.springframework.web.reactive.function.client.WebClientResponseException;
1410

@@ -25,11 +21,6 @@
2521
@Service
2622
public class APIService {
2723

28-
@Value("${BASE_PATH}")
29-
private String BASE_PATH;
30-
@Value("${FILE_NAME}")
31-
private String FILE_NAME;
32-
3324
private final WebClientConfig webClientConfig;
3425
private final ObjectMapper objectMapper;
3526

@@ -86,15 +77,15 @@ public List<LinhaDTO> getLinhasAPIBH() {
8677
}
8778
}
8879

89-
public void getOnibusCoordenadaBH() throws IOException {
80+
public List<CoordenadaDTO> getOnibusCoordenadaBH() {
9081
System.out.printf("Acessando diretamente.%n");
9182
List<String> responses = fetchCoordenadasDirectly();
9283

9384
if (responses == null || responses.size() < 2) {
9485
throw new IllegalStateException("Não foi possível obter resposta de um ou mais endpoints.");
9586
}
9687

97-
processAndSaveCoordenadas(responses);
88+
return processAndReturnCoordenadas(responses);
9889
}
9990

10091
private List<String> fetchCoordenadasDirectly() {
@@ -111,28 +102,21 @@ private List<String> fetchCoordenadasDirectly() {
111102
return Flux.merge(monoParamD, monoParamSD).collectList().block();
112103
}
113104

114-
private void processAndSaveCoordenadas(List<String> responses) throws IOException {
105+
private List<CoordenadaDTO> processAndReturnCoordenadas(List<String> responses) {
115106
String jsonD = responses.get(0);
116107
String jsonSD = responses.get(1);
108+
List<CoordenadaDTO> todasCoordenadas = new ArrayList<>();
117109

118110
try {
119-
TypeReference<List<Map<String, Object>>> typeRef = new TypeReference<>() {
120-
};
121-
List<Map<String, Object>> listD = objectMapper.readValue(jsonD, typeRef);
122-
List<Map<String, Object>> listSD = objectMapper.readValue(jsonSD, typeRef);
123-
124-
List<Map<String, Object>> combinedList = new ArrayList<>(listD);
125-
combinedList.addAll(listSD);
126-
127-
String finalJson = objectMapper.writeValueAsString(combinedList);
111+
TypeReference<List<CoordenadaDTO>> typeRef = new TypeReference<>() {};
112+
113+
List<CoordenadaDTO> listD = objectMapper.readValue(jsonD, typeRef);
114+
List<CoordenadaDTO> listSD = objectMapper.readValue(jsonSD, typeRef);
128115

129-
Path basePath = Paths.get(BASE_PATH);
130-
if (!Files.exists(basePath)) {
131-
Files.createDirectories(basePath);
132-
}
116+
if(listD != null) todasCoordenadas.addAll(listD);
117+
if(listSD != null) todasCoordenadas.addAll(listSD);
133118

134-
Path filePath = basePath.resolve(FILE_NAME);
135-
Files.writeString(filePath, finalJson);
119+
return todasCoordenadas;
136120

137121
} catch (JsonProcessingException e) {
138122
throw new RuntimeException("Erro ao processar o JSON das coordenadas.", e);

src/main/java/com/dmware/api_onibusbh/services/OnibusService.java

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,18 @@
22

33
import com.dmware.api_onibusbh.config.WebClientConfig;
44
import com.dmware.api_onibusbh.dto.CoordenadaDTO;
5-
import com.dmware.api_onibusbh.dto.LinhaDTO;
65
import com.dmware.api_onibusbh.dto.OnibusDTO;
76
import com.dmware.api_onibusbh.entities.LinhaEntity;
87
import com.dmware.api_onibusbh.exceptions.CoordenadasNotFoundException;
98
import com.dmware.api_onibusbh.exceptions.LinhaNotFoundException;
10-
import com.dmware.api_onibusbh.exceptions.LinhasNotFoundException;
119
import com.dmware.api_onibusbh.repositories.LinhasRepository;
12-
import com.fasterxml.jackson.core.type.TypeReference;
1310
import com.fasterxml.jackson.databind.ObjectMapper;
1411
import org.modelmapper.ModelMapper;
1512
import org.slf4j.Logger;
1613
import org.slf4j.LoggerFactory;
17-
import org.springframework.beans.factory.annotation.Autowired;
1814
import org.springframework.beans.factory.annotation.Value;
19-
import org.springframework.core.io.buffer.DataBuffer;
20-
import org.springframework.core.io.buffer.DataBufferUtils;
2115
import org.springframework.stereotype.Service;
22-
import reactor.core.publisher.Flux;
2316

24-
import java.io.IOException;
25-
import java.nio.file.Files;
26-
import java.nio.file.Path;
27-
import java.nio.file.Paths;
28-
import java.nio.file.StandardOpenOption;
2917
import java.time.LocalDateTime;
3018
import java.util.*;
3119
import java.util.function.BinaryOperator;
@@ -37,11 +25,6 @@ public class OnibusService {
3725

3826
private static final Logger logger = LoggerFactory.getLogger(OnibusService.class);
3927

40-
@Value("${BASE_PATH}")
41-
private String BASE_PATH;
42-
@Value("${FILE_NAME}")
43-
private String FILE_NAME;
44-
4528
@Value("${api.onibus.coordenadas.ttl-minutes:20}")
4629
private int ttlMinutes;
4730

@@ -97,7 +80,7 @@ public List<CoordenadaDTO> listarPorNumeroLinha(Integer numeroLinha, Optional<In
9780
return coordenadas;
9881
}
9982

100-
public void salvaCoordenadas() {
83+
public void salvaCoordenadas(List<CoordenadaDTO> todasCoordenadasNovas) {
10184
logger.info("Iniciando o salvamento das coordenadas...");
10285
List<LinhaEntity> linhasExistentes;
10386
try {
@@ -112,11 +95,9 @@ public void salvaCoordenadas() {
11295
return;
11396
}
11497

115-
List<CoordenadaDTO> todasCoordenadasNovas = fetchCoordenadas();
116-
11798
// Agrupa as coordenadas novas mais recentes por número de linha
11899
Map<Integer, List<CoordenadaDTO>> mapaNovasCoordenadasPorLinha;
119-
if (todasCoordenadasNovas.isEmpty()) {
100+
if (todasCoordenadasNovas == null || todasCoordenadasNovas.isEmpty()) {
120101
logger.info("Nenhuma coordenada nova encontrada. Executando apenas limpeza por TTL.");
121102
mapaNovasCoordenadasPorLinha = Collections.emptyMap();
122103
} else {
@@ -186,23 +167,4 @@ public void salvaCoordenadas() {
186167
logger.info("Nenhuma alteração necessária nas linhas.");
187168
}
188169
}
189-
190-
public List<CoordenadaDTO> fetchCoordenadas() {
191-
try {
192-
Path file = Paths.get(BASE_PATH, FILE_NAME);
193-
if (!Files.exists(file)) {
194-
logger.warn("Arquivo de coordenadas não encontrado");
195-
throw new CoordenadasNotFoundException();
196-
}
197-
198-
return objectMapper.readValue(
199-
file.toFile(),
200-
new TypeReference<>() {
201-
});
202-
203-
} catch (CoordenadasNotFoundException | IOException e) {
204-
logger.error("Erro ao ler arquivo de coordenadas");
205-
throw new RuntimeException(e);
206-
}
207-
}
208170
}

src/main/resources/application.properties

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,5 @@ server.address=0.0.0.0
55
springdoc.swagger-ui.path=/swagger-ui.html
66
spring.data.mongodb.auto-index-creation=true
77
spring.data.mongodb.authentication-database=admin
8-
# File
9-
BASE_PATH=src/data/coordenadas
10-
FILE_NAME=coordenadas.json
118
# Business
129
api.onibus.coordenadas.ttl-minutes=20

0 commit comments

Comments
 (0)