| 126 | | inserted AS ( |
| 127 | | INSERT INTO reading_list_items (list_id, story_id, added_at) |
| 128 | | SELECT ul.list_id, ps.story_id, CURRENT_TIMESTAMP |
| 129 | | FROM user_list ul |
| 130 | | CROSS JOIN published_story ps |
| 131 | | WHERE NOT EXISTS (SELECT 1 FROM already_added) |
| 132 | | RETURNING list_id, story_id, added_at |
| | 126 | list_items AS ( |
| | 127 | SELECT |
| | 128 | rli.list_id, |
| | 129 | COUNT(rli.story_id) AS total_items, |
| | 130 | MAX(rli.added_at) AS last_added_at |
| | 131 | FROM reading_list_items rli |
| | 132 | WHERE rli.list_id = 1 |
| | 133 | GROUP BY rli.list_id |
| 142 | | WHEN ins.story_id IS NOT NULL THEN 'Story successfully added' |
| 143 | | WHEN EXISTS (SELECT 1 FROM already_added) THEN 'Story already in list' |
| 144 | | ELSE 'Failed: story not published or list not found' |
| 145 | | END AS result_message |
| 146 | | FROM reading_list rl |
| 147 | | JOIN users u ON rl.user_id = u.user_id |
| 148 | | LEFT JOIN reading_list_items rli ON rl.list_id = rli.list_id |
| 149 | | LEFT JOIN inserted ins ON ins.list_id = rl.list_id |
| 150 | | WHERE rl.list_id = 1 |
| 151 | | GROUP BY rl.list_id, rl.list_name, rl.is_public, u.username, ins.story_id; |
| | 145 | WHEN NOT EXISTS (SELECT 1 FROM published_story) THEN 'Failed: story not published or not found' |
| | 146 | WHEN NOT EXISTS (SELECT 1 FROM user_list) THEN 'Failed: reading list not found or not owned by you' |
| | 147 | WHEN EXISTS (SELECT 1 FROM already_added) THEN 'Story already in list' |
| | 148 | ELSE 'Ready to add story' |
| | 149 | END AS status |
| | 150 | FROM reading_list rl |
| | 151 | JOIN users u ON rl.user_id = u.user_id |
| | 152 | LEFT JOIN published_story ps ON ps.story_id = 1 |
| | 153 | LEFT JOIN list_items li ON li.list_id = rl.list_id |
| | 154 | WHERE rl.list_id = 1; |
| 205 | | WHEN ins.story_id IS NOT NULL → 'Story successfully added' |
| 206 | | WHEN AlreadyAdded ≠ ∅ → 'Story already in list' |
| 207 | | ELSE 'Failed: story not published or list not found' |
| 208 | | END → result_message |
| 209 | | ( |
| 210 | | ( |
| 211 | | reading_list rl |
| 212 | | ⨝ (rl.user_id = u.user_id) users u |
| 213 | | ) |
| 214 | | ⨝ (rl.list_id = uc.list_id) UpdatedCount uc |
| 215 | | ⟕ (rl.list_id = ins.list_id) ToInsert ins |
| 216 | | ) |
| 217 | | }}} |
| | 209 | WHEN PublishedStory = ∅ → 'Failed: story not published or not found' |
| | 210 | WHEN UserList = ∅ → 'Failed: reading list not found or not owned by you' |
| | 211 | WHEN AlreadyAdded ≠ ∅ → 'Story already in list' |
| | 212 | ELSE → 'Ready to add story' |
| | 213 | END → status |
| | 214 | ( |
| | 215 | ( |
| | 216 | ( |
| | 217 | σ rl.list_id = 1 (reading_list rl) |
| | 218 | ⨝ (rl.user_id = u.user_id) users u |
| | 219 | ) |
| | 220 | ⟕ (ps.story_id = 1) PublishedStory ps |
| | 221 | ) |
| | 222 | ⟕ (li.list_id = rl.list_id) ListItems li |
| | 223 | ) |
| | 224 | }}} |