From 470aa26ff6773bd394ee3e6c2a41ed39d22450dd Mon Sep 17 00:00:00 2001
From: Martin Schmollinger <martin.schmollinger@reutlingen-university.de>
Date: Mon, 19 May 2025 23:04:47 +0200
Subject: [PATCH] Change state of donation after successful bank transaction in
 myaktion service.

---
 src/myaktion/monitor.go          | 10 +++++++++-
 src/myaktion/service/donation.go | 20 ++++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/myaktion/monitor.go b/src/myaktion/monitor.go
index 48db3ac..ecb0d9b 100644
--- a/src/myaktion/monitor.go
+++ b/src/myaktion/monitor.go
@@ -7,6 +7,7 @@ import (
 	log "github.com/sirupsen/logrus"
 	"gitlab.reutlingen-university.de/go-exercises/myaktion-go-ss25/src/myaktion/client"
 	"gitlab.reutlingen-university.de/go-exercises/myaktion-go-ss25/src/myaktion/client/banktransfer"
+	"gitlab.reutlingen-university.de/go-exercises/myaktion-go-ss25/src/myaktion/service"
 )
 
 func monitortransactions() {
@@ -42,7 +43,14 @@ func connectandmonitor() {
 			continue
 		}
 		entry := log.WithField("transaction", transaction)
-		entry.Info("Received transaction. Sending processing response")
+		entry.Info("Received transaction")
+		err = service.MarkDonation(uint(transaction.DonationId))
+		if err != nil {
+			entry.WithError(err).Error("error changing donation status")
+			continue
+		}
+		entry.Info("Sending processing response")
+
 		err = watcher.Send(&banktransfer.ProcessingResponse{Id: transaction.Id})
 		if err != nil {
 			entry.WithError(err).Error("error sending processing response")
diff --git a/src/myaktion/service/donation.go b/src/myaktion/service/donation.go
index bc2f87e..9a384fd 100644
--- a/src/myaktion/service/donation.go
+++ b/src/myaktion/service/donation.go
@@ -72,3 +72,23 @@ func deleteDonation(donation *model.Donation) error {
 	entry.Info("Successfully deleted campaign.")
 	return nil
 }
+
+func MarkDonation(id uint) error {
+	entry := log.WithField("donationId", id)
+	donation := new(model.Donation)
+	result := db.DB.First(donation, id)
+	if result.Error != nil {
+		entry.WithError(result.Error).Error("Can't retrieve donation")
+		return result.Error
+	}
+	entry = entry.WithField("donation", donation)
+	entry.Trace("Retrieved donation")
+	donation.Status = model.TRANSFERRED
+	result = db.DB.Save(donation)
+	if result.Error != nil {
+		entry.WithError(result.Error).Error("Can't update donation")
+		return result.Error
+	}
+	entry.Info("Successfully updated status of donation.")
+	return nil
+}
-- 
GitLab