This is an old revision of the document!
Students can not change much in the system, they can essentially just sign up or out.
Parameter: Student ID
signUpGroup(ident uid, ident id, ident studentId, ident groupId) { assume exists /exercise[id] && /exercise[id]/open && exists /account[uid]/student && /account[uid]/student/id = studentId || exists /account[uid]/assistant[id]; assume exists /exercise[id]/student[studentId]; # implies the existence of the exercise assume exists /exercise[id]/group[groupId]; # also implies it, but once is really enough assume not exists /exercise[id]/student[studentId]/group; assume /exercise[id]/group[groupId]/curSize < /exercise[id]/group[groupId]/maxSize; insert /exercise[id]/student[studentId]/group groupId; update /exercise[id]/group[groupId]/curSize (/exercise[id]/group[groupId]/curSize + 1); }
signOutGroup(ident uid, ident id, ident studentId) { assume exists /exercise[id] && /exercise[id]/open && exists /account[uid]/student && /account[uid]/student/id = studentId || exists /account[uid]/assistant[id]; assume exists /exercise[id]/student[studentId]/group; # implies existence of the exercise and student, even the group update /exercise[id]/group[/exercise[id]/student[studentId]/group]/curSize (/exercise[id]/group[/exercise[id]/student[studentId]/group]/curSize - 1) remove /exercise[id]/student[studentId]/group; }