PRA2024/Biblioteka/src/main/java/org/example/LibraryService.java

100 lines
3.9 KiB
Java

package org.example;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import java.util.List;
public class LibraryService {
private SessionFactory sessionFactory;
public LibraryService(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void printAllAuthors() {
try (Session session = sessionFactory.openSession()) {
Query<Author> query = session.createQuery("FROM Author", Author.class);
List<Author> authors = query.getResultList();
System.out.println("Dostępni autorzy:");
for (Author author : authors) {
System.out.println("ID: " + author.getId() + author.getName());
}
}
}
public List<Book> findAllBooksByAuthorId(Long authorId) {
List<Book> books;
try (Session session = sessionFactory.openSession()) {
Query<Book> query = session.createQuery("SELECT b FROM Book b JOIN FETCH b.author WHERE b.author.id = :authorId", Book.class);
query.setParameter("authorId", authorId);
books = query.getResultList();
}
return books;
}
public void printBooksByAuthor(long authorId) {
List<Book> booksByAuthor = findAllBooksByAuthorId(authorId);
if (!booksByAuthor.isEmpty()) {
Author author = booksByAuthor.get(0).getAuthor();
System.out.println("Książki autora:\n " + author.getName());
for (Book book : booksByAuthor) {
System.out.println("Tytuł: " + book.getTitle());
System.out.println("Data publikacji: " + book.getPublicationDate());
System.out.println("--------");
}
} else {
System.out.println("Nie znaleziono książek dla autora o ID: " + authorId);
}
}
public void printBorrowsByUserId(long userId, int pageNumber) {
int pageSize = 3;
try (Session session = sessionFactory.openSession()) {
Query<Borrow> query = session.createQuery("FROM Borrow b WHERE b.user.id = :userId", Borrow.class);
query.setParameter("userId", userId);
query.setFirstResult((pageNumber - 1) * pageSize);
query.setMaxResults(pageSize);
List<Borrow> borrows = query.getResultList();
if (borrows.isEmpty()) {
System.out.println("Użytkownik o ID " + userId + " nie ma żadnych wypożyczeń.");
} else {
for (Borrow borrow : borrows) {
System.out.println("Wypożyczenie ID: " + borrow.getId());
System.out.println("Książka: " + borrow.getBook().getTitle());
System.out.println("Data wypożyczenia: " + borrow.getBorrowDate());
System.out.println("Data zwrotu: " + borrow.getReturnDate());
System.out.println("--------");
}
}
}
}
public boolean hasBorrows(long userId) {
try (Session session = sessionFactory.openSession()) {
Query<Long> query = session.createQuery("SELECT COUNT(b.id) FROM Borrow b WHERE b.user.id = :userId", Long.class);
query.setParameter("userId", userId);
return query.getSingleResult() > 0;
}
}
public void printAvailableBooks() {
try (Session session = sessionFactory.openSession()) {
Query<Book> query = session.createQuery("FROM Book b WHERE b.availabilityStatus = true", Book.class);
List<Book> availableBooks = query.getResultList();
if (availableBooks.isEmpty()) {
System.out.println("Brak dostępnych książek.");
} else {
System.out.println("Dostępne książki:");
for (Book book : availableBooks) {
System.out.println("ID: " + book.getId() + ", Tytuł: " + book.getTitle());
}
}
}
}
}