check whether a room is in an active course

This commit is contained in:
Rajpreet0 2026-02-08 13:47:50 +01:00
parent 45078216d3
commit fdc216d52b
3 changed files with 45 additions and 3 deletions

View file

@ -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("");

View file

@ -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 },
});

View file

@ -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");
}