mirror of
https://github.com/Since-3/Kuma.git
synced 2026-10-12 20:41:16 +00:00
check whether a room is in an active course
This commit is contained in:
parent
45078216d3
commit
fdc216d52b
3 changed files with 45 additions and 3 deletions
|
|
@ -4,7 +4,7 @@ import { getMyCourses, deleteCourse } from "../../actions/course-actions";
|
|||
import { getAllRooms } from "@/src/modules/rooms/actions/room-actions";
|
||||
import { Button } from "@/src/components/ui/button";
|
||||
import { toast } from "sonner";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useRouter, useSearchParams } from "next/navigation";
|
||||
import CourseListItem from "../components/CourseListItem";
|
||||
import { Filter, ChevronUp, ChevronDown } from "lucide-react";
|
||||
import DeleteDialog from "@/src/components/layout/DeleteDialog";
|
||||
|
|
@ -36,12 +36,13 @@ type Course = {
|
|||
|
||||
const CourseListView = () => {
|
||||
const router = useRouter();
|
||||
const searchParams = useSearchParams();
|
||||
const [courses, setCourses] = useState<Course[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [filterStatus, setFilterStatus] = useState<"all" | "draft" | "published">("all");
|
||||
const [filterSport, setFilterSport] = useState<string>("all");
|
||||
const [filterTrainer, setFilterTrainer] = useState<string>("all");
|
||||
const [filterRoom, setFilterRoom] = useState<string>("all");
|
||||
const [filterRoom, setFilterRoom] = useState<string>(searchParams.get("room") ?? "all");
|
||||
const [dateFrom, setDateFrom] = useState("");
|
||||
const [dateTo, setDateTo] = useState("");
|
||||
const [timeFrom, setTimeFrom] = useState("");
|
||||
|
|
|
|||
|
|
@ -352,7 +352,30 @@ export async function deleteRoom(roomId: string) {
|
|||
};
|
||||
}
|
||||
|
||||
// Schritt 6: Raum aus der Datenbank löschen
|
||||
// Schritt 6: Prüfen, ob der Raum noch in zukünftigen Kursen verwendet wird
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
|
||||
const futureCourses = await prisma.course.findMany({
|
||||
where: {
|
||||
room: roomId,
|
||||
date: { gte: today },
|
||||
createdBy: userData.id,
|
||||
},
|
||||
select: { id: true, name: true },
|
||||
});
|
||||
|
||||
if (futureCourses.length > 0) {
|
||||
const courseNames = futureCourses.map((c) => c.name).join(", ");
|
||||
return {
|
||||
success: false,
|
||||
error: `Raum kann nicht gelöscht werden, da er noch in ${futureCourses.length} zukünftigen Kursen verwendet wird: ${courseNames}`,
|
||||
hasActiveCourses: true,
|
||||
roomName: room.name,
|
||||
};
|
||||
}
|
||||
|
||||
// Schritt 7: Raum aus der Datenbank löschen
|
||||
await prisma.room.delete({
|
||||
where: { id: roomId },
|
||||
});
|
||||
|
|
|
|||
|
|
@ -65,6 +65,24 @@ const RoomsListView = ({ deleteMode }: RoomsListViewProps) => {
|
|||
setRooms((prev) => prev.filter((room) => room.id !== roomToDelete.id));
|
||||
setDeleteDialogOpen(false);
|
||||
setRoomToDelete(null);
|
||||
} else if (result.hasActiveCourses) {
|
||||
setDeleteDialogOpen(false);
|
||||
setRoomToDelete(null);
|
||||
toast.error(result.error, {
|
||||
duration: 8000,
|
||||
style: { maxWidth: "680px" },
|
||||
action: {
|
||||
label: "Kurse anzeigen",
|
||||
onClick: () => router.push(`/courses?room=${result.roomName}`),
|
||||
},
|
||||
actionButtonStyle: {
|
||||
backgroundColor: "#F4C00C",
|
||||
color: "#1E293B",
|
||||
fontWeight: "600",
|
||||
padding: "8px 14px",
|
||||
borderRadius: "6px",
|
||||
},
|
||||
});
|
||||
} else {
|
||||
toast.error(result.error || "Fehler beim Löschen des Raumes");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue