Changes between Version 3 and Version 4 of DatabaseProgramming-AdvDb


Ignore:
Timestamp:
06/04/26 09:37:27 (12 days ago)
Author:
231175
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming-AdvDb

    v3 v4  
    1919        e_id bigint;
    2020    begin
     21        -- Validate rating first, before any DB work
     22        if new_rating < 1 or new_rating > 5 then
     23            raise exception 'Rating must be between 1 and 5, got %', new_rating
     24                using errcode = 'CHECK_VIOLATION';
     25        end if;
     26
     27
    2128        select e.id into e_id
    2229        from enrollment e
     
    2532        limit 1;
    2633
    27         if exists(select 1 from enrollment e join review rv on e.id = rv.enrollment_id where e.id = e_id) then
    28             return null; -- User has already written a review for this course version
    29         else
    30             insert into review (rating, comment, date, enrollment_id)
    31             values (write_review.new_rating, write_review.new_comment, now(), e_id)
    32             returning * into r;
    33             return r;
     34        -- Validate enrollment exists
     35        if e_id is null then
     36            raise exception 'No enrollment found for user % on course version %',
     37                user_id, course_version_id
     38                using errcode = 'NO_DATA_FOUND';
    3439        end if;
     40
     41        -- Validate there's no review for that enrollment
     42        if exists(select 1 from review rv where rv.enrollment_id = e_id) then
     43            raise exception 'Review already submitted for enrollment %', e_id
     44                using errcode = 'UNIQUE_VIOLATION';
     45        end if;
     46
     47
     48        insert into review (rating, comment, date, enrollment_id)
     49        values (new_rating, new_comment, now(), e_id)
     50        returning * into r;
     51
     52        return r;
    3553    end;
    3654$$ language plpgsql;