diff options
Diffstat (limited to 'ufund-api/src/main/java/com/ufund/api/ufundapi/service')
| -rw-r--r-- | ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java | 83 | 
1 files changed, 83 insertions, 0 deletions
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java new file mode 100644 index 0000000..860a2a8 --- /dev/null +++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java @@ -0,0 +1,83 @@ +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); +    } + +     +}  | 
