add the code

liliFace
litao 6 months ago
parent c1ffe8c62f
commit 49ea2bbb08

@ -0,0 +1,62 @@
package com.library.model;
/**
* Book
*/
public class Book {
private String isbn;
private String title;
private String author;
private boolean available;
public Book(String isbn, String title, String author) {
this.isbn = isbn;
this.title = title;
this.author = author;
this.available = true;
}
// Getters and Setters
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public boolean isAvailable() {
return available;
}
public void setAvailable(boolean available) {
this.available = available;
}
@Override
public String toString() {
return "Book{" +
"isbn='" + isbn + '\'' +
", title='" + title + '\'' +
", author='" + author + '\'' +
", available=" + available +
'}';
}
}

@ -0,0 +1,68 @@
package com.library.model;
import java.util.ArrayList;
import java.util.List;
/**
* Member
*/
public class Member {
private String memberId;
private String name;
private String email;
private List<Book> borrowedBooks;
public Member(String memberId, String name, String email) {
this.memberId = memberId;
this.name = name;
this.email = email;
this.borrowedBooks = new ArrayList<>();
}
// Getters and Setters
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public List<Book> getBorrowedBooks() {
return new ArrayList<>(borrowedBooks);
}
public void addBorrowedBook(Book book) {
this.borrowedBooks.add(book);
}
public void removeBorrowedBook(Book book) {
this.borrowedBooks.remove(book);
}
@Override
public String toString() {
return "Member{" +
"memberId='" + memberId + '\'' +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}

@ -0,0 +1,18 @@
package com.library.repository;
import com.library.model.Book;
import java.util.List;
import java.util.Optional;
/**
* - Dependency Inversion Principle
*/
public interface BookRepository {
void save(Book book);
Optional<Book> findByIsbn(String isbn);
List<Book> findAll();
List<Book> findByAuthor(String author);
void delete(Book book);
}

@ -0,0 +1,45 @@
package com.library.repository;
import com.library.model.Book;
import java.util.*;
import java.util.stream.Collectors;
/**
*
*/
public class InMemoryBookRepository implements BookRepository {
private Map<String, Book> books;
public InMemoryBookRepository() {
this.books = new HashMap<>();
}
@Override
public void save(Book book) {
books.put(book.getIsbn(), book);
}
@Override
public Optional<Book> findByIsbn(String isbn) {
return Optional.ofNullable(books.get(isbn));
}
@Override
public List<Book> findAll() {
return new ArrayList<>(books.values());
}
@Override
public List<Book> findByAuthor(String author) {
return books.values().stream()
.filter(book -> book.getAuthor().equals(author))
.collect(Collectors.toList());
}
@Override
public void delete(Book book) {
books.remove(book.getIsbn());
}
}

@ -0,0 +1,37 @@
package com.library.repository;
import com.library.model.Member;
import java.util.*;
/**
*
*/
public class InMemoryMemberRepository implements MemberRepository {
private Map<String, Member> members;
public InMemoryMemberRepository() {
this.members = new HashMap<>();
}
@Override
public void save(Member member) {
members.put(member.getMemberId(), member);
}
@Override
public Optional<Member> findByMemberId(String memberId) {
return Optional.ofNullable(members.get(memberId));
}
@Override
public List<Member> findAll() {
return new ArrayList<>(members.values());
}
@Override
public void delete(Member member) {
members.remove(member.getMemberId());
}
}

@ -0,0 +1,17 @@
package com.library.repository;
import com.library.model.Member;
import java.util.List;
import java.util.Optional;
/**
*
*/
public interface MemberRepository {
void save(Member member);
Optional<Member> findByMemberId(String memberId);
List<Member> findAll();
void delete(Member member);
}

@ -0,0 +1,14 @@
package com.library.service;
/**
*
*/
public class EmailNotificationService implements NotificationService {
@Override
public void sendEmail(String to, String subject, String message) {
System.out.println("Sending email to: " + to);
System.out.println("Subject: " + subject);
System.out.println("Message: " + message);
}
}

@ -0,0 +1,30 @@
package com.library.service;
import com.library.model.Member;
import com.library.repository.MemberRepository;
/**
* - Single Responsibility Principle
*/
public class EmailReminderService {
private MemberRepository memberRepository;
private NotificationService notificationService;
public EmailReminderService(MemberRepository memberRepository, NotificationService notificationService) {
this.memberRepository = memberRepository;
this.notificationService = notificationService;
}
public void sendDueReminder(String memberId) {
var memberOpt = memberRepository.findByMemberId(memberId);
if (memberOpt.isPresent()) {
Member member = memberOpt.get();
notificationService.sendEmail(
member.getEmail(),
"Book Due Reminder",
"Dear " + member.getName() + ", please return your borrowed books."
);
}
}
}

@ -0,0 +1,79 @@
package com.library.service;
import com.library.model.Book;
import com.library.model.Member;
import com.library.repository.BookRepository;
import com.library.repository.MemberRepository;
import java.util.List;
import java.util.Optional;
/**
* - Single Responsibility Principle
*
*/
public class LibraryService {
private BookRepository bookRepository;
private MemberRepository memberRepository;
public LibraryService(BookRepository bookRepository, MemberRepository memberRepository) {
this.bookRepository = bookRepository;
this.memberRepository = memberRepository;
}
public boolean borrowBook(String memberId, String isbn) {
Optional<Member> memberOpt = memberRepository.findByMemberId(memberId);
Optional<Book> bookOpt = bookRepository.findByIsbn(isbn);
if (memberOpt.isEmpty() || bookOpt.isEmpty()) {
return false;
}
Book book = bookOpt.get();
if (!book.isAvailable()) {
return false;
}
Member member = memberOpt.get();
book.setAvailable(false);
member.addBorrowedBook(book);
bookRepository.save(book);
memberRepository.save(member);
return true;
}
public boolean returnBook(String memberId, String isbn) {
Optional<Member> memberOpt = memberRepository.findByMemberId(memberId);
Optional<Book> bookOpt = bookRepository.findByIsbn(isbn);
if (memberOpt.isEmpty() || bookOpt.isEmpty()) {
return false;
}
Member member = memberOpt.get();
Book book = bookOpt.get();
if (!member.getBorrowedBooks().contains(book)) {
return false;
}
book.setAvailable(true);
member.removeBorrowedBook(book);
bookRepository.save(book);
memberRepository.save(member);
return true;
}
public List<Book> getAvailableBooks() {
return bookRepository.findAll().stream()
.filter(Book::isAvailable)
.toList();
}
public List<Book> searchBooksByAuthor(String author) {
return bookRepository.findByAuthor(author);
}
}

@ -0,0 +1,9 @@
package com.library.service;
/**
* - Interface Segregation Principle
*/
public interface NotificationService {
void sendEmail(String to, String subject, String message);
}
Loading…
Cancel
Save