diff --git a/infrastructure/pom.xml b/infrastructure/pom.xml new file mode 100644 index 0000000..7c4c555 --- /dev/null +++ b/infrastructure/pom.xml @@ -0,0 +1,67 @@ + + + + ms-library + org.example + 1.0-SNAPSHOT + + 4.0.0 + + infrastructure + + + + org.example + domain + ${project.version} + + + + org.projectlombok + lombok + true + + + com.h2database + h2 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.mapstruct + mapstruct + 1.4.2.Final + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.mapstruct + mapstruct-processor + 1.4.2.Final + + + org.projectlombok + lombok + 1.18.12 + + + + + + + + + \ No newline at end of file diff --git a/infrastructure/src/main/java/org/example/adapters/BookJpaAdapter.java b/infrastructure/src/main/java/org/example/adapters/BookJpaAdapter.java new file mode 100644 index 0000000..51cca68 --- /dev/null +++ b/infrastructure/src/main/java/org/example/adapters/BookJpaAdapter.java @@ -0,0 +1,59 @@ +package org.example.adapters; + +import org.example.entity.Book; +import org.example.mappers.BookMapper; +import org.example.repository.BookRepository; +import org.exemple.data.BookDto; +import org.exemple.ports.spi.BookPersistencePort; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class BookJpaAdapter implements BookPersistencePort { + + @Autowired + private BookRepository bookRepository; + + @Override + public BookDto addBook(BookDto bookDto) { + + Book book = BookMapper.INSTANCE.bookDtoToBook(bookDto); + + Book bookSaved = bookRepository.save(book); + + return BookMapper.INSTANCE.bookToBookDto(bookSaved); + } + + @Override + public void deleteBookById(Long id) { + bookRepository.deleteById(id); + } + + @Override + public BookDto updateBook(BookDto bookDto) { + return addBook(bookDto); + } + + @Override + public List getBooks() { + + List bookList = bookRepository.findAll(); + + return BookMapper.INSTANCE.bookListToBookDtoList(bookList); + } + + @Override + public BookDto getBookById(Long bookId) { + + Optional book = bookRepository.findById(bookId); + + if (book.isPresent()) { + return BookMapper.INSTANCE.bookToBookDto(book.get()); + } + + return null; + } +} diff --git a/infrastructure/src/main/java/org/example/entity/Book.java b/infrastructure/src/main/java/org/example/entity/Book.java new file mode 100644 index 0000000..5419dbb --- /dev/null +++ b/infrastructure/src/main/java/org/example/entity/Book.java @@ -0,0 +1,29 @@ +package org.example.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class Book { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String title; + + private String description; + + private Double price; +} diff --git a/infrastructure/src/main/java/org/example/mappers/BookMapper.java b/infrastructure/src/main/java/org/example/mappers/BookMapper.java new file mode 100644 index 0000000..5e25b6e --- /dev/null +++ b/infrastructure/src/main/java/org/example/mappers/BookMapper.java @@ -0,0 +1,22 @@ +package org.example.mappers; + +import org.example.entity.Book; +import org.exemple.data.BookDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface BookMapper { + + BookMapper INSTANCE = Mappers.getMapper(BookMapper.class); + + BookDto bookToBookDto(Book book); + + Book bookDtoToBook(BookDto bookDto); + + List bookListToBookDtoList(List bookList); + + List BookDtoListTobookList(List BookDtoList); +} diff --git a/infrastructure/src/main/java/org/example/repository/BookRepository.java b/infrastructure/src/main/java/org/example/repository/BookRepository.java new file mode 100644 index 0000000..11e67e9 --- /dev/null +++ b/infrastructure/src/main/java/org/example/repository/BookRepository.java @@ -0,0 +1,10 @@ +package org.example.repository; + +import org.example.entity.Book; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface BookRepository extends JpaRepository { + +}