Refactor API routes and component logic: Remove unused event and user management routes, streamline feedback handling in components, and enhance state management with transitions for improved user experience. Update service layer methods for better organization and maintainability across the application.
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 2m38s

This commit is contained in:
Julien Froidefond
2025-12-12 16:28:07 +01:00
parent 494ac3f503
commit db01c25de7
26 changed files with 747 additions and 743 deletions

View File

@@ -1,7 +1,8 @@
"use client";
import { useState, useEffect } from "react";
import { useState, useEffect, useTransition } from "react";
import Avatar from "./Avatar";
import { updateUser, deleteUser } from "@/actions/admin/users";
interface User {
id: string;
@@ -35,6 +36,7 @@ export default function UserManagement() {
const [editingUser, setEditingUser] = useState<EditingUser | null>(null);
const [saving, setSaving] = useState(false);
const [deletingUserId, setDeletingUserId] = useState<string | null>(null);
const [, startTransition] = useTransition();
const [uploadingAvatar, setUploadingAvatar] = useState<string | null>(null);
useEffect(() => {
@@ -72,60 +74,55 @@ export default function UserManagement() {
if (!editingUser) return;
setSaving(true);
try {
const body: {
username?: string;
avatar?: string | null;
hpDelta?: number;
xpDelta?: number;
score?: number;
level?: number;
role?: string;
} = {};
startTransition(async () => {
try {
const body: {
username?: string;
avatar?: string | null;
hpDelta?: number;
xpDelta?: number;
score?: number;
level?: number;
role?: string;
} = {};
if (editingUser.username !== null) {
body.username = editingUser.username;
}
if (editingUser.avatar !== undefined) {
body.avatar = editingUser.avatar;
}
if (editingUser.hpDelta !== 0) {
body.hpDelta = editingUser.hpDelta;
}
if (editingUser.xpDelta !== 0) {
body.xpDelta = editingUser.xpDelta;
}
if (editingUser.score !== null) {
body.score = editingUser.score;
}
if (editingUser.level !== null) {
body.level = editingUser.level;
}
if (editingUser.role !== null) {
body.role = editingUser.role;
}
if (editingUser.username !== null) {
body.username = editingUser.username;
}
if (editingUser.avatar !== undefined) {
body.avatar = editingUser.avatar;
}
if (editingUser.hpDelta !== 0) {
body.hpDelta = editingUser.hpDelta;
}
if (editingUser.xpDelta !== 0) {
body.xpDelta = editingUser.xpDelta;
}
if (editingUser.score !== null) {
body.score = editingUser.score;
}
if (editingUser.level !== null) {
body.level = editingUser.level;
}
if (editingUser.role !== null) {
body.role = editingUser.role;
}
const response = await fetch(`/api/admin/users/${editingUser.userId}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
const result = await updateUser(editingUser.userId, body);
if (response.ok) {
await fetchUsers();
setEditingUser(null);
} else {
const error = await response.json();
alert(error.error || "Erreur lors de la mise à jour");
if (result.success) {
await fetchUsers();
setEditingUser(null);
} else {
alert(result.error || "Erreur lors de la mise à jour");
}
} catch (error) {
console.error("Error updating user:", error);
alert("Erreur lors de la mise à jour");
} finally {
setSaving(false);
}
} catch (error) {
console.error("Error updating user:", error);
alert("Erreur lors de la mise à jour");
} finally {
setSaving(false);
}
});
};
const handleCancel = () => {
@@ -143,15 +140,12 @@ export default function UserManagement() {
setDeletingUserId(userId);
try {
const response = await fetch(`/api/admin/users/${userId}`, {
method: "DELETE",
});
const result = await deleteUser(userId);
if (response.ok) {
if (result.success) {
await fetchUsers();
} else {
const error = await response.json();
alert(error.error || "Erreur lors de la suppression");
alert(result.error || "Erreur lors de la suppression");
}
} catch (error) {
console.error("Error deleting user:", error);