From 5d5a9c2bd5452cdf1944e0b0b75d0eb32dd930c7 Mon Sep 17 00:00:00 2001 From: Tilman Liero Date: Sun, 10 Jul 2016 21:13:42 +0200 Subject: [PATCH] logging of Transaction CRUD operations --- .../controller/TransactionController.java | 33 ------------------- .../transactions/domain/Transaction.java | 27 +++++++++++++++ .../transactions/domain/Withdrawal.java | 1 - .../SpringDataRestEventHandler.java | 19 ++++++++++- .../repository/TransactionRepository.java | 4 +-- 5 files changed, 47 insertions(+), 37 deletions(-) delete mode 100644 src/main/java/de/tilman/transactions/controller/TransactionController.java diff --git a/src/main/java/de/tilman/transactions/controller/TransactionController.java b/src/main/java/de/tilman/transactions/controller/TransactionController.java deleted file mode 100644 index 8f905f2..0000000 --- a/src/main/java/de/tilman/transactions/controller/TransactionController.java +++ /dev/null @@ -1,33 +0,0 @@ -package de.tilman.transactions.controller; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.rest.webmvc.RepositoryRestController; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; - -import de.tilman.transactions.domain.Transaction; -import de.tilman.transactions.repository.TransactionRepository; - -//@RepositoryRestController -public class TransactionController { - -// private final TransactionRepository repository; -// -// @Autowired -// public TransactionController(TransactionRepository repository) { -// this.repository = repository; -// } -// -// @RequestMapping(method = RequestMethod.DELETE, value = "/transactions/{id}") -// public @ResponseBody Iterable deleteTransaction() { -// Iterable producers = repository.findAll(); -// -// // -// // do some intermediate processing, logging, etc. with the producers -// // -// -// return producers; // or some filtered/altered/mapped version -// } - -} diff --git a/src/main/java/de/tilman/transactions/domain/Transaction.java b/src/main/java/de/tilman/transactions/domain/Transaction.java index f4c5fff..524bcf9 100644 --- a/src/main/java/de/tilman/transactions/domain/Transaction.java +++ b/src/main/java/de/tilman/transactions/domain/Transaction.java @@ -1,6 +1,7 @@ package de.tilman.transactions.domain; import java.math.BigDecimal; +import java.text.DecimalFormat; import java.util.Date; import javax.persistence.Entity; @@ -10,6 +11,14 @@ import javax.persistence.ManyToOne; @Entity public class Transaction { + + private static DecimalFormat df = new DecimalFormat(); + static { + df.getDecimalFormatSymbols().setDecimalSeparator('.'); + df.setMaximumFractionDigits(2); + df.setMinimumFractionDigits(0); + df.setGroupingUsed(false); + } @Id @GeneratedValue @@ -91,5 +100,23 @@ public class Transaction { public void setCategory(Category category) { this.category = category; } + + @Override + public String toString() { + String s = "{ id: " + id + ", amount: " + df.format(amount) + ", date: " + date + ", lastChange: " + lastChange + ", description: \"" + description + "\""; + + if (creditor != null) + s += ", creditor: \"" + creditor.getName() + "\""; + else + s += ", creditor: null"; + + s += ", account: " + account.getId(); + s += ", category: \"" + category.getName() + "\""; + s += "}"; + + return s; + } + + } diff --git a/src/main/java/de/tilman/transactions/domain/Withdrawal.java b/src/main/java/de/tilman/transactions/domain/Withdrawal.java index 2dbc7fb..b59d24a 100644 --- a/src/main/java/de/tilman/transactions/domain/Withdrawal.java +++ b/src/main/java/de/tilman/transactions/domain/Withdrawal.java @@ -3,7 +3,6 @@ package de.tilman.transactions.domain; import java.math.BigDecimal; import java.util.Date; -import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; diff --git a/src/main/java/de/tilman/transactions/repository/SpringDataRestEventHandler.java b/src/main/java/de/tilman/transactions/repository/SpringDataRestEventHandler.java index 17a3f4a..066686b 100644 --- a/src/main/java/de/tilman/transactions/repository/SpringDataRestEventHandler.java +++ b/src/main/java/de/tilman/transactions/repository/SpringDataRestEventHandler.java @@ -4,6 +4,9 @@ import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.rest.core.annotation.HandleAfterCreate; +import org.springframework.data.rest.core.annotation.HandleAfterDelete; +import org.springframework.data.rest.core.annotation.HandleAfterSave; import org.springframework.data.rest.core.annotation.HandleBeforeCreate; import org.springframework.data.rest.core.annotation.HandleBeforeSave; import org.springframework.data.rest.core.annotation.RepositoryEventHandler; @@ -22,7 +25,21 @@ public class SpringDataRestEventHandler { @HandleBeforeSave public void applyUserInformationUsingSecurityContext(Transaction transaction) { Date timestamp = new Date(); - log.info("Setting date '" + timestamp + "' on transaction: " + transaction.getId() + "(" + transaction.getDescription() + ")"); transaction.setLastChange(timestamp); } + + @HandleAfterCreate + public void logCreation(Transaction transaction) { + log.info("Created transaction: " + transaction.toString()); + } + + @HandleAfterSave + public void logUpdate(Transaction transaction) { + log.info("Updated transaction: " + transaction.toString()); + } + + @HandleAfterDelete + public void logDeletion(Transaction transaction) { + log.info("Deleted transaction: " + transaction.toString()); + } } \ No newline at end of file diff --git a/src/main/java/de/tilman/transactions/repository/TransactionRepository.java b/src/main/java/de/tilman/transactions/repository/TransactionRepository.java index e72224b..2390a30 100644 --- a/src/main/java/de/tilman/transactions/repository/TransactionRepository.java +++ b/src/main/java/de/tilman/transactions/repository/TransactionRepository.java @@ -15,8 +15,8 @@ import de.tilman.transactions.domain.Transaction; @RepositoryRestResource(excerptProjection = TransactionInlineProjection.class) public interface TransactionRepository extends PagingAndSortingRepository { -// @RestResource(exported = false) -// Page findAll(Pageable pageable); + @RestResource(exported = false) + Page findAll(Pageable pageable); // @PreAuthorize("hasRole('ROLE_ADMIN')") // @Override