Skip to content

Commit

Permalink
Merge pull request #1 from BlueVioletTeti/development
Browse files Browse the repository at this point in the history
created Book entity, its service and repository
  • Loading branch information
BlueVioletTeti authored Sep 9, 2023
2 parents cc8bd1e + 6a555f2 commit 0278efa
Show file tree
Hide file tree
Showing 9 changed files with 193 additions and 3 deletions.
29 changes: 29 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,35 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.1.0</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.0.6</version>
</dependency>

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

<build>
Expand Down
28 changes: 25 additions & 3 deletions src/main/java/mate/academy/bookstore/BookstoreApplication.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,35 @@
package mate.academy.bookstore;

import java.math.BigDecimal;
import lombok.RequiredArgsConstructor;
import mate.academy.bookstore.model.Book;
import mate.academy.bookstore.service.BookService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@RequiredArgsConstructor
@SpringBootApplication
public class BookstoreApplication {
private final BookService bookService;

public static void main(String[] args) {
SpringApplication.run(BookstoreApplication.class, args);
}
public static void main(String[] args) {
SpringApplication.run(BookstoreApplication.class, args);
}

@Bean
public CommandLineRunner commandLineRunner() {
return args -> {
Book book = new Book();
book.setTitle("Book title");
book.setAuthor("Book author");
book.setIsbn("unique isbn");
book.setPrice(BigDecimal.valueOf(700));

bookService.save(book);

System.out.println(bookService.findAll());
};
}
}
30 changes: 30 additions & 0 deletions src/main/java/mate/academy/bookstore/model/Book.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package mate.academy.bookstore.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.math.BigDecimal;
import lombok.Data;

@Entity
@Data
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String author;
@Column(nullable = false, unique = true)
private String isbn;
@Column(nullable = false)
private BigDecimal price;
private String description;
@Column(name = "cover_image")
private String coverImage;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package mate.academy.bookstore.repository;

import java.util.List;
import mate.academy.bookstore.model.Book;

public interface BookRepository {
Book save(Book book);

List<Book> findAll();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package mate.academy.bookstore.repository;

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.criteria.CriteriaQuery;
import java.util.List;
import mate.academy.bookstore.model.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class BookRepositoryImpl implements BookRepository {
private final EntityManagerFactory entityManagerFactory;

@Autowired
public BookRepositoryImpl(EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
}

@Override
public Book save(Book book) {
EntityManager entityManager = null;
EntityTransaction transaction = null;
try {
entityManager = entityManagerFactory.createEntityManager();
transaction = entityManager.getTransaction();
transaction.begin();
entityManager.persist(book);
transaction.commit();
} catch (Exception e) {
if (transaction != null) {
transaction.rollback();
throw new RuntimeException("Can't save a book: " + book, e);
}
} finally {
if (entityManager != null) {
entityManager.close();
}
}
return book;
}

@Override
public List<Book> findAll() {
try (EntityManager entityManager = entityManagerFactory.createEntityManager()) {
CriteriaQuery<Book> criteriaQuery = entityManager.getCriteriaBuilder()
.createQuery(Book.class);
criteriaQuery.from(Book.class);
return entityManager.createQuery(criteriaQuery).getResultList();
} catch (Exception e) {
throw new RuntimeException("Can't find all books", e);
}
}
}
10 changes: 10 additions & 0 deletions src/main/java/mate/academy/bookstore/service/BookService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package mate.academy.bookstore.service;

import java.util.List;
import mate.academy.bookstore.model.Book;

public interface BookService {
Book save(Book book);

List<Book> findAll();
}
23 changes: 23 additions & 0 deletions src/main/java/mate/academy/bookstore/service/BookServiceImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package mate.academy.bookstore.service;

import java.util.List;
import lombok.RequiredArgsConstructor;
import mate.academy.bookstore.model.Book;
import mate.academy.bookstore.repository.BookRepository;
import org.springframework.stereotype.Service;

@RequiredArgsConstructor
@Service
public class BookServiceImpl implements BookService {
private final BookRepository bookRepository;

@Override
public Book save(Book book) {
return bookRepository.save(book);
}

@Override
public List<Book> findAll() {
return bookRepository.findAll();
}
}
6 changes: 6 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
spring.datasource.url=jdbc:mysql://localhost:3306/books_app?serverTimezone=UTC
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
5 changes: 5 additions & 0 deletions src/test/resources/application.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

0 comments on commit 0278efa

Please sign in to comment.