From 1359721d67b9e4c61599645c394f895718026369 Mon Sep 17 00:00:00 2001
From: philipp lang <philipp@aweos.de>
Date: Wed, 8 Feb 2023 01:39:32 +0100
Subject: [PATCH] Add ConflictException

---
 src/Api.php                          |  9 ++++++---
 src/Exceptions/ConflictException.php |  7 +++++++
 src/Exceptions/HttpException.php     | 10 ++--------
 3 files changed, 15 insertions(+), 11 deletions(-)
 create mode 100644 src/Exceptions/ConflictException.php

diff --git a/src/Api.php b/src/Api.php
index 2e244c5..955d870 100644
--- a/src/Api.php
+++ b/src/Api.php
@@ -16,6 +16,7 @@ use Zoomyboy\LaravelNami\Data\Member;
 use Zoomyboy\LaravelNami\Data\MemberEntry;
 use Zoomyboy\LaravelNami\Data\Membership;
 use Zoomyboy\LaravelNami\Data\MembershipEntry;
+use Zoomyboy\LaravelNami\Exceptions\ConflictException;
 use Zoomyboy\LaravelNami\Exceptions\HttpException;
 use Zoomyboy\LaravelNami\Exceptions\MemberDataCorruptedException;
 use Zoomyboy\LaravelNami\Exceptions\NoJsonReceivedException;
@@ -126,9 +127,7 @@ class Api
             $payload['kontoverbindung'] = json_encode(data_get($payload, 'kontoverbindung', []));
             $url = $this->url.'/ica/rest/nami/mitglied/filtered-for-navigation/gruppierung/gruppierung/'.$member->groupId.'/'.$member->id;
             $response = $this->http()->put($url, $payload);
-            if (true !== data_get($response->json(), 'success')) {
-                $this->exception(NotSuccessfulException::class, 'Update failed', $url, $response->json(), $member->toNami());
-            }
+            $this->assertOk($response, $url, 'Update failed');
 
             return $response->json()['data']['id'];
         } else {
@@ -480,6 +479,10 @@ class Api
             $this->exception(RightException::class, $error, $url, $response->json());
         }
 
+        if (data_get($response, 'message') && Str::contains($response['message'], 'Der Datensatz wurde zwischenzeitlich verändert')) {
+            $this->exception(ConflictException::class, $error, $url, $response->json());
+        }
+
         if (false === $response['success']) {
             $this->exception(NotSuccessfulException::class, $error, $url, $response->json());
         }
diff --git a/src/Exceptions/ConflictException.php b/src/Exceptions/ConflictException.php
new file mode 100644
index 0000000..89397df
--- /dev/null
+++ b/src/Exceptions/ConflictException.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Zoomyboy\LaravelNami\Exceptions;
+
+class ConflictException extends HttpException
+{
+}
diff --git a/src/Exceptions/HttpException.php b/src/Exceptions/HttpException.php
index 91c9432..aaac47f 100644
--- a/src/Exceptions/HttpException.php
+++ b/src/Exceptions/HttpException.php
@@ -4,7 +4,6 @@ namespace Zoomyboy\LaravelNami\Exceptions;
 
 use Exception;
 use Illuminate\Console\Command;
-use Illuminate\Support\Str;
 use Illuminate\Validation\ValidationException;
 
 abstract class HttpException extends Exception
@@ -54,9 +53,9 @@ abstract class HttpException extends Exception
         return $this;
     }
 
-    public function isConflict(): bool
+    public function render(): void
     {
-        return Str::contains(data_get($this->response, 'message'), 'Der Datensatz wurde zwischenzeitlich verändert');
+        throw ValidationException::withMessages(['id' => 'Unbekannter Fehler']);
     }
 
     public function report(): void
@@ -68,11 +67,6 @@ abstract class HttpException extends Exception
         ]);
     }
 
-    public function render(): void
-    {
-        throw ValidationException::withMessages(['id' => 'Unbekannter Fehler']);
-    }
-
     public function outputToConsole(Command $command): void
     {
         $command->info('Request URL: '.$this->requestUrl);