Skip to the content.
package com.bookshop.structural.facade;

import com.bookshop.domain.Book;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/** Subsystem 1: stock levels and reservations. */
public class InventoryService {

    private final Map<String, Integer> stockByIsbn = new HashMap<>();

    public void stock(Book book, int copies) {
        stockByIsbn.merge(book.isbn(), copies, Integer::sum);
    }

    public boolean isInStock(List<Book> books) {
        return books.stream().allMatch(b -> stockByIsbn.getOrDefault(b.isbn(), 0) > 0);
    }

    public void reserve(List<Book> books) {
        for (Book book : books) {
            stockByIsbn.merge(book.isbn(), -1, Integer::sum);
        }
    }

    public int stockLevel(Book book) {
        return stockByIsbn.getOrDefault(book.isbn(), 0);
    }
}

Raw file