CSC/ECE 517 Spring 2023 E2318: Reimplement Participants Controller: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 58: Line 58:
|-
|-
|1
|1
|<code>:model</code>
|<code>model</code>
|One of these two strings: <code>['Assignment', 'Course']</code>
|One of these two strings: <code>['Assignment', 'Course']</code>
|-
|-
|2
|2
|<code>:id</code>
|<code>id</code>
|The unique identifier for an assignment or a course depending on the value of <code>:model</code>
|The unique identifier for an assignment or a course depending on the value of <code>:model</code>
|}
|}
Line 89: Line 89:
'''Purpose''': Creates a participant in an assignment or a course
'''Purpose''': Creates a participant in an assignment or a course


'''Description''':
'''Description''': This endpoint allows the user to create a new participant for the provided assignment ID or course ID. A success response renders a JSON with the participant details. The user is required to provide a valid username as well as the appropriate permissions for the new participant. These permissions are <code>[can_submit, can_review, can_take_quiz]</code>. Depending on whether the request is for an <code>Assignment</code> or a <code>Course</code>, a participant type is determined between an <code>AssignmentParticipant</code> or a <code>CourseParticipant</code> and an entry is made into the database accordingly.


'''Path''': <code>/participants/:model/:id/:authorization</code>
'''Path''': <code>/participants/:model/:id/:authorization</code>
Line 96: Line 96:


'''Parameters''':
'''Parameters''':
{| class="wikitable" style="width: 100%;
! &nbsp;#&nbsp; !! Parameter !! Expected Value
|-
|1
|<code>model</code>
|One of these two strings: <code>['Assignment', 'Course']</code>
|-
|2
|<code>id</code>
|The unique identifier for an assignment or a course depending on the value of <code>:model</code>
|-
|3
|<code>username</code>
|The unique username of the new participant being requested</code>
|-
|4
|<code>authorization</code>
|A list of required permissions for the requested new particpant</code>
|}


'''Response''':
'''Response''':
* '''Success response'''
<pre>
{
  "participant": participant,
}
status: :created
</pre>
* '''Failure responses'''
When user does not exist
<pre>
{
  error: "User #{params[:user][:name]} does not exist"
}
status: :not_found
</pre>
When participant already exists in the assignment/course
<pre>
{
  error: "Participant #{params[:user][:name]} already exists for this #{params[:model]}"
}
status: :unprocessable_entity
</pre>


'''Changes''':
'''Changes''':
Line 105: Line 148:
'''Purpose''': Updates the participant's handle for an assignment
'''Purpose''': Updates the participant's handle for an assignment


'''Description''':
'''Description''': This endpoint allows the user to change their handle name for a given <code>AssignmentParticipant</code>. An <code>AssignmentParticipant</code> is one who is already enrolled in the assignment. A success response renders a JSON with the updated participant details. The user is required to provide a valid and available handle name.


'''Path''': <code>/participants/change_handle/:id</code>
'''Path''': <code>/participants/change_handle/:id</code>
Line 112: Line 155:


'''Parameters''':
'''Parameters''':
'''Parameters''':
{| class="wikitable" style="width: 100%;
! &nbsp;#&nbsp; !! Parameter !! Expected Value
|-
|1
|<code>id</code>
|The unique identifier for an <code>AssignmentParticipant</code>
|-
|2
|<code>handle</code>
|A valid, available handle name for the participant
|}


'''Response''':
'''Response''':
* '''Success response'''
When handle change was successful
<pre>
{
  "participant": participant,
}
status: :ok
</pre>
When handle is already in use
<pre>
{
  note: "Handle already in use"
}
status: :ok
</pre>
* '''Failure responses'''
<pre>
{
  error: participant.errors
}
status: :unprocessable_entity
</pre>


'''Changes''':
'''Changes''':

Revision as of 02:27, 23 March 2023

Introduction

Expertiza is an Open Source Rails application which is used by instructors and students for creating assignments and submitting peer reviews. Expertiza allows the instructor to create and customize assignments, create a list of topics the students can sign up for, have students work on teams and also review each other's assignments. Expertiza supports submissions across various document types, including URLs and wiki pages. The Source code of the application can be cloned from Github.

Background

In expertiza, there are three different types of users - normal users (typically students), administrators, super administrators. A normal user can participate in a course or an assignment or both. Courses and assignments are different entities in the system which allow enrollment of users. While a course is an independent entity, an assignment is part of a course.

The participants controller manages the participants across these courses and assignments by providing functionalities like listing all participants, adding a participant to a course or an assignment, updating the authorizations of a participant (can_submit, can_review, can_take_quiz), deleting a participant, inheriting participants from a course to an assignment, bequeath assignment participants to the corresponding course, changing the handle name of a participant in an assignment, and deleting a participant from an assignment.

Implementation

As part of the re-implementation, the objective is to employ an API-first approach while maintaining all the existing functionality in an efficient, robust and simple manner. Specifically for the participants controller, we've added seven different API endpoints to extend the current functionalities while modifying the code to support these APIs. The details for these endpoints can be found below.

 #  Endpoint Description
1 GET /participants/index/:model/:id Returns a list of participants of an assignment or a course
2 POST /participants/:model/:id/:authorization Creates a participant in an assignment or a course
3 POST /participants/change_handle/:id Updates the participant's handle for an assignment
4 POST /participants/update_authorizations/:id/:authorization Updates the participant's permissions for an assignment or a course depending on the role
5 DELETE /participants/:id Deletes a participant from an assignment or a course
6 GET /participants/inherit/:id Copies existing participants from a course down to its assignment
7 GET /participants/bequeath/:id Copies existing participants from an assignment up to its course

Index

Purpose: Returns a list of participants of an assignment or a course

Description: This endpoint allows the user to request a list of all participants for the provided assignment ID or course ID. A success response renders a JSON with a list of participants that can be parsed by the front-end.

Path: /participants/index/:model/:id

API method: GET

Parameters:

 #  Parameter Expected Value
1 model One of these two strings: ['Assignment', 'Course']
2 id The unique identifier for an assignment or a course depending on the value of :model
  • Success response
{
  "model_object": model_object,
  "participants": participants,
}
status: :ok
  • Failure response
{ 
  error: "Missing or invalid required parameters" 
}
status: :unprocessable_entity

Changes: <TBD>

Create

Purpose: Creates a participant in an assignment or a course

Description: This endpoint allows the user to create a new participant for the provided assignment ID or course ID. A success response renders a JSON with the participant details. The user is required to provide a valid username as well as the appropriate permissions for the new participant. These permissions are [can_submit, can_review, can_take_quiz]. Depending on whether the request is for an Assignment or a Course, a participant type is determined between an AssignmentParticipant or a CourseParticipant and an entry is made into the database accordingly.

Path: /participants/:model/:id/:authorization

API method: POST

Parameters:

 #  Parameter Expected Value
1 model One of these two strings: ['Assignment', 'Course']
2 id The unique identifier for an assignment or a course depending on the value of :model
3 username The unique username of the new participant being requested
4 authorization A list of required permissions for the requested new particpant

Response:

  • Success response
{
  "participant": participant,
}
status: :created
  • Failure responses

When user does not exist

{ 
  error: "User #{params[:user][:name]} does not exist" 
}
status: :not_found

When participant already exists in the assignment/course

{ 
  error: "Participant #{params[:user][:name]} already exists for this #{params[:model]}" 
}
status: :unprocessable_entity

Changes: <TBD>

Update Handle

Purpose: Updates the participant's handle for an assignment

Description: This endpoint allows the user to change their handle name for a given AssignmentParticipant. An AssignmentParticipant is one who is already enrolled in the assignment. A success response renders a JSON with the updated participant details. The user is required to provide a valid and available handle name.

Path: /participants/change_handle/:id

API method: POST

Parameters: Parameters:

 #  Parameter Expected Value
1 id The unique identifier for an AssignmentParticipant
2 handle A valid, available handle name for the participant

Response:

  • Success response

When handle change was successful

{
  "participant": participant,
}
status: :ok

When handle is already in use

{ 
  note: "Handle already in use" 
}
status: :ok
  • Failure responses
{ 
  error: participant.errors
}
status: :unprocessable_entity

Changes: <TBD>

Update authorizations

Purpose: Updates the participant's permissions for an assignment or a course depending on the role

Description:

Path: /participants/update_authorizations/:id/:authorization

API method: POST

Parameters:

Response:

Changes: <TBD>

Delete

Purpose: Deletes a participant from an assignment or a course

Description:


Path: /participants/:id

API method: DELETE

Parameters:

Response:

Changes: <TBD>

Inherit

Purpose: Copies existing participants from a course down to its assignment

Description:

Path: /participants/inherit/:id

API method: GET

Parameters:

Response:

Changes: <TBD>

Bequeath

Purpose: Copies existing participants from an assignment up to its course

Description:

Path: /participants/bequeath/:id

API method: GET

Parameters:

Response:

Changes: <TBD>


Test Plan

<TBD>


Contributors

  1. Saksham Pandey (spandey5@ncsu.edu)
  2. Devashish Vachhani (dvachha@ncsu.edu)
  3. Karthik K Jayakumar (kkunnum@ncsu.edu)

Mentor: Rucha Kolekar (rbkoleka@ncsu.edu)

Relevant Links

<TBD>