Skip to content
Snippets Groups Projects
Commit a14fdc0c authored by Julian Horner's avatar Julian Horner
Browse files

Finish chapter 9

parent 3e1f3b8c
No related branches found
No related tags found
No related merge requests found
...@@ -25,6 +25,7 @@ import javax.persistence.Transient; ...@@ -25,6 +25,7 @@ import javax.persistence.Transient;
import javax.validation.constraints.DecimalMin; import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/** /**
* @author Julian * @author Julian
...@@ -36,6 +37,7 @@ import javax.validation.constraints.Size; ...@@ -36,6 +37,7 @@ import javax.validation.constraints.Size;
query = "SELECT a FROM Campaign a ORDER BY a.name"), query = "SELECT a FROM Campaign a ORDER BY a.name"),
@NamedQuery(name = Campaign.getAmountDonatedSoFar, @NamedQuery(name = Campaign.getAmountDonatedSoFar,
query = "SELECT SUM(d.amount) FROM Donation d WHERE d.campaign = :campaign") }) query = "SELECT SUM(d.amount) FROM Donation d WHERE d.campaign = :campaign") })
@XmlRootElement
@Entity @Entity
@EntityListeners(EntityCreationListener.class) @EntityListeners(EntityCreationListener.class)
public class Campaign extends DateEntity { public class Campaign extends DateEntity {
......
...@@ -23,15 +23,15 @@ public class CampaignResource { ...@@ -23,15 +23,15 @@ public class CampaignResource {
@GET @GET
@Path("/list") @Path("/list")
@Produces(MediaType.APPLICATION_JSON) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<Campaign> getAllCampaigns() { public List<Campaign> getAllCampaigns() {
List<Campaign> allCampaigns = campaignService.getAllCampaigns(); List<Campaign> allCampaigns = campaignService.getAllCampaigns();
allCampaigns.forEach(campaign -> { allCampaigns.forEach(campaign -> {
campaign.setDonations(null); campaign.setDonations(null);
campaign.setOrganizer(null); campaign.setOrganizer(null);
}); });
return allCampaigns; return allCampaigns;
} }
...@@ -58,11 +58,11 @@ public class CampaignResource { ...@@ -58,11 +58,11 @@ public class CampaignResource {
campaign.setName(newCampaign.getName()); campaign.setName(newCampaign.getName());
campaign.setDonationMinimum(newCampaign.getDonationMinimum()); campaign.setDonationMinimum(newCampaign.getDonationMinimum());
campaign.setTargetAmount(newCampaign.getTargetAmount()); campaign.setTargetAmount(newCampaign.getTargetAmount());
newCampaign = campaignService.updateCampaign(campaign); newCampaign = campaignService.updateCampaign(campaign);
newCampaign.setDonations(null); newCampaign.setDonations(null);
newCampaign.setOrganizer(null); newCampaign.setOrganizer(null);
return newCampaign; return newCampaign;
} }
} }
\ No newline at end of file
...@@ -12,11 +12,13 @@ import javax.ws.rs.Path; ...@@ -12,11 +12,13 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import de.dpunkt.myaktion.model.Account; import de.dpunkt.myaktion.model.Account;
import de.dpunkt.myaktion.model.Donation; import de.dpunkt.myaktion.model.Donation;
import de.dpunkt.myaktion.model.Donation.Status; import de.dpunkt.myaktion.model.Donation.Status;
import de.dpunkt.myaktion.services.DonationService; import de.dpunkt.myaktion.services.DonationService;
import de.dpunkt.myaktion.services.exceptions.ObjectNotFoundException;
@Path("/") @Path("/")
public class DonationResource { public class DonationResource {
...@@ -38,23 +40,36 @@ public class DonationResource { ...@@ -38,23 +40,36 @@ public class DonationResource {
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void addDonation(@PathParam(value = "campaignId") Long campaignId, public void addDonation(@PathParam(value = "campaignId") Long campaignId,
@FormParam(value = "donorName") String donorName, @FormParam(value = "donorName") String donorName,
@FormParam(value = "amount") Double amount, @FormParam(value = "amount") Double amount, @FormParam(value = "iban") String iban,
@FormParam(value = "iban") String iban,
@FormParam(value = "nameOfBank") String nameOfBank, @FormParam(value = "nameOfBank") String nameOfBank,
@FormParam(value = "receiptRequested") Boolean receiptRequested) { @FormParam(value = "receiptRequested") Boolean receiptRequested) {
Donation donation = new Donation(); Donation donation = new Donation();
donation.setDonorName(donorName); donation.setDonorName(donorName);
donation.setAmount(new BigDecimal(amount)); donation.setAmount(new BigDecimal(amount));
Account account = new Account(); Account account = new Account();
account.setIban(iban); account.setIban(iban);
account.setName(donorName); account.setName(donorName);
account.setNameOfBank(nameOfBank); account.setNameOfBank(nameOfBank);
donation.setAccount(account); donation.setAccount(account);
donation.setReceiptRequested(receiptRequested); donation.setReceiptRequested(receiptRequested);
donation.setStatus(Status.IN_PROCESS); donation.setStatus(Status.IN_PROCESS);
donationService.addDonation(campaignId, donation); 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();
}
}
} }
...@@ -8,6 +8,7 @@ package de.dpunkt.myaktion.services; ...@@ -8,6 +8,7 @@ package de.dpunkt.myaktion.services;
import java.util.List; import java.util.List;
import de.dpunkt.myaktion.model.Donation; import de.dpunkt.myaktion.model.Donation;
import de.dpunkt.myaktion.services.exceptions.ObjectNotFoundException;
/** /**
* @author Julian * @author Julian
...@@ -20,6 +21,8 @@ public interface DonationService { ...@@ -20,6 +21,8 @@ public interface DonationService {
void addDonation(Long campaignId, Donation donation); void addDonation(Long campaignId, Donation donation);
void transferDonations(); void transferDonations();
List<Donation> getDonationListPublic(Long campaignId) throws ObjectNotFoundException;
//---------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------
} }
\ No newline at end of file
...@@ -6,8 +6,10 @@ ...@@ -6,8 +6,10 @@
package de.dpunkt.myaktion.services; package de.dpunkt.myaktion.services;
import java.util.List; import java.util.List;
import java.util.function.Function;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import javax.annotation.security.PermitAll; import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
...@@ -19,6 +21,7 @@ import javax.persistence.TypedQuery; ...@@ -19,6 +21,7 @@ import javax.persistence.TypedQuery;
import de.dpunkt.myaktion.model.Campaign; import de.dpunkt.myaktion.model.Campaign;
import de.dpunkt.myaktion.model.Donation; import de.dpunkt.myaktion.model.Donation;
import de.dpunkt.myaktion.model.Donation.Status; import de.dpunkt.myaktion.model.Donation.Status;
import de.dpunkt.myaktion.services.exceptions.ObjectNotFoundException;
import de.dpunkt.myaktion.util.Log.TecLog; import de.dpunkt.myaktion.util.Log.TecLog;
/** /**
...@@ -61,16 +64,36 @@ public class DonationServiceBean implements DonationService { ...@@ -61,16 +64,36 @@ public class DonationServiceBean implements DonationService {
@PermitAll @PermitAll
public void transferDonations() { public void transferDonations() {
logger.log(Level.INFO, "log.transferDonation.start"); logger.log(Level.INFO, "log.transferDonation.start");
TypedQuery<Donation> query = TypedQuery<Donation> query =
entityManager.createNamedQuery(Donation.findByStatus, Donation.class); entityManager.createNamedQuery(Donation.findByStatus, Donation.class);
query.setParameter("status", Status.IN_PROCESS); query.setParameter("status", Status.IN_PROCESS);
List<Donation> donations = query.getResultList(); List<Donation> donations = query.getResultList();
donations.forEach(donation -> donation.setStatus(Status.TRANSFERRED)); donations.forEach(donation -> donation.setStatus(Status.TRANSFERRED));
logger.log(Level.INFO, "log.transferDonation.done", new Object[] { donations.size() }); 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());
}
//---------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------
} }
package de.dpunkt.myaktion.services.exceptions;
public class ObjectNotFoundException extends Exception {
private static final long serialVersionUID = 879959260339550219L;
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment