Skip to content

Commit 2ee006c

Browse files
committed
Initial commit
1 parent c3bbe60 commit 2ee006c

File tree

13 files changed

+287
-4
lines changed

13 files changed

+287
-4
lines changed

pom.xml

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,52 @@
2525
<groupId>org.springframework.boot</groupId>
2626
<artifactId>spring-boot-starter</artifactId>
2727
</dependency>
28-
2928
<dependency>
3029
<groupId>org.springframework.boot</groupId>
3130
<artifactId>spring-boot-starter-test</artifactId>
3231
<scope>test</scope>
3332
</dependency>
34-
3533
<dependency>
3634
<groupId>org.springframework.boot</groupId>
3735
<artifactId>spring-boot-starter-data-jpa</artifactId>
3836
</dependency>
39-
4037
<dependency>
4138
<groupId>com.h2database</groupId>
4239
<artifactId>h2</artifactId>
4340
</dependency>
41+
<dependency>
42+
<groupId>org.springframework.boot</groupId>
43+
<artifactId>spring-boot-starter-web</artifactId>
44+
<version>RELEASE</version>
45+
<scope>compile</scope>
46+
</dependency>
47+
<dependency>
48+
<groupId>org.projectlombok</groupId>
49+
<artifactId>lombok</artifactId>
50+
<version>1.18.30</version>
51+
<scope>provided</scope>
52+
</dependency>
53+
<dependency>
54+
<groupId>org.springdoc</groupId>
55+
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
56+
<version>2.1.0</version>
57+
</dependency>
58+
<dependency>
59+
<groupId>mysql</groupId>
60+
<artifactId>mysql-connector-java</artifactId>
61+
<version>8.0.33</version>
62+
</dependency>
63+
<dependency>
64+
<groupId>org.mapstruct</groupId>
65+
<artifactId>mapstruct</artifactId>
66+
<version>1.5.5.Final</version>
67+
</dependency>
68+
<dependency>
69+
<groupId>org.mapstruct</groupId>
70+
<artifactId>mapstruct-processor</artifactId>
71+
<version>1.5.5.Final</version>
72+
<scope>provided</scope>
73+
</dependency>
4474
</dependencies>
4575

4676
<build>
@@ -66,6 +96,9 @@
6696
<consoleOutput>true</consoleOutput>
6797
<failsOnError>true</failsOnError>
6898
<linkXRef>false</linkXRef>
99+
<sourceDirectories>
100+
<sourceDirectory>src/main/java</sourceDirectory>
101+
</sourceDirectories>
69102
</configuration>
70103
</plugin>
71104
</plugins>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package mate.academy.rickandmorty.config;
2+
3+
import org.mapstruct.InjectionStrategy;
4+
import org.mapstruct.NullValueCheckStrategy;
5+
6+
@org.mapstruct.MapperConfig(
7+
componentModel = "spring",
8+
injectionStrategy = InjectionStrategy.CONSTRUCTOR,
9+
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
10+
implementationPackage = "<PACKAGE_NAME>.impl"
11+
)
12+
public class MapperConfig {
13+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package mate.academy.rickandmorty.config;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.web.client.RestTemplate;
6+
7+
@Configuration
8+
public class RestTemplateConfig {
9+
@Bean
10+
public RestTemplate restTemplate() {
11+
return new RestTemplate();
12+
}
13+
}
14+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package mate.academy.rickandmorty.controller;
2+
3+
import io.swagger.v3.oas.annotations.Operation;
4+
import io.swagger.v3.oas.annotations.tags.Tag;
5+
import java.util.List;
6+
import lombok.RequiredArgsConstructor;
7+
import mate.academy.rickandmorty.dto.CharacterDto;
8+
import mate.academy.rickandmorty.service.CharacterService;
9+
import org.springdoc.core.annotations.ParameterObject;
10+
import org.springframework.data.domain.Pageable;
11+
import org.springframework.data.web.PageableDefault;
12+
import org.springframework.web.bind.annotation.GetMapping;
13+
import org.springframework.web.bind.annotation.PathVariable;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
import org.springframework.web.bind.annotation.RestController;
16+
17+
@Tag(name = "Application", description = "Endpoints for application")
18+
@RequiredArgsConstructor
19+
@RestController
20+
@RequestMapping("/application")
21+
public class ApplicationController {
22+
private final CharacterService characterService;
23+
24+
@GetMapping
25+
@Operation(
26+
summary = "Get character",
27+
description = "The request randomly generates a wiki about one character"
28+
+ " in the universe the animated series Rick & Morty")
29+
public CharacterDto getCharacter(@ParameterObject @PageableDefault Pageable pageable) {
30+
return characterService.getCharacter(pageable);
31+
}
32+
33+
@GetMapping("/{name}")
34+
@Operation(
35+
summary = "Get character by name",
36+
description = "returns a list of all characters whose"
37+
+ " name contains the search string")
38+
public List<CharacterDto> getCharacterByName(@PathVariable String name,
39+
@ParameterObject @PageableDefault
40+
Pageable pageable) {
41+
return characterService.findCharacterByName(name, pageable);
42+
}
43+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package mate.academy.rickandmorty.dto;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class CharacterDto {
7+
private Long id;
8+
private String externalId;
9+
private String name;
10+
private String status;
11+
private String gender;
12+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package mate.academy.rickandmorty.dto;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class CharacterExternalDto {
7+
private Long id;
8+
private String name;
9+
private String status;
10+
private String gender;
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package mate.academy.rickandmorty.dto;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
import lombok.Data;
6+
7+
@Data
8+
public class CharacterResponseDto {
9+
private Map<String, Object> info;
10+
private List<CharacterExternalDto> results;
11+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package mate.academy.rickandmorty.mapper;
2+
3+
import mate.academy.rickandmorty.config.MapperConfig;
4+
import mate.academy.rickandmorty.dto.CharacterDto;
5+
import mate.academy.rickandmorty.dto.CharacterExternalDto;
6+
import mate.academy.rickandmorty.model.RikAndMortyCharacter;
7+
import org.mapstruct.Mapper;
8+
import org.mapstruct.Mapping;
9+
10+
@Mapper(config = MapperConfig.class)
11+
public interface CharacterMapper {
12+
13+
CharacterDto toDto(RikAndMortyCharacter character);
14+
15+
@Mapping(target = "externalId", expression = "java(setExternalId(characterResponseDto))")
16+
RikAndMortyCharacter toEntity(CharacterExternalDto characterResponseDto);
17+
18+
default Long setExternalId(CharacterExternalDto characterExternalDto) {
19+
return characterExternalDto.getId();
20+
}
21+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package mate.academy.rickandmorty.model;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.GenerationType;
6+
import jakarta.persistence.Id;
7+
import jakarta.persistence.Table;
8+
import lombok.Getter;
9+
import lombok.Setter;
10+
11+
@Getter
12+
@Setter
13+
@Entity
14+
@Table(name = "characters")
15+
public class RikAndMortyCharacter {
16+
@Id
17+
@GeneratedValue(strategy = GenerationType.IDENTITY)
18+
private Long id;
19+
private Long externalId;
20+
private String name;
21+
private String status;
22+
private String gender;
23+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package mate.academy.rickandmorty.repository;
2+
3+
import java.util.List;
4+
import mate.academy.rickandmorty.model.RikAndMortyCharacter;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
7+
8+
public interface CharacterRepository extends JpaRepository<RikAndMortyCharacter, Long>,
9+
JpaSpecificationExecutor<RikAndMortyCharacter> {
10+
11+
List<RikAndMortyCharacter> searchRikAndMortyCharactersByNameContaining(String name);
12+
}

0 commit comments

Comments
 (0)