37 lines
1.2 KiB
PL/PgSQL
37 lines
1.2 KiB
PL/PgSQL
-- =====================================================
|
|
-- Instructor Availability Check
|
|
--
|
|
-- Returns TRUE if the instructor has no scheduling
|
|
-- conflicts for the requested date/time window.
|
|
-- Optionally excludes a specific session (for edits).
|
|
-- =====================================================
|
|
|
|
CREATE OR REPLACE FUNCTION public.check_instructor_availability(
|
|
p_instructor_id uuid,
|
|
p_session_date date,
|
|
p_start_time time,
|
|
p_end_time time,
|
|
p_exclude_session_id uuid DEFAULT NULL
|
|
)
|
|
RETURNS boolean
|
|
LANGUAGE sql
|
|
STABLE
|
|
SECURITY DEFINER
|
|
SET search_path = ''
|
|
AS $$
|
|
SELECT NOT EXISTS (
|
|
SELECT 1
|
|
FROM public.course_sessions cs
|
|
JOIN public.courses c ON c.id = cs.course_id
|
|
WHERE c.instructor_id = p_instructor_id
|
|
AND cs.session_date = p_session_date
|
|
AND cs.start_time < p_end_time
|
|
AND cs.end_time > p_start_time
|
|
AND (p_exclude_session_id IS NULL OR cs.id != p_exclude_session_id)
|
|
AND cs.is_cancelled = false
|
|
);
|
|
$$;
|
|
|
|
GRANT EXECUTE ON FUNCTION public.check_instructor_availability(uuid, date, time, time, uuid) TO authenticated;
|
|
GRANT EXECUTE ON FUNCTION public.check_instructor_availability(uuid, date, time, time, uuid) TO service_role;
|