|
| 1 | +with |
| 2 | + projectMembersJson := to_json('[ |
| 3 | + { |
| 4 | + "project": "Misty Mountains", |
| 5 | + "members": ["Bilbo", "Frodo"] |
| 6 | + }, |
| 7 | + { |
| 8 | + "project": "Arnor Lake", |
| 9 | + "members": ["Bilbo", "Gandalf"] |
| 10 | + }, |
| 11 | + { |
| 12 | + "project": "Lothlorien", |
| 13 | + "members": ["Bilbo"] |
| 14 | + }, |
| 15 | + { |
| 16 | + "project": "Emyn Muil", |
| 17 | + "members": ["Bilbo", "Frodo", "Samwise", "Meriadoc", "Peregrin"] |
| 18 | + }, |
| 19 | + { |
| 20 | + "project": "South Downs", |
| 21 | + "members": ["Bilbo", "Peregrin"] |
| 22 | + } |
| 23 | + ]'), |
| 24 | + newMembers := ( |
| 25 | + for projectMembers in json_array_unpack(projectMembersJson) |
| 26 | + union ( |
| 27 | + for member in json_array_unpack(projectMembers['members']) |
| 28 | + union ( |
| 29 | + with |
| 30 | + existingUser := assert_single((select User filter .realFirstName = <str>member)), |
| 31 | + existingProject := assert_single((select TranslationProject filter .name = <str>projectMembers['project'])), |
| 32 | + select ( |
| 33 | + (select Project::Member filter .user = existingUser and .project = existingProject) ?? |
| 34 | + (insert Project::Member { |
| 35 | + user := existingUser, |
| 36 | + roles := existingUser.roles, |
| 37 | + project := existingProject, |
| 38 | + projectContext := existingProject.projectContext |
| 39 | + }) |
| 40 | + ) |
| 41 | + ) |
| 42 | + ) |
| 43 | + ), |
| 44 | + new := (select newMembers filter .createdAt = datetime_of_statement()) |
| 45 | +select { `Added Project Members: Member -> Project` |
| 46 | + := new.user.realFirstName ++ ' ' ++ new.user.realLastName ++ ' -> ' ++ new.project.name } |
| 47 | +filter count(new) > 0; |
0 commit comments