diff --git a/src/main/java/de/dpunkt/myaktion/model/Campaign.java b/src/main/java/de/dpunkt/myaktion/model/Campaign.java index 0b5aca6de26a5680021f4c73b1c950086123c1f5..d5cac29b985f1eceb67444f8ac3b92f5bd2b198c 100644 --- a/src/main/java/de/dpunkt/myaktion/model/Campaign.java +++ b/src/main/java/de/dpunkt/myaktion/model/Campaign.java @@ -25,6 +25,7 @@ import javax.persistence.Transient; import javax.validation.constraints.DecimalMin; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; /** * @author Julian @@ -36,6 +37,7 @@ import javax.validation.constraints.Size; query = "SELECT a FROM Campaign a ORDER BY a.name"), @NamedQuery(name = Campaign.getAmountDonatedSoFar, query = "SELECT SUM(d.amount) FROM Donation d WHERE d.campaign = :campaign") }) +@XmlRootElement @Entity @EntityListeners(EntityCreationListener.class) public class Campaign extends DateEntity { diff --git a/src/main/java/de/dpunkt/myaktion/resources/CampaignResource.java b/src/main/java/de/dpunkt/myaktion/resources/CampaignResource.java index 56da7c497663249879580509de995f34f592c730..25015bf803ac060be4201d50fa043278e0948280 100644 --- a/src/main/java/de/dpunkt/myaktion/resources/CampaignResource.java +++ b/src/main/java/de/dpunkt/myaktion/resources/CampaignResource.java @@ -23,15 +23,15 @@ public class CampaignResource { @GET @Path("/list") - @Produces(MediaType.APPLICATION_JSON) + @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public List<Campaign> getAllCampaigns() { List<Campaign> allCampaigns = campaignService.getAllCampaigns(); - + allCampaigns.forEach(campaign -> { campaign.setDonations(null); campaign.setOrganizer(null); }); - + return allCampaigns; } @@ -58,11 +58,11 @@ public class CampaignResource { campaign.setName(newCampaign.getName()); campaign.setDonationMinimum(newCampaign.getDonationMinimum()); campaign.setTargetAmount(newCampaign.getTargetAmount()); - + newCampaign = campaignService.updateCampaign(campaign); newCampaign.setDonations(null); newCampaign.setOrganizer(null); - + return newCampaign; } } \ No newline at end of file diff --git a/src/main/java/de/dpunkt/myaktion/resources/DonationResource.java b/src/main/java/de/dpunkt/myaktion/resources/DonationResource.java index 36a92283b0e3d456dd5a7de6baff3d29b0443647..b9b4b93ac5555fc521f6151e10ccefff12cbd97a 100644 --- a/src/main/java/de/dpunkt/myaktion/resources/DonationResource.java +++ b/src/main/java/de/dpunkt/myaktion/resources/DonationResource.java @@ -12,11 +12,13 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import de.dpunkt.myaktion.model.Account; import de.dpunkt.myaktion.model.Donation; import de.dpunkt.myaktion.model.Donation.Status; import de.dpunkt.myaktion.services.DonationService; +import de.dpunkt.myaktion.services.exceptions.ObjectNotFoundException; @Path("/") public class DonationResource { @@ -38,23 +40,36 @@ public class DonationResource { @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public void addDonation(@PathParam(value = "campaignId") Long campaignId, @FormParam(value = "donorName") String donorName, - @FormParam(value = "amount") Double amount, - @FormParam(value = "iban") String iban, + @FormParam(value = "amount") Double amount, @FormParam(value = "iban") String iban, @FormParam(value = "nameOfBank") String nameOfBank, @FormParam(value = "receiptRequested") Boolean receiptRequested) { Donation donation = new Donation(); donation.setDonorName(donorName); donation.setAmount(new BigDecimal(amount)); - + Account account = new Account(); account.setIban(iban); account.setName(donorName); account.setNameOfBank(nameOfBank); - + donation.setAccount(account); donation.setReceiptRequested(receiptRequested); donation.setStatus(Status.IN_PROCESS); - + donationService.addDonation(campaignId, donation); } + + @GET + @Path("/donation/list/{campaignId}") + @Produces(MediaType.APPLICATION_JSON) + public Response getDonationListPublic(@PathParam(value = "campaignId") Long campaignId) { + List<Donation> donations; + try { + donations = donationService.getDonationListPublic(campaignId); + + return Response.ok(donations).build(); + } catch (ObjectNotFoundException e) { + return Response.status(javax.ws.rs.core.Response.Status.NOT_FOUND).build(); + } + } } diff --git a/src/main/java/de/dpunkt/myaktion/services/DonationService.java b/src/main/java/de/dpunkt/myaktion/services/DonationService.java index 9815011543c29bf2e0424ac878b28f6847b62549..c1a1157d9cc3c412c7859c64939de305f5348372 100644 --- a/src/main/java/de/dpunkt/myaktion/services/DonationService.java +++ b/src/main/java/de/dpunkt/myaktion/services/DonationService.java @@ -8,6 +8,7 @@ package de.dpunkt.myaktion.services; import java.util.List; import de.dpunkt.myaktion.model.Donation; +import de.dpunkt.myaktion.services.exceptions.ObjectNotFoundException; /** * @author Julian @@ -20,6 +21,8 @@ public interface DonationService { void addDonation(Long campaignId, Donation donation); void transferDonations(); - + + List<Donation> getDonationListPublic(Long campaignId) throws ObjectNotFoundException; + //---------------------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/src/main/java/de/dpunkt/myaktion/services/DonationServiceBean.java b/src/main/java/de/dpunkt/myaktion/services/DonationServiceBean.java index 836c64b0ac28cca2f9c51d27c6c8ee5cded06f17..d6c837450d01e6810e233917bf4312d0296e7955 100644 --- a/src/main/java/de/dpunkt/myaktion/services/DonationServiceBean.java +++ b/src/main/java/de/dpunkt/myaktion/services/DonationServiceBean.java @@ -6,8 +6,10 @@ package de.dpunkt.myaktion.services; import java.util.List; +import java.util.function.Function; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; import javax.annotation.security.PermitAll; import javax.annotation.security.RolesAllowed; @@ -19,6 +21,7 @@ import javax.persistence.TypedQuery; import de.dpunkt.myaktion.model.Campaign; import de.dpunkt.myaktion.model.Donation; import de.dpunkt.myaktion.model.Donation.Status; +import de.dpunkt.myaktion.services.exceptions.ObjectNotFoundException; import de.dpunkt.myaktion.util.Log.TecLog; /** @@ -61,16 +64,36 @@ public class DonationServiceBean implements DonationService { @PermitAll public void transferDonations() { logger.log(Level.INFO, "log.transferDonation.start"); - + TypedQuery<Donation> query = entityManager.createNamedQuery(Donation.findByStatus, Donation.class); query.setParameter("status", Status.IN_PROCESS); - + List<Donation> donations = query.getResultList(); donations.forEach(donation -> donation.setStatus(Status.TRANSFERRED)); - + logger.log(Level.INFO, "log.transferDonation.done", new Object[] { donations.size() }); } + @Override + @PermitAll + public List<Donation> getDonationListPublic(Long campaignId) throws ObjectNotFoundException { + Campaign managedCampaign = entityManager.find(Campaign.class, campaignId); + if (managedCampaign == null) { + throw new ObjectNotFoundException(); + } + + List<Donation> donations = managedCampaign.getDonations(); + final Function<Donation, Donation> donationFilter = donation -> { + Donation filtered = new Donation(); + filtered.setAmount(donation.getAmount()); + filtered.setDonorName(donation.getDonorName()); + + return filtered; + }; + + return donations.stream().map(donationFilter).collect(Collectors.toList()); + } + //---------------------------------------------------------------------------------------------- } diff --git a/src/main/java/de/dpunkt/myaktion/services/exceptions/ObjectNotFoundException.java b/src/main/java/de/dpunkt/myaktion/services/exceptions/ObjectNotFoundException.java new file mode 100644 index 0000000000000000000000000000000000000000..31501a27b4d82dbbacec82ddc78fbeff055a5005 --- /dev/null +++ b/src/main/java/de/dpunkt/myaktion/services/exceptions/ObjectNotFoundException.java @@ -0,0 +1,5 @@ +package de.dpunkt.myaktion.services.exceptions; + +public class ObjectNotFoundException extends Exception { + private static final long serialVersionUID = 879959260339550219L; +} \ No newline at end of file