API scheiß

This commit is contained in:
2026-04-09 13:56:39 +02:00
parent 8519e7da27
commit 40ee18fc01
8 changed files with 15 additions and 12 deletions

1
.env.docker Normal file
View File

@@ -0,0 +1 @@
VITE_API_TARGET=http://spring-backend:5173

View File

@@ -7,6 +7,8 @@ RUN npm install
COPY . . COPY . .
ENV VITE_API_TARGET=http://spring-backend:5173
EXPOSE 8080 EXPOSE 8080
CMD ["npm", "run", "dev", "--", "--host", "--port", "8080"] CMD ["npm", "run", "dev", "--", "--host", "--port", "8080"]

View File

@@ -64,7 +64,7 @@ export default function CreateNewsPage() {
formData.append('data', new Blob([JSON.stringify(jsonPayload)], { type: 'application/json' })); formData.append('data', new Blob([JSON.stringify(jsonPayload)], { type: 'application/json' }));
files.forEach((file) => formData.append('images', file)); files.forEach((file) => formData.append('images', file));
await axiosInstance.post('/api/news', formData, { await axiosInstance.post('/news', formData, {
headers: { 'Content-Type': 'multipart/form-data' }, headers: { 'Content-Type': 'multipart/form-data' },
}); });
navigate('/posts'); navigate('/posts');

View File

@@ -44,7 +44,7 @@ export default function EditOrganizationPage() {
useEffect(() => { useEffect(() => {
const fetchData = async () => { const fetchData = async () => {
try { try {
const response = await axiosInstance.get('/api/organizations/' + id); const response = await axiosInstance.get('/organizations/' + id);
const data = response.data; const data = response.data;
setData(data); setData(data);

View File

@@ -29,7 +29,7 @@ export default function OrganizationPage() {
const loadOrganizations = async () => { const loadOrganizations = async () => {
try { try {
const { data } = await axiosInstance.get('/api/organization'); const { data } = await axiosInstance.get('/organization');
setRows(data); setRows(data);
} catch { } catch {
setError('Fehler beim Laden der Organisationen'); setError('Fehler beim Laden der Organisationen');
@@ -57,7 +57,7 @@ export default function OrganizationPage() {
ownerEmail: createForm.email ownerEmail: createForm.email
}; };
await axiosInstance.post('/api/organization', jsonPayload); await axiosInstance.post('/organization', jsonPayload);
await loadOrganizations(); // Liste neu laden await loadOrganizations(); // Liste neu laden
handleCreateClose(); handleCreateClose();
@@ -79,7 +79,7 @@ export default function OrganizationPage() {
if (!window.confirm('Organisation wirklich löschen?')) return; if (!window.confirm('Organisation wirklich löschen?')) return;
try { try {
await axiosInstance.delete(`/api/organization/${id}`); await axiosInstance.delete(`/organization/${id}`);
setRows((prev) => prev.filter((r) => r.id !== id)); setRows((prev) => prev.filter((r) => r.id !== id));
} catch { } catch {
alert('Löschen fehlgeschlagen'); alert('Löschen fehlgeschlagen');

View File

@@ -18,7 +18,7 @@ export default function PostsPage() {
const navigate = useNavigate(); const navigate = useNavigate();
useEffect(() => { useEffect(() => {
axiosInstance.get('/api/news') axiosInstance.get('/news')
.then(({ data }) => setRows(data)) .then(({ data }) => setRows(data))
.catch(() => setError('Fehler beim Laden der News')) .catch(() => setError('Fehler beim Laden der News'))
.finally(() => setLoading(false)); .finally(() => setLoading(false));
@@ -27,7 +27,7 @@ export default function PostsPage() {
const handleDelete = async (id) => { const handleDelete = async (id) => {
if (!window.confirm('News wirklich löschen?')) return; if (!window.confirm('News wirklich löschen?')) return;
try { try {
await axiosInstance.delete(`/api/news/${id}`); await axiosInstance.delete(`/news/${id}`);
setRows((prev) => prev.filter((r) => r.id !== id)); setRows((prev) => prev.filter((r) => r.id !== id));
} catch { } catch {
alert('Löschen fehlgeschlagen'); alert('Löschen fehlgeschlagen');

View File

@@ -18,7 +18,7 @@ export default function PushPage() {
setLoading(true); setLoading(true);
setResult(null); setResult(null);
try { try {
await axiosInstance.post('/api/push', { title, body, target }); await axiosInstance.post('/push', { title, body, target });
setResult({ type: 'success', msg: 'Notification erfolgreich gesendet!' }); setResult({ type: 'success', msg: 'Notification erfolgreich gesendet!' });
setTitle(''); setTitle('');
setBody(''); setBody('');

View File

@@ -28,7 +28,7 @@ export default function UsersPage() {
const [deleting, setDeleting] = useState(false); const [deleting, setDeleting] = useState(false);
useEffect(() => { useEffect(() => {
axiosInstance.get('/api/users') axiosInstance.get('/users')
.then(({ data }) => setRows(data)) .then(({ data }) => setRows(data))
.catch(() => setError('Fehler beim Laden der Nutzer')) .catch(() => setError('Fehler beim Laden der Nutzer'))
.finally(() => setLoading(false)); .finally(() => setLoading(false));
@@ -58,7 +58,7 @@ export default function UsersPage() {
setSaving(true); setSaving(true);
setSaveError(''); setSaveError('');
try { try {
const { data } = await axiosInstance.put(`/api/users/${editUser.id}`, editForm); const { data } = await axiosInstance.put(`/users/${editUser.id}`, editForm);
setRows((prev) => prev.map((r) => r.id === editUser.id ? { ...r, ...data } : r)); setRows((prev) => prev.map((r) => r.id === editUser.id ? { ...r, ...data } : r));
setSnackbar(`Änderungen an ${editUser.nickname} erfolgreich gespeichert.`); setSnackbar(`Änderungen an ${editUser.nickname} erfolgreich gespeichert.`);
handleEditClose(); handleEditClose();
@@ -72,7 +72,7 @@ export default function UsersPage() {
const handlePasswordReset = async (user) => { const handlePasswordReset = async (user) => {
setResetting(user.id); setResetting(user.id);
try { try {
await axiosInstance.post(`/api/users/${user.id}/reset-password`); await axiosInstance.post(`/users/${user.id}/reset-password`);
setSnackbar(`Passwort für ${user.nickname} wurde zurückgesetzt — E-Mail wurde versendet.`); setSnackbar(`Passwort für ${user.nickname} wurde zurückgesetzt — E-Mail wurde versendet.`);
} catch (err) { } catch (err) {
setSnackbar(err.response?.data?.message ?? 'Zurücksetzen fehlgeschlagen'); setSnackbar(err.response?.data?.message ?? 'Zurücksetzen fehlgeschlagen');
@@ -84,7 +84,7 @@ export default function UsersPage() {
const handleDeleteConfirm = async () => { const handleDeleteConfirm = async () => {
setDeleting(true); setDeleting(true);
try { try {
await axiosInstance.delete(`/api/users/${deleteUser.id}`); await axiosInstance.delete(`/users/${deleteUser.id}`);
setRows((prev) => prev.filter((r) => r.id !== deleteUser.id)); setRows((prev) => prev.filter((r) => r.id !== deleteUser.id));
setSnackbar(`Nutzer ${deleteUser.nickname} wurde gelöscht.`); setSnackbar(`Nutzer ${deleteUser.nickname} wurde gelöscht.`);
setDeleteUser(null); setDeleteUser(null);