Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Team Use Case and Design.pptx

 

Results of 1/15 discussion:

- defer 'optOut' feature

- DO send submission receipt notification to all users on submission list

- Allow submission permission to be restricted to the Team leader (aka 'captain' or 'admin')

- service to return all registered Teams in which a given user is a member should ALSO be able to filter by whether a user is a Team leader (aka 'captain' or 'admin').  We can further refine this to say the client should pass a user ID and the service should return a list of teams on whose behalf the user may submit, taking into account any restrictions.

- When retrieving a TeamState, a hash of the object should be returned.  The client submits the hash with the Submission and the server throws an exception if the hash is out of date.  This ensures that the Team State at the time of submission is the same as that which the user saw.

 

 

Design Approach

1) A Challenge is a Project with some extra metadata.  Implement this as a new object which a Project can 'own', and on which CRUD operations can be done independently from the Project.

...

URIMethodRequest ParametersRequest BodyResponse BodyAuthorizationNotes
/challengePOST--ChallengeChallengeCREATE permission required in referenced project 
/challenge/{id}GET----ChallengeREAD permission required in referenced project 
/entity/{projectId}/challengeGET----ChallengeREAD permission required in project 
/challengeGETparticipantId--PaginatedList<EntityHeader>PUBLIC?returns the projects/challenges for which 'participantId' is registered.
/challenge/{id}PUT--Challenge--UPDATE permission required in referenced project 
/challenge/{id}DELETE------DELETE permission required in referenced project 
/challenge/{id}/challengeTeamPOST--ChallengeTeamChallengeTeamMust be a member of the Participant Team and be an admin on the referenced Challenge Team. 
/challenge/{id}/challengeTeam/{challTeamId}GET----ChallengeTeamMust have READ permission in the Challenge Project. 
/challenge/{id}/challengeTeamGETlimit, offset, userIdsubmitterId--PaginatedList<ChallengeTeam>Must have READ permission in the Challenge Project.userId is an optional filter, limiting the results to just those Teams containing for which the given user can submit.  400 status if not in the Participant Team.
/challenge/{id}/challengeTeam/{challTeamId}PUT--ChallengeTeamChallengeTeamMust be a member of the Participant Team and be an admin on the referenced Challenge Team. 
/challenge/{id}/challengeTeam/{challTeamId}DELETE------Must be an admin on the referenced Challenge Team. 
/evaluation/submissionPOSTetag, teamIdSubmissionSubmissionMust have SUBMIT permission in the Evaluation referenced in the Submission.If teamId is included then a TeamState object is created for the Submission.  If 'contributer' list is non empty then teamId is required and Submission is rejected if submitter or any specified contributers is not on the given team.  Notifications sent to all contributers except for submitter, with instructions for opting out.
/evaluation/submission/{id}/optOutPUTuserId----userId must be the one making the request.Sets 'optOut' field for given userId in the Submission.  userId must be a contributer in the Submission (not the submitter himself) and Submission must not be in one of the Evaluation's 'optOutDisallowed' states.