diff --git a/src/main/java/org/example/Book.java b/src/main/java/org/example/Book.java index 047260c7..da932078 100644 --- a/src/main/java/org/example/Book.java +++ b/src/main/java/org/example/Book.java @@ -64,6 +64,15 @@ public void setTitle(String title) { public Long getId() { return bookId; } + + public Loan getLoan() { + return loan; + } + + public void setLoan(Loan loan) { + this.loan = loan; + } + @ManyToMany @JoinTable(name = "book_author", joinColumns = @JoinColumn(name = "bookId")) diff --git a/src/main/java/org/example/Loan.java b/src/main/java/org/example/Loan.java index e9f14982..94d23e27 100644 --- a/src/main/java/org/example/Loan.java +++ b/src/main/java/org/example/Loan.java @@ -1,11 +1,7 @@ package org.example; import jakarta.persistence.*; - import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; @Entity public class Loan { @@ -16,27 +12,24 @@ public class Loan { private ZonedDateTime loanDate; private ZonedDateTime returnDate; - private Long userId; - private Long bookId; public Loan(){ } - - public Long getBookId() { - return bookId; + public User getUser() { + return user; } - public void setBookId(Long bookId) { - this.bookId = bookId; + public void setUser(User user){ + this.user = user; } - public Long getUserId() { - return userId; + public Book getBook() { + return book; } - public void setUserId(Long userId) { - this.userId = userId; + public void setBook(Book book){ + this.book = book; } public ZonedDateTime getReturnDate() { diff --git a/src/main/java/org/example/LoanServices.java b/src/main/java/org/example/LoanServices.java new file mode 100644 index 00000000..567e34d4 --- /dev/null +++ b/src/main/java/org/example/LoanServices.java @@ -0,0 +1,76 @@ +package org.example; + +import jakarta.persistence.EntityManager; +import java.time.ZonedDateTime; +import java.util.List; + +public class LoanServices { + + final private EntityManager em; + + public LoanServices(EntityManager em) { + this.em = em; + } + + // Kolla om en bok är utlånad + public boolean isBookLoaned(Long bookId) { + + List loans = em.createQuery( + "SELECT l FROM Loan l WHERE l.book.bookId = :bookId AND l.returnDate IS NULL", + Loan.class + ) + .setParameter("bookId", bookId) + .getResultList(); + + if (loans.isEmpty()) { + return false; + } else { + return true; + } + } + + // Låna en bok + public boolean loanBook(Long bookId, Long userId) { + + if (isBookLoaned(bookId)) { + return false; + } + + User user = em.find(User.class, userId); + Book book = em.find(Book.class, bookId); + + Loan loan = new Loan(); + + loan.setUser(user); + loan.setBook(book); + loan.setLoanDate(ZonedDateTime.now()); + loan.setReturnDate(null); + em.persist(loan); + return true; + } + + // Lämna tillbak en bok + public boolean returnBook(User user, Book book) { + + Loan loan = em.createQuery( + "SELECT l FROM Loan l WHERE l.user = :user AND l.book = :book AND l.returnDate IS NULL", + Loan.class + ) + .setParameter("user", user) + .setParameter("book", book) + .getResultStream() + .findFirst() + .orElse(null); + + if (loan == null) { + return false; + } + + em.getTransaction().begin(); + + loan.setReturnDate(ZonedDateTime.now()); + book.setLoan(null); + em.getTransaction().commit(); + return true; + } +}