diff --git a/CHANGELOG.md b/CHANGELOG.md index f3954dc90..67dd78e3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,31 @@ Alle bedeutenden Änderungen an diesem Projekt werden in dieser Datei dokumentie --- +## [1.1.161] – 2025-05-23 + +### ♻️ Refactor + +- Löschfunktion für POI (`handleDeletePoi`) in `PoiUpdateModal.js` refaktoriert +- Direkten `fetch(...)`-Aufruf entfernt und ersetzt durch: + - Service: `deletePoiService.js` + - Redux Thunk: `deletePoiThunk.js` + +### 🧠 Architektur + +- Für serverseitige Befehle (DELETE) wird kein Redux Slice benötigt +- Redux-Thunk ohne eigenen Status-Slice verwendet – schlank und wartbar + +### ✅ Clean + +- Einheitliche Struktur beibehalten: `Service → Thunk → Dispatch` +- Wiederverwendbarkeit verbessert (z. B. für spätere Delete-Buttons) + +### 🔧 Version + +- 📦 Version erhöht auf **1.1.161** + +--- + ## [1.1.160] – 2025-05-23 ### ♻️ Refactor diff --git a/components/pois/PoiUpdateModal.js b/components/pois/PoiUpdateModal.js index 6ad9316f1..90fa5d871 100644 --- a/components/pois/PoiUpdateModal.js +++ b/components/pois/PoiUpdateModal.js @@ -6,6 +6,7 @@ import { useSelector, useDispatch } from "react-redux"; import { selectMapLayersState } from "../../redux/slices/mapLayersSlice"; import { fetchPoiTypThunk } from "../../redux/thunks/database/fetchPoiTypThunk"; import { selectPoiTypData, selectPoiTypStatus } from "../../redux/slices/database/poiTypSlice"; +import { deletePoiThunk } from "../../redux/thunks/database/deletePoiThunk"; const PoiUpdateModal = ({ onClose, poiData, onSubmit }) => { const dispatch = useDispatch(); @@ -119,15 +120,9 @@ const PoiUpdateModal = ({ onClose, poiData, onSubmit }) => { const handleDeletePoi = async () => { if (confirm("Sind Sie sicher, dass Sie diesen POI löschen möchten?")) { try { - const response = await fetch(`/api/talas_v5_DB/pois/deletePoi?id=${poiId}`, { - method: "DELETE", - }); - if (response.ok) { - onClose(); - window.location.reload(); // Aktualisiert die Seite nach dem Löschen - } else { - throw new Error("Fehler beim Löschen des POI."); - } + await dispatch(deletePoiThunk(poiId)).unwrap(); + onClose(); + window.location.reload(); } catch (error) { console.error("Fehler beim Löschen des POI:", error); alert("Fehler beim Löschen des POI."); diff --git a/config/appVersion.js b/config/appVersion.js index a1dad4d6d..3158b8dd6 100644 --- a/config/appVersion.js +++ b/config/appVersion.js @@ -1,2 +1,2 @@ // /config/appVersion -export const APP_VERSION = "1.1.161"; +export const APP_VERSION = "1.1.162"; diff --git a/redux/thunks/database/deletePoiThunk.js b/redux/thunks/database/deletePoiThunk.js new file mode 100644 index 000000000..f651f1db4 --- /dev/null +++ b/redux/thunks/database/deletePoiThunk.js @@ -0,0 +1,13 @@ +// /redux/thunks/database/deletePoiThunk.js + +import { createAsyncThunk } from "@reduxjs/toolkit"; +import { deletePoiService } from "../../../services/database/deletePoiService"; + +export const deletePoiThunk = createAsyncThunk("poi/delete", async (id, thunkAPI) => { + try { + await deletePoiService(id); + return id; // Falls du später ID-basiertes Entfernen im Store brauchst + } catch (error) { + return thunkAPI.rejectWithValue(error.message); + } +}); diff --git a/services/database/deletePoiService.js b/services/database/deletePoiService.js new file mode 100644 index 000000000..e61e60859 --- /dev/null +++ b/services/database/deletePoiService.js @@ -0,0 +1,11 @@ +// /services/database/deletePoiService.js + +export const deletePoiService = async (id) => { + const response = await fetch(`/api/talas_v5_DB/pois/deletePoi?id=${id}`, { + method: "DELETE", + }); + + if (!response.ok) { + throw new Error("Fehler beim Löschen des POI."); + } +};