| 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'; |
| | 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; |