Skip to content

Commit 7ca39a0

Browse files
committed
fixes 3
1 parent eba0353 commit 7ca39a0

File tree

5 files changed

+20
-15
lines changed

5 files changed

+20
-15
lines changed

src/main/java/mate/academy/rickandmorty/controller/CharacterController.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.swagger.v3.oas.annotations.Operation;
44
import io.swagger.v3.oas.annotations.responses.ApiResponse;
55
import io.swagger.v3.oas.annotations.tags.Tag;
6+
import jakarta.persistence.EntityNotFoundException;
67
import java.util.List;
78
import lombok.RequiredArgsConstructor;
89
import mate.academy.rickandmorty.dto.internal.CharacterDto;
@@ -30,7 +31,8 @@ public class CharacterController {
3031
}
3132
)
3233
public CharacterDto getRandom() {
33-
return characterService.getRandomCharacter();
34+
return characterService.getRandomCharacter().orElseThrow(() ->
35+
new EntityNotFoundException("Character not found cause database is empty"));
3436
}
3537

3638
@GetMapping()

src/main/java/mate/academy/rickandmorty/dto/external/ResponseCharacterDto.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package mate.academy.rickandmorty.dto.external;
22

3-
import java.time.LocalDateTime;
3+
import java.time.OffsetDateTime;
44
import java.util.List;
55
import lombok.Data;
66

@@ -18,6 +18,6 @@ public class ResponseCharacterDto {
1818
private String image;
1919
private List<String> episode;
2020
private String url;
21-
private LocalDateTime created;
21+
private OffsetDateTime created;
2222

2323
}

src/main/java/mate/academy/rickandmorty/model/Character.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import jakarta.persistence.OneToMany;
1111
import jakarta.persistence.OneToOne;
1212
import jakarta.persistence.Table;
13-
import java.time.LocalDateTime;
13+
import java.time.OffsetDateTime;
1414
import java.util.List;
1515
import lombok.Data;
1616

@@ -48,7 +48,7 @@ public class Character {
4848
)
4949
private List<Episode> episodes;
5050
private String url;
51-
private LocalDateTime created;
51+
private OffsetDateTime created;
5252

5353

5454
}

src/main/java/mate/academy/rickandmorty/model/Location.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import jakarta.persistence.GeneratedValue;
55
import jakarta.persistence.GenerationType;
66
import jakarta.persistence.Id;
7+
import lombok.Data;
78

89
@Entity
10+
@Data
911
public class Location {
1012

1113
@Id

src/main/java/mate/academy/rickandmorty/service/CharacterService.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.net.http.HttpResponse;
99
import java.util.ArrayList;
1010
import java.util.List;
11+
import java.util.Optional;
1112
import java.util.Random;
1213
import lombok.RequiredArgsConstructor;
1314
import mate.academy.rickandmorty.dto.external.ResponseDataDto;
@@ -21,9 +22,8 @@
2122
@RequiredArgsConstructor
2223
public class CharacterService {
2324

24-
private static final String DEFAULT_API = "https://rickandmortyapi.com/api/";
25-
private static final String CHARACTER = "character";
26-
private static int countOfCharacters = 0;
25+
private static final String API = "https://rickandmortyapi.com/api/character";
26+
2727
private final ObjectMapper objectMapper;
2828
private final CharacterMapper characterMapper;
2929
private final CharacterRepository characterRepository;
@@ -33,7 +33,7 @@ public void loadAllCharacters() {
3333
return;
3434
}
3535
HttpClient httpClient = HttpClient.newHttpClient();
36-
String url = DEFAULT_API + CHARACTER;
36+
String url = API;
3737

3838
HttpRequest httpRequest = HttpRequest.newBuilder()
3939
.GET()
@@ -59,9 +59,8 @@ public void loadAllCharacters() {
5959
.toList());
6060
}
6161
characterRepository.saveAll(characterList);
62-
countOfCharacters = responseDataDto.info().count();
6362
} catch (IOException | InterruptedException e) {
64-
throw new RuntimeException(e);
63+
throw new RuntimeException("Fetching data failed", e);
6564
}
6665
System.out.println("Loading finished successfully");
6766
}
@@ -72,12 +71,14 @@ public List<CharacterDto> getByName(String name) {
7271
.toList();
7372
}
7473

75-
public CharacterDto getRandomCharacter() {
74+
public Optional<CharacterDto> getRandomCharacter() {
7675
List<Long> allIds = characterRepository.findAllIds();
77-
int random = new Random().nextInt(0, allIds.size());
76+
if (allIds.isEmpty()) {
77+
return Optional.empty();
78+
}
79+
int random = new Random().nextInt(allIds.size());
7880
return characterRepository.findById(allIds.get(random))
79-
.map(characterMapper::toDto)
80-
.orElse(null);
81+
.map(characterMapper::toDto);
8182
}
8283

8384
}

0 commit comments

Comments
 (0)