package com.ufund.api.ufundapi.service; import java.io.IOException; import java.util.Arrays; import com.ufund.api.ufundapi.model.Need; import com.ufund.api.ufundapi.persistence.CupboardDAO; public class CupboardService { private final CupboardDAO cupboardDAO; public class DuplicateKeyException extends Exception { public DuplicateKeyException(String message) { super(message); } } public CupboardService(CupboardDAO cupboardDAO) { this.cupboardDAO = cupboardDAO; } public Need createNeed(String name, int maxGoal, Need.GoalType goalType) throws IOException, DuplicateKeyException { Need need = new Need(name, goalType, maxGoal); if (need.getMaxGoal() <= 0) { throw new IllegalArgumentException("Max Goal must be greater than zero"); } else { for (Need searchNeed : cupboardDAO.getNeeds()) { if (need.getName().equalsIgnoreCase(searchNeed.getName())) { throw new DuplicateKeyException("Duplicate names are not allowed"); } } return cupboardDAO.addNeed(need); } } public Need[] getNeeds() throws IOException { return cupboardDAO.getNeeds(); } /** * Returns an array of needs filtered by a search * * @param search The search substring * @return The requested array * @throws IOException */ public Need[] searchNeeds(String search) throws IOException { return Arrays.stream(cupboardDAO.getNeeds()) .filter(i -> i.getName().toLowerCase().contains(search.toLowerCase())) .toArray(Need[]::new); } /** * @param id * @return * @throws IOException */ public Need getNeed(int id) throws IOException { return cupboardDAO.getNeed(id); } /** * * @param need * @return * @throws IOException */ public Need updateNeed(Need need) throws IOException { return cupboardDAO.updateNeed(need); } public boolean deleteNeed(int id) throws IOException { return cupboardDAO.deleteNeed(id); } }