<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Avarma4</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Avarma4"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Avarma4"/>
	<updated>2026-05-18T01:00:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152820</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152820"/>
		<updated>2023-12-06T04:55:56Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
|This TypeScript file defines interfaces and transformation functions related to handling assignments. The IAssignmentRequest and IAssignmentResponse interfaces outline the expected structure for sending and receiving assignment data from the server. The transformAssignmentRequest function converts an IAssignmentRequest object into a JSON string, for sending data to the server. Conversely, the transformAssignmentResponse function parses a string representing an assignment response from the server into an IAssignmentResponse object. These utilities facilitate the communication and data transformation processes when working with assignments. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|This component is a central interface for creating and updating assignments. It employs Formik for efficient form handling, featuring fields for assignment details. The component adapts to different modes, enabling smooth creation or modification of assignments. Integrated with Redux for state management, it ensures responsive user feedback and streamlined error handling. This component is pivotal in managing the user interaction, form validation, and API communication for assignment-related tasks.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Creating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Creating2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Updating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Updating2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
=== Assignment.tsx ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 &amp;lt;main&amp;gt;&lt;br /&gt;
        &amp;lt;Container fluid className=&amp;quot;px-md-4&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;Row className=&amp;quot;mt-md-2 mb-md-2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Col className=&amp;quot;text-center&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            &amp;lt;nowiki&amp;gt;&amp;lt;hr/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Col md={{ span: 1, offset: 11 }}&amp;gt;&lt;br /&gt;
              &amp;lt;Button variant=&amp;quot;outline-info&amp;quot; onClick={() =&amp;gt; navigate(&amp;quot;new&amp;quot;)}&amp;gt;&lt;br /&gt;
                &amp;lt;BsFileText /&amp;gt;&lt;br /&gt;
              &amp;lt;/Button&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            {showDeleteConfirmation.visible &amp;amp;&amp;amp; (&lt;br /&gt;
              &amp;lt;DeleteAssignment assignmentData={showDeleteConfirmation.data!} onClose={onDeleteAssignmentHandler} /&amp;gt;&lt;br /&gt;
            )}&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Table&lt;br /&gt;
              data={tableData}&lt;br /&gt;
              columns={tableColumns}&lt;br /&gt;
              columnVisibility={{&lt;br /&gt;
                id: false,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              }}&lt;br /&gt;
            /&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
        &amp;lt;/Container&amp;gt;&lt;br /&gt;
      &amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
*Container and Layout: &lt;br /&gt;
&lt;br /&gt;
The snippet uses a Container with a fluid layout to create a responsive web page. It contains several Row and Col elements from a grid system to structure the content.&lt;br /&gt;
&lt;br /&gt;
*Heading and Divider: &lt;br /&gt;
&lt;br /&gt;
The first Row contains a column with a centered heading (&amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;) and a horizontal rule (&amp;lt;nowiki&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;/nowiki&amp;gt;) for visual separation.&lt;br /&gt;
&lt;br /&gt;
*Button for New Assignment: &lt;br /&gt;
&lt;br /&gt;
In another Row, there's a button with an icon (&amp;lt;BsFileText /&amp;gt;), styled as &amp;quot;outline-info&amp;quot;, which navigates to a &amp;quot;new&amp;quot; route when clicked.&lt;br /&gt;
&lt;br /&gt;
*Conditional Rendering for Delete Confirmation: &lt;br /&gt;
&lt;br /&gt;
The code conditionally renders a DeleteAssignment component if showDeleteConfirmation.visible is true, providing it with assignment data and a handler function for deletion events.&lt;br /&gt;
&lt;br /&gt;
*Table Display: &lt;br /&gt;
&lt;br /&gt;
Finally, there's a Table component displaying tableData with specified tableColumns and hiding the column with the id id. This is used to display assignment-related data in a tabular format.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
*Video: https://drive.google.com/file/d/1FWsvwkZoUltILcxUOL1TNSitFZuaHO25/view?usp=drive_link&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152819</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152819"/>
		<updated>2023-12-06T04:53:49Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
|This TypeScript file defines interfaces and transformation functions related to handling assignments. The IAssignmentRequest and IAssignmentResponse interfaces outline the expected structure for sending and receiving assignment data from the server. The transformAssignmentRequest function converts an IAssignmentRequest object into a JSON string, for sending data to the server. Conversely, the transformAssignmentResponse function parses a string representing an assignment response from the server into an IAssignmentResponse object. These utilities facilitate the communication and data transformation processes when working with assignments. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|This component is a central interface for creating and updating assignments. It employs Formik for efficient form handling, featuring fields for assignment details. The component adapts to different modes, enabling smooth creation or modification of assignments. Integrated with Redux for state management, it ensures responsive user feedback and streamlined error handling. This component is pivotal in managing the user interaction, form validation, and API communication for assignment-related tasks.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Creating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Creating2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Updating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Updating2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
=== Assignment.tsx ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 &amp;lt;main&amp;gt;&lt;br /&gt;
        &amp;lt;Container fluid className=&amp;quot;px-md-4&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;Row className=&amp;quot;mt-md-2 mb-md-2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Col className=&amp;quot;text-center&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            &amp;lt;nowiki&amp;gt;&amp;lt;hr/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Col md={{ span: 1, offset: 11 }}&amp;gt;&lt;br /&gt;
              &amp;lt;Button variant=&amp;quot;outline-info&amp;quot; onClick={() =&amp;gt; navigate(&amp;quot;new&amp;quot;)}&amp;gt;&lt;br /&gt;
                &amp;lt;BsFileText /&amp;gt;&lt;br /&gt;
              &amp;lt;/Button&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            {showDeleteConfirmation.visible &amp;amp;&amp;amp; (&lt;br /&gt;
              &amp;lt;DeleteAssignment assignmentData={showDeleteConfirmation.data!} onClose={onDeleteAssignmentHandler} /&amp;gt;&lt;br /&gt;
            )}&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Table&lt;br /&gt;
              data={tableData}&lt;br /&gt;
              columns={tableColumns}&lt;br /&gt;
              columnVisibility={{&lt;br /&gt;
                id: false,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              }}&lt;br /&gt;
            /&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
        &amp;lt;/Container&amp;gt;&lt;br /&gt;
      &amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
*Container and Layout: &lt;br /&gt;
&lt;br /&gt;
The snippet uses a Container with a fluid layout to create a responsive web page. It contains several Row and Col elements from a grid system (likely Bootstrap) to structure the content.&lt;br /&gt;
&lt;br /&gt;
*Heading and Divider: &lt;br /&gt;
&lt;br /&gt;
The first Row contains a column with a centered heading (&amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;) and a horizontal rule (&amp;lt;nowiki&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;/nowiki&amp;gt;) for visual separation.&lt;br /&gt;
&lt;br /&gt;
*Button for New Assignment: &lt;br /&gt;
&lt;br /&gt;
In another Row, there's a button with an icon (&amp;lt;BsFileText /&amp;gt;), styled as &amp;quot;outline-info&amp;quot;, which navigates to a &amp;quot;new&amp;quot; route (presumably for creating a new assignment) when clicked.&lt;br /&gt;
&lt;br /&gt;
*Conditional Rendering for Delete Confirmation: &lt;br /&gt;
&lt;br /&gt;
The code conditionally renders a DeleteAssignment component if showDeleteConfirmation.visible is true, providing it with assignment data and a handler function for deletion events.&lt;br /&gt;
&lt;br /&gt;
*Table Display: &lt;br /&gt;
&lt;br /&gt;
Finally, there's a Table component displaying tableData with specified tableColumns and hiding the column with the id id. This is used to display assignment-related data in a tabular format.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
*Video: https://drive.google.com/file/d/1FWsvwkZoUltILcxUOL1TNSitFZuaHO25/view?usp=drive_link&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152818</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152818"/>
		<updated>2023-12-06T04:49:37Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Useful Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
|This TypeScript file defines interfaces and transformation functions related to handling assignments. The IAssignmentRequest and IAssignmentResponse interfaces outline the expected structure for sending and receiving assignment data from the server. The transformAssignmentRequest function converts an IAssignmentRequest object into a JSON string, for sending data to the server. Conversely, the transformAssignmentResponse function parses a string representing an assignment response from the server into an IAssignmentResponse object. These utilities facilitate the communication and data transformation processes when working with assignments. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|This component is a central interface for creating and updating assignments. It employs Formik for efficient form handling, featuring fields for assignment details. The component adapts to different modes, enabling smooth creation or modification of assignments. Integrated with Redux for state management, it ensures responsive user feedback and streamlined error handling. This component is pivotal in managing the user interaction, form validation, and API communication for assignment-related tasks.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Creating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Creating2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Updating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Updating2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
=== Assignment.tsx ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 &amp;lt;main&amp;gt;&lt;br /&gt;
        &amp;lt;Container fluid className=&amp;quot;px-md-4&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;Row className=&amp;quot;mt-md-2 mb-md-2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Col className=&amp;quot;text-center&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            &amp;lt;nowiki&amp;gt;&amp;lt;hr/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Col md={{ span: 1, offset: 11 }}&amp;gt;&lt;br /&gt;
              &amp;lt;Button variant=&amp;quot;outline-info&amp;quot; onClick={() =&amp;gt; navigate(&amp;quot;new&amp;quot;)}&amp;gt;&lt;br /&gt;
                &amp;lt;BsFileText /&amp;gt;&lt;br /&gt;
              &amp;lt;/Button&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            {showDeleteConfirmation.visible &amp;amp;&amp;amp; (&lt;br /&gt;
              &amp;lt;DeleteAssignment assignmentData={showDeleteConfirmation.data!} onClose={onDeleteAssignmentHandler} /&amp;gt;&lt;br /&gt;
            )}&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Table&lt;br /&gt;
              data={tableData}&lt;br /&gt;
              columns={tableColumns}&lt;br /&gt;
              columnVisibility={{&lt;br /&gt;
                id: false,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              }}&lt;br /&gt;
            /&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
        &amp;lt;/Container&amp;gt;&lt;br /&gt;
      &amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
*Container and Layout: &lt;br /&gt;
&lt;br /&gt;
The snippet uses a Container with a fluid layout to create a responsive web page. It contains several Row and Col elements from a grid system (likely Bootstrap) to structure the content.&lt;br /&gt;
&lt;br /&gt;
*Heading and Divider: &lt;br /&gt;
&lt;br /&gt;
The first Row contains a column with a centered heading (&amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;) and a horizontal rule (&amp;lt;nowiki&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;/nowiki&amp;gt;) for visual separation.&lt;br /&gt;
&lt;br /&gt;
*Button for New Assignment: &lt;br /&gt;
&lt;br /&gt;
In another Row, there's a button with an icon (&amp;lt;BsFileText /&amp;gt;), styled as &amp;quot;outline-info&amp;quot;, which navigates to a &amp;quot;new&amp;quot; route (presumably for creating a new assignment) when clicked.&lt;br /&gt;
&lt;br /&gt;
*Conditional Rendering for Delete Confirmation: &lt;br /&gt;
&lt;br /&gt;
The code conditionally renders a DeleteAssignment component if showDeleteConfirmation.visible is true, providing it with assignment data and a handler function for deletion events.&lt;br /&gt;
&lt;br /&gt;
*Table Display: &lt;br /&gt;
&lt;br /&gt;
Finally, there's a Table component displaying tableData with specified tableColumns and hiding the column with the id id. This is likely used to display assignment-related data in a tabular format.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
*Video: https://drive.google.com/file/d/1FWsvwkZoUltILcxUOL1TNSitFZuaHO25/view?usp=drive_link&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152817</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152817"/>
		<updated>2023-12-06T04:48:35Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Files Added */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
|This TypeScript file defines interfaces and transformation functions related to handling assignments. The IAssignmentRequest and IAssignmentResponse interfaces outline the expected structure for sending and receiving assignment data from the server. The transformAssignmentRequest function converts an IAssignmentRequest object into a JSON string, for sending data to the server. Conversely, the transformAssignmentResponse function parses a string representing an assignment response from the server into an IAssignmentResponse object. These utilities facilitate the communication and data transformation processes when working with assignments. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|This component is a central interface for creating and updating assignments. It employs Formik for efficient form handling, featuring fields for assignment details. The component adapts to different modes, enabling smooth creation or modification of assignments. Integrated with Redux for state management, it ensures responsive user feedback and streamlined error handling. This component is pivotal in managing the user interaction, form validation, and API communication for assignment-related tasks.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Creating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Creating2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Updating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Updating2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
=== Assignment.tsx ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 &amp;lt;main&amp;gt;&lt;br /&gt;
        &amp;lt;Container fluid className=&amp;quot;px-md-4&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;Row className=&amp;quot;mt-md-2 mb-md-2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Col className=&amp;quot;text-center&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            &amp;lt;nowiki&amp;gt;&amp;lt;hr/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Col md={{ span: 1, offset: 11 }}&amp;gt;&lt;br /&gt;
              &amp;lt;Button variant=&amp;quot;outline-info&amp;quot; onClick={() =&amp;gt; navigate(&amp;quot;new&amp;quot;)}&amp;gt;&lt;br /&gt;
                &amp;lt;BsFileText /&amp;gt;&lt;br /&gt;
              &amp;lt;/Button&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            {showDeleteConfirmation.visible &amp;amp;&amp;amp; (&lt;br /&gt;
              &amp;lt;DeleteAssignment assignmentData={showDeleteConfirmation.data!} onClose={onDeleteAssignmentHandler} /&amp;gt;&lt;br /&gt;
            )}&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Table&lt;br /&gt;
              data={tableData}&lt;br /&gt;
              columns={tableColumns}&lt;br /&gt;
              columnVisibility={{&lt;br /&gt;
                id: false,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              }}&lt;br /&gt;
            /&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
        &amp;lt;/Container&amp;gt;&lt;br /&gt;
      &amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
*Container and Layout: &lt;br /&gt;
&lt;br /&gt;
The snippet uses a Container with a fluid layout to create a responsive web page. It contains several Row and Col elements from a grid system (likely Bootstrap) to structure the content.&lt;br /&gt;
&lt;br /&gt;
*Heading and Divider: &lt;br /&gt;
&lt;br /&gt;
The first Row contains a column with a centered heading (&amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;) and a horizontal rule (&amp;lt;nowiki&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;/nowiki&amp;gt;) for visual separation.&lt;br /&gt;
&lt;br /&gt;
*Button for New Assignment: &lt;br /&gt;
&lt;br /&gt;
In another Row, there's a button with an icon (&amp;lt;BsFileText /&amp;gt;), styled as &amp;quot;outline-info&amp;quot;, which navigates to a &amp;quot;new&amp;quot; route (presumably for creating a new assignment) when clicked.&lt;br /&gt;
&lt;br /&gt;
*Conditional Rendering for Delete Confirmation: &lt;br /&gt;
&lt;br /&gt;
The code conditionally renders a DeleteAssignment component if showDeleteConfirmation.visible is true, providing it with assignment data and a handler function for deletion events.&lt;br /&gt;
&lt;br /&gt;
*Table Display: &lt;br /&gt;
&lt;br /&gt;
Finally, there's a Table component displaying tableData with specified tableColumns and hiding the column with the id id. This is likely used to display assignment-related data in a tabular format.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152816</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152816"/>
		<updated>2023-12-06T04:46:46Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Creating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Creating2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Updating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Updating2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
=== Assignment.tsx ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 &amp;lt;main&amp;gt;&lt;br /&gt;
        &amp;lt;Container fluid className=&amp;quot;px-md-4&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;Row className=&amp;quot;mt-md-2 mb-md-2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Col className=&amp;quot;text-center&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            &amp;lt;nowiki&amp;gt;&amp;lt;hr/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Col md={{ span: 1, offset: 11 }}&amp;gt;&lt;br /&gt;
              &amp;lt;Button variant=&amp;quot;outline-info&amp;quot; onClick={() =&amp;gt; navigate(&amp;quot;new&amp;quot;)}&amp;gt;&lt;br /&gt;
                &amp;lt;BsFileText /&amp;gt;&lt;br /&gt;
              &amp;lt;/Button&amp;gt;&lt;br /&gt;
            &amp;lt;/Col&amp;gt;&lt;br /&gt;
            {showDeleteConfirmation.visible &amp;amp;&amp;amp; (&lt;br /&gt;
              &amp;lt;DeleteAssignment assignmentData={showDeleteConfirmation.data!} onClose={onDeleteAssignmentHandler} /&amp;gt;&lt;br /&gt;
            )}&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
          &amp;lt;Row&amp;gt;&lt;br /&gt;
            &amp;lt;Table&lt;br /&gt;
              data={tableData}&lt;br /&gt;
              columns={tableColumns}&lt;br /&gt;
              columnVisibility={{&lt;br /&gt;
                id: false,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              }}&lt;br /&gt;
            /&amp;gt;&lt;br /&gt;
          &amp;lt;/Row&amp;gt;&lt;br /&gt;
        &amp;lt;/Container&amp;gt;&lt;br /&gt;
      &amp;lt;/main&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
*Container and Layout: &lt;br /&gt;
&lt;br /&gt;
The snippet uses a Container with a fluid layout to create a responsive web page. It contains several Row and Col elements from a grid system (likely Bootstrap) to structure the content.&lt;br /&gt;
&lt;br /&gt;
*Heading and Divider: &lt;br /&gt;
&lt;br /&gt;
The first Row contains a column with a centered heading (&amp;lt;nowiki&amp;gt;&amp;lt;h1&amp;gt;Manage Assignments&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;) and a horizontal rule (&amp;lt;nowiki&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;/nowiki&amp;gt;) for visual separation.&lt;br /&gt;
&lt;br /&gt;
*Button for New Assignment: &lt;br /&gt;
&lt;br /&gt;
In another Row, there's a button with an icon (&amp;lt;BsFileText /&amp;gt;), styled as &amp;quot;outline-info&amp;quot;, which navigates to a &amp;quot;new&amp;quot; route (presumably for creating a new assignment) when clicked.&lt;br /&gt;
&lt;br /&gt;
*Conditional Rendering for Delete Confirmation: &lt;br /&gt;
&lt;br /&gt;
The code conditionally renders a DeleteAssignment component if showDeleteConfirmation.visible is true, providing it with assignment data and a handler function for deletion events.&lt;br /&gt;
&lt;br /&gt;
*Table Display: &lt;br /&gt;
&lt;br /&gt;
Finally, there's a Table component displaying tableData with specified tableColumns and hiding the column with the id id. This is likely used to display assignment-related data in a tabular format.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152815</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152815"/>
		<updated>2023-12-06T04:37:30Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Creating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Creating2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Updating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Updating2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152814</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152814"/>
		<updated>2023-12-06T04:34:53Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Updating Assignments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Creating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Creating2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Updating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Updating2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Updating2.jpeg&amp;diff=152813</id>
		<title>File:Updating2.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Updating2.jpeg&amp;diff=152813"/>
		<updated>2023-12-06T04:34:38Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Updating1.jpeg&amp;diff=152811</id>
		<title>File:Updating1.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Updating1.jpeg&amp;diff=152811"/>
		<updated>2023-12-06T04:33:52Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152810</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152810"/>
		<updated>2023-12-06T04:32:24Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Creating Assignments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Creating1.jpeg|800px|center]]&lt;br /&gt;
[[File:Creating2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Creating2.jpeg&amp;diff=152809</id>
		<title>File:Creating2.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Creating2.jpeg&amp;diff=152809"/>
		<updated>2023-12-06T04:32:03Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Creating1.jpeg&amp;diff=152808</id>
		<title>File:Creating1.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Creating1.jpeg&amp;diff=152808"/>
		<updated>2023-12-06T04:31:09Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152806</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152806"/>
		<updated>2023-12-06T03:16:28Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Reimplementation Done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152804</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152804"/>
		<updated>2023-12-06T03:15:23Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Reimplementation Done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:Displaying.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
[[File:Deleting.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Deleting.png&amp;diff=152803</id>
		<title>File:Deleting.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Deleting.png&amp;diff=152803"/>
		<updated>2023-12-06T03:14:45Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Displaying.png&amp;diff=152801</id>
		<title>File:Displaying.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Displaying.png&amp;diff=152801"/>
		<updated>2023-12-06T03:12:23Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152800</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152800"/>
		<updated>2023-12-06T03:11:51Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152799</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152799"/>
		<updated>2023-12-06T03:10:47Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Update.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Update.png&amp;diff=152798</id>
		<title>File:Update.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Update.png&amp;diff=152798"/>
		<updated>2023-12-06T03:10:20Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: Avarma4 uploaded a new version of File:Update.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152797</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152797"/>
		<updated>2023-12-06T03:09:48Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Display.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Display.png&amp;diff=152796</id>
		<title>File:Display.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Display.png&amp;diff=152796"/>
		<updated>2023-12-06T03:09:14Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152795</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152795"/>
		<updated>2023-12-06T03:08:19Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Delete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete.png&amp;diff=152793</id>
		<title>File:Delete.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete.png&amp;diff=152793"/>
		<updated>2023-12-06T03:07:40Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: Avarma4 uploaded a new version of File:Delete.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152792</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152792"/>
		<updated>2023-12-06T03:07:12Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Create */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Create.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Create.png&amp;diff=152791</id>
		<title>File:Create.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Create.png&amp;diff=152791"/>
		<updated>2023-12-06T03:06:26Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: Avarma4 uploaded a new version of File:Create.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152786</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152786"/>
		<updated>2023-12-06T02:50:28Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Testing was not in the scope for this project as it is frontend development. Testing the frontend of a React website involves ensuring that the user interface of the website behaves as expected and delivers a seamless user experience. Manual testing will be conducted to ensure that all the UI components work as intended, like&lt;br /&gt;
&lt;br /&gt;
* Testing all the links to the buttons added,&lt;br /&gt;
&lt;br /&gt;
* Testing the routes for all the functionalities in the Manage Assignment section of the website,&lt;br /&gt;
&lt;br /&gt;
* Testing the data displayed correctly corresponding to the component's page.&lt;br /&gt;
&lt;br /&gt;
A link to the video showing the working of the added components is provided to make sure that manual testing is successful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152785</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152785"/>
		<updated>2023-12-06T02:48:19Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Files Added */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Assignment.tsx&lt;br /&gt;
|Added code that sets up a React component (Assignments) to manage and display assignments. It handles data fetching from APIs, transforms and merges data, configures a dynamic table, and provides user interactions for editing and deleting assignments. Additionally, it includes error handling and logging for debugging purposes. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|AssignmentUtils.tsx:&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|AssignmentEditor.tsx:&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|AssignmentDelete.tsx:&lt;br /&gt;
|Created the DeleteAssignment component that encapsulates the logic and UI elements required for a confirmation modal when deleting assignments. It communicates with the API, handles errors, and provides a clear and user-friendly interface for the deletion process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|AssignmentColumns.tsx:&lt;br /&gt;
|In app.tsx, we also added a protected route for displaying assignments, where only users with a role of TA or higher can access. Additionally, it defines nested routes for creating and editing assignments using the AssignmentEditor component, with a loader function to handle data loading before rendering.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152784</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152784"/>
		<updated>2023-12-06T02:44:02Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Reimplementation Done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the assignments on this page.&lt;br /&gt;
&lt;br /&gt;
=== Creating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Updating Assignments ===&lt;br /&gt;
&lt;br /&gt;
=== Deleting Assignments ===&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152783</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152783"/>
		<updated>2023-12-06T02:41:42Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes Intended ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152782</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152782"/>
		<updated>2023-12-06T02:39:25Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Display===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Create===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to create a new user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
===Delete===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to delete a user. For our new components, we will be replicating this modal wherever an entity has to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
The following design for users shows the modal to update a user.&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152781</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152781"/>
		<updated>2023-12-06T02:32:07Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Assignment:&lt;br /&gt;
This component will be used to display all the assignments available. We will make sure that the route /assignment will list all the assignments in a tabular format as shown in the previous designs in the next section. Along with this list, there will be options to perform CRUD operations. For assignments, we will have the options to edit and delete a particular assignment. Also, there will be an option to create a new assignment.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
=== List ===&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create ===&lt;br /&gt;
[[File:Img2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment submission for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
[[File:Img4.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Editing assignment for instructors in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
[[File:Img5.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view in current Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152780</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152780"/>
		<updated>2023-12-06T02:30:52Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Description of Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
This project focuses on creating User Interfaces for the Assignment SubSection of the Manage Section of the website using React JS. Previously, Ruby template parser was used for building the application. However, in the new implementation, the backend and frontend applications have been separated and they are run independently. This allows us to have more flexibility with the technology stack. It is for this reason, the frontend application is being developed using React JS.&lt;br /&gt;
The components that we are responsible for are the pages for Assignment and all the CRUD functionality associated with it . In the new implementation, we reimplement these pages by making use of React JS with Typescript.&lt;br /&gt;
Following are the changes that will be done in the new implementation:&lt;br /&gt;
&lt;br /&gt;
1. Render the data on the respective pages in a tabular format shown in the previous designs.&lt;br /&gt;
&lt;br /&gt;
2. Provide the buttons for creating, editing and deleting entities depending on the pages in the tables.&lt;br /&gt;
&lt;br /&gt;
3. Displaying appropriate alerts after any changes are made (create/edit/delete).&lt;br /&gt;
&lt;br /&gt;
4. Integrate the frontend functionalities mentioned with the backend.&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
=== List ===&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create ===&lt;br /&gt;
[[File:Img2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment submission for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
[[File:Img4.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Editing assignment for instructors in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
[[File:Img5.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view in current Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152438</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152438"/>
		<updated>2023-12-05T01:45:00Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Files Added */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementation, the backend and frontend applications have been decoupled, allowing for more flexibility in the technology stack. The specific components under consideration are the pages for listing, creating, editing, and deleting assignments. Previously relying on a Ruby template parser, the new approach leverages React JS for enhanced modularity and efficiency.&lt;br /&gt;
&lt;br /&gt;
By reimagining the assignment management frontend, this project aims to bring a modern, responsive, and efficient interface to Expertiza, aligning with contemporary web development standards. The use of React and Typescript ensures a robust foundation, fostering maintainability and scalability in the long run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
=== List ===&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create ===&lt;br /&gt;
[[File:Img2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment submission for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
[[File:Img4.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Editing assignment for instructors in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
[[File:Img5.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view in current Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152437</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152437"/>
		<updated>2023-12-05T01:44:29Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Files Added */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementation, the backend and frontend applications have been decoupled, allowing for more flexibility in the technology stack. The specific components under consideration are the pages for listing, creating, editing, and deleting assignments. Previously relying on a Ruby template parser, the new approach leverages React JS for enhanced modularity and efficiency.&lt;br /&gt;
&lt;br /&gt;
By reimagining the assignment management frontend, this project aims to bring a modern, responsive, and efficient interface to Expertiza, aligning with contemporary web development standards. The use of React and Typescript ensures a robust foundation, fostering maintainability and scalability in the long run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
=== List ===&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create ===&lt;br /&gt;
[[File:Img2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment submission for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
[[File:Img4.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Editing assignment for instructors in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
[[File:Img5.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view in current Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152435</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152435"/>
		<updated>2023-12-05T01:42:41Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Files Added */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementation, the backend and frontend applications have been decoupled, allowing for more flexibility in the technology stack. The specific components under consideration are the pages for listing, creating, editing, and deleting assignments. Previously relying on a Ruby template parser, the new approach leverages React JS for enhanced modularity and efficiency.&lt;br /&gt;
&lt;br /&gt;
By reimagining the assignment management frontend, this project aims to bring a modern, responsive, and efficient interface to Expertiza, aligning with contemporary web development standards. The use of React and Typescript ensures a robust foundation, fostering maintainability and scalability in the long run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Updated &amp;lt;code&amp;gt;check_reset_url&amp;lt;/code&amp;gt; method name to &amp;lt;code&amp;gt;check_token_validity&amp;lt;/code&amp;gt;&lt;br /&gt;
|The method validates that the password reset token is valid and present. The updated method name provides a more functionally descriptive name. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
=== List ===&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create ===&lt;br /&gt;
[[File:Img2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment submission for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
[[File:Img4.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Editing assignment for instructors in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
[[File:Img5.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view in current Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152425</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152425"/>
		<updated>2023-12-05T01:28:43Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementation, the backend and frontend applications have been decoupled, allowing for more flexibility in the technology stack. The specific components under consideration are the pages for listing, creating, editing, and deleting assignments. Previously relying on a Ruby template parser, the new approach leverages React JS for enhanced modularity and efficiency.&lt;br /&gt;
&lt;br /&gt;
By reimagining the assignment management frontend, this project aims to bring a modern, responsive, and efficient interface to Expertiza, aligning with contemporary web development standards. The use of React and Typescript ensures a robust foundation, fostering maintainability and scalability in the long run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
=== List ===&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create ===&lt;br /&gt;
[[File:Img2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment submission for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
[[File:Img4.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Editing assignment for instructors in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
[[File:Img5.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view in current Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152423</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=152423"/>
		<updated>2023-12-05T01:22:45Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementation, the backend and frontend applications have been decoupled, allowing for more flexibility in the technology stack. The specific components under consideration are the pages for listing, creating, editing, and deleting assignments. Previously relying on a Ruby template parser, the new approach leverages React JS for enhanced modularity and efficiency.&lt;br /&gt;
&lt;br /&gt;
By reimagining the assignment management frontend, this project aims to bring a modern, responsive, and efficient interface to Expertiza, aligning with contemporary web development standards. The use of React and Typescript ensures a robust foundation, fostering maintainability and scalability in the long run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Img2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment submission for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Img4.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Editing assignment for instructors in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Img5.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view in current Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=151772</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=151772"/>
		<updated>2023-11-16T04:52:13Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementation, the backend and frontend applications have been decoupled, allowing for more flexibility in the technology stack. The specific components under consideration are the pages for listing, creating, editing, and deleting assignments. Previously relying on a Ruby template parser, the new approach leverages React JS for enhanced modularity and efficiency.&lt;br /&gt;
&lt;br /&gt;
By reimagining the assignment management frontend, this project aims to bring a modern, responsive, and efficient interface to Expertiza, aligning with contemporary web development standards. The use of React and Typescript ensures a robust foundation, fostering maintainability and scalability in the long run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Img2.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment submission for students in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Img4.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Editing assignment for instructors in old Expertiza.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Img5.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view in current Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=151769</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=151769"/>
		<updated>2023-11-16T04:49:57Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementation, the backend and frontend applications have been decoupled, allowing for more flexibility in the technology stack. The specific components under consideration are the pages for listing, creating, editing, and deleting assignments. Previously relying on a Ruby template parser, the new approach leverages React JS for enhanced modularity and efficiency.&lt;br /&gt;
&lt;br /&gt;
By reimagining the assignment management frontend, this project aims to bring a modern, responsive, and efficient interface to Expertiza, aligning with contemporary web development standards. The use of React and Typescript ensures a robust foundation, fostering maintainability and scalability in the long run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view for students in old Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
[[File:Img2.jpeg|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment submission for students in old Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
[[File:Img4.jpeg|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Editing assignment for instructors in old Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
[[File:Img5.jpeg|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
'''Assignment view in current Expertiza.'''&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=151766</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=151766"/>
		<updated>2023-11-16T04:47:01Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementation, the backend and frontend applications have been decoupled, allowing for more flexibility in the technology stack. The specific components under consideration are the pages for listing, creating, editing, and deleting assignments. Previously relying on a Ruby template parser, the new approach leverages React JS for enhanced modularity and efficiency.&lt;br /&gt;
&lt;br /&gt;
By reimagining the assignment management frontend, this project aims to bring a modern, responsive, and efficient interface to Expertiza, aligning with contemporary web development standards. The use of React and Typescript ensures a robust foundation, fostering maintainability and scalability in the long run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
[[File:Img1.jpeg|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
Assignment view for students in old Expertiza.&lt;br /&gt;
&lt;br /&gt;
[[File:Img2.jpeg|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
Assignment submission for students in old Expertiza.&lt;br /&gt;
&lt;br /&gt;
[[File:Img4.jpeg|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
Editing assignment for instructors in old Expertiza.&lt;br /&gt;
&lt;br /&gt;
[[File:Img5.jpeg|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
Assignment view in current Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Img5.jpeg&amp;diff=151764</id>
		<title>File:Img5.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Img5.jpeg&amp;diff=151764"/>
		<updated>2023-11-16T04:42:12Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Img4.jpeg&amp;diff=151763</id>
		<title>File:Img4.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Img4.jpeg&amp;diff=151763"/>
		<updated>2023-11-16T04:41:49Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Img3.jpeg&amp;diff=151761</id>
		<title>File:Img3.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Img3.jpeg&amp;diff=151761"/>
		<updated>2023-11-16T04:40:11Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: Avarma4 uploaded a new version of File:Img3.jpeg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Img2.jpeg&amp;diff=151759</id>
		<title>File:Img2.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Img2.jpeg&amp;diff=151759"/>
		<updated>2023-11-16T04:39:13Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: Avarma4 uploaded a new version of File:Img2.jpeg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Img1.jpeg&amp;diff=151758</id>
		<title>File:Img1.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Img1.jpeg&amp;diff=151758"/>
		<updated>2023-11-16T04:37:49Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: Avarma4 uploaded a new version of File:Img1.jpeg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=151754</id>
		<title>CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2381._Reimplement_frontend_for_Assignments&amp;diff=151754"/>
		<updated>2023-11-16T04:32:39Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: Created page with &amp;quot;== Description of Project ==  The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementati...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&lt;br /&gt;
&lt;br /&gt;
The project focuses on the reimplementation of the frontend for assignments in Expertiza, utilizing React and Typescript. In the new implementation, the backend and frontend applications have been decoupled, allowing for more flexibility in the technology stack. The specific components under consideration are the pages for listing, creating, editing, and deleting assignments. Previously relying on a Ruby template parser, the new approach leverages React JS for enhanced modularity and efficiency.&lt;br /&gt;
&lt;br /&gt;
By reimagining the assignment management frontend, this project aims to bring a modern, responsive, and efficient interface to Expertiza, aligning with contemporary web development standards. The use of React and Typescript ensures a robust foundation, fostering maintainability and scalability in the long run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technologies Used ==&lt;br /&gt;
&lt;br /&gt;
1. ReactJs&lt;br /&gt;
&lt;br /&gt;
2. React-Bootstrap for styling the pages of the components mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes ==&lt;br /&gt;
*Enhance assignment management UI for improved clarity and intuitiveness, inspired by the existing theme.&lt;br /&gt;
*Implement React and Typescript for modern frontend development, ensuring maintainability and scalability.&lt;br /&gt;
*Adhere to coding standards, emphasizing component reuse, single responsibility, meaningful naming, and Typescript usage.&lt;br /&gt;
*Utilize a tabular format for assignment listing, with buttons for editing, deleting, and creating assignments.&lt;br /&gt;
*Maintain UI theming consistency with Expertiza, drawing inspiration from the Users page.&lt;br /&gt;
*Introduce responsive alert notifications for immediate user feedback on assignment-related actions.&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-front-end&lt;br /&gt;
&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-front-end/pull/24&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023&amp;diff=151568</id>
		<title>CSC/ECE 517 Fall 2023</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023&amp;diff=151568"/>
		<updated>2023-11-16T01:29:58Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2023 - E2350. Allow reviewers to bid on what to review]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2351. Finish mentor management for assignments without topics]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2352. Fix &amp;quot;Back&amp;quot; link on “New Late Policy” page]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2353. Further refactoring and improvement of review mapping helper]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2355. Improving Search Facility In Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2356. Refactor review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2357. Refactor sign_up_sheet_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2358. Refactor student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2359. Refactor user_controller.rb, user.rb, and its child classes]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2360. View for Results of Bidding]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2361. Create a page to create and update a Questionnaire in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2362. Create a page to edit an Assignment's due date in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2363. Create a UI for Assignment Edit page &amp;quot;Etc&amp;quot; tab in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2364. Create a UI for Course's &amp;amp; Assignment's &amp;quot;Add Participants&amp;quot; page]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2365. Create a user interface for Questionnaire in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2363. Create a UI for Assignment Edit page &amp;quot;Etc&amp;quot; tab in ReactJS(Phase 2)]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2366. Reimplement assignment model and assignment controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2367. Reimplement participants_controller.rb, participants.rb and its child classes]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2368. Reimplement of due_date.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2369. Reimplement duties controller.rb and badges controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2370. Reimplement join team requests controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2371. Reimplement quiz_questionnaires_controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2373. Reimplementation of teams controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2373. Reimplement teams_controllers.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2374. Reimplement the Question hierarchy]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2375. Reimplement Waitlists]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2376. Reimplement student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2379. Reimplement authorization_helper.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2380. Reimplement frontend for Courses]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2381. Reimplement frontend for Assignments]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2382. Optimizing the LatePoliciesController]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2383. Grading Audit Trail]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2384. Reimplement user_controller.rb, user.rb and its child classes]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2385. Create a Courses User interface in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2386. Reimplement teams_users backend]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2377. Reimplement impersonating users (functionality within impersonate_controller.rb)]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - NTX-1 Adding Snapshot Controller/API and CRDs]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - NTX-2 Observability and Debuggability]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - NTX-3 Usability and Security]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - NTX-4 Extend NDB Operator capabilities to support Postgres HA]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - G2350. Add GitLab support for using GraphQL to query user metrics 1]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - G2352. Add GitLab support for using GraphQL to query repository information]]&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2369._Reimplement_duties_controller.rb_and_badges_controller.rb&amp;diff=151248</id>
		<title>CSC/ECE 517 Fall 2023 - E2369. Reimplement duties controller.rb and badges controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2369._Reimplement_duties_controller.rb_and_badges_controller.rb&amp;diff=151248"/>
		<updated>2023-11-07T03:53:13Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Contributors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Topic Overview &amp;amp; Prior Work ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
'''duties_controller.rb'''&lt;br /&gt;
&lt;br /&gt;
The actions defined by this duties_controller include create, update, and remove. The new duty is saved to the database using the create action. The update action is used to update the duty in the database, while the edit action renders the form for editing an existing duty. Lastly, a duty can be removed from the database by using the delete action. All things considered, Expertiza's Duties module aids in the management of duties.&lt;br /&gt;
&lt;br /&gt;
'''badges_controller.rb'''&lt;br /&gt;
&lt;br /&gt;
A new Badge instance is created by the controller using the user-supplied parameters through the use of the create action. If an image file is attached, it additionally saves it and modifies the badge instance's image_name attribute. &lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
&lt;br /&gt;
The prior implementation of the duties and badges controllers was based on a Rails MVC application rather than strictly as an API built on Rails. The handling of requests and responses did not align with the API architecture, thus needing adjustments to ensure a more suitable API-style communication. Furthermore, the previous implementation lacked comprehensive testing, a crucial aspect that needs attention in the reimplementation.&lt;br /&gt;
&lt;br /&gt;
== Planned Work ==&lt;br /&gt;
=== Functions to implement ===&lt;br /&gt;
'''Functionalities for Duties'''&lt;br /&gt;
*Create Action: Implement the functionality to add and persist new duties to the database.&lt;br /&gt;
*Edit Action: Develop the mechanism to modify existing duties, providing a form for editing duties.&lt;br /&gt;
*Update Action: Enhance the capability to update existing duties already stored in the database.&lt;br /&gt;
&lt;br /&gt;
'''Functionalities for Badges'''&lt;br /&gt;
*Create Action: Implement the creation process for new badges, utilizing user-provided parameters.&lt;br /&gt;
*Image Handling: Develop a mechanism to handle attached image files, ensuring their storage.&lt;br /&gt;
*Update Action: Enhance the functionality to update the image_name attribute associated with a badge instance, especially when an image is attached.&lt;br /&gt;
&lt;br /&gt;
=== Notes for Reimplementation ===&lt;br /&gt;
*Ensure that all interactions with the controllers adhere to API conventions, returning data in JSON format.&lt;br /&gt;
&lt;br /&gt;
*Thoroughly test all REST endpoints for both duties and badges, covering various scenarios to validate their functionality. Comprehensive testing should encompass both success and failure scenarios.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
=== Duties Controller ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 class Api::V1::DutiesController &amp;lt; ApplicationController&lt;br /&gt;
  before_action :set_duty, only: %i[ show update destroy ]&lt;br /&gt;
&lt;br /&gt;
'''index Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Retrieves all duties.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties&lt;br /&gt;
&lt;br /&gt;
Description: Fetches all duties from the database using the Duty.all method and renders a JSON response containing all duties.&lt;br /&gt;
  # GET /duties&lt;br /&gt;
  def index&lt;br /&gt;
    @duties = Duty.all&lt;br /&gt;
    render json: @duties, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''show Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Retrieves a specific duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties/:id&lt;br /&gt;
&lt;br /&gt;
Description: Finds a duty by its ID and renders a JSON response containing the specific duty&lt;br /&gt;
  # GET /duties/1&lt;br /&gt;
  def show&lt;br /&gt;
    render json: @duty, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''create Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Creates a new duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: POST&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties&lt;br /&gt;
&lt;br /&gt;
Description: Creates a new duty by instantiating a Duty object with the provided duty parameters from the request (duty_params).&lt;br /&gt;
  # POST /duties&lt;br /&gt;
  def create&lt;br /&gt;
    @duty = Duty.new(duty_params)&lt;br /&gt;
&lt;br /&gt;
    if @duty.save&lt;br /&gt;
      render json: @duty, status: :created, location: @duty&lt;br /&gt;
    else&lt;br /&gt;
      render json: @duty.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''update Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Updates an existing duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: PATCH/PUT&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties/:id&lt;br /&gt;
&lt;br /&gt;
Description: Updates an existing duty specified by its ID using the provided duty parameters from the request (duty_params). &lt;br /&gt;
  # PATCH/PUT /duties/1&lt;br /&gt;
  def update&lt;br /&gt;
    if @duty.update(duty_params)&lt;br /&gt;
      render json: @duty&lt;br /&gt;
    else&lt;br /&gt;
      render json: @duty.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''destroy Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Deletes a duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: DELETE&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties/:id&lt;br /&gt;
&lt;br /&gt;
Description: Finds a specific duty by its ID and destroys (deletes) it. It then renders a JSON response with a success message&lt;br /&gt;
  # DELETE /duties/1&lt;br /&gt;
  def destroy&lt;br /&gt;
    @duty.destroy&lt;br /&gt;
    render json: { message: &amp;quot;Duty was successfully destroyed.&amp;quot; }, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''set_duty Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
This method is used as a callback to set the @duty instance variable by finding the duty based on the :id parameter. It is used before the show, update, and destroy actions to set up the specific duty being operated on.&lt;br /&gt;
&lt;br /&gt;
  private&lt;br /&gt;
    # Use callbacks to share common setup or constraints between actions.&lt;br /&gt;
    def set_duty&lt;br /&gt;
      @duty = Duty.find(params[:id])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
'''duty_params Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
Filters the duty parameters received from the request, allowing only specific parameters (:name, :assignment_id, :max_members_for_duties) to be used for creating or updating a duty. It uses Rails' strong parameters for security.&lt;br /&gt;
&lt;br /&gt;
    # Only allow a list of trusted parameters through.&lt;br /&gt;
    def duty_params&lt;br /&gt;
      params.require(:duty).permit(:name, :assignment_id, :max_members_for_duties)&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
=== Badges Controller ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 class Api::V1::BadgesController &amp;lt; ApplicationController&lt;br /&gt;
  before_action :set_badge, only: %i[ show update destroy ]&lt;br /&gt;
&lt;br /&gt;
'''index Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges&lt;br /&gt;
&lt;br /&gt;
Functionality: Retrieves all badges.&lt;br /&gt;
&lt;br /&gt;
Description: Fetches all existing badges from the database using Badge.all and returns a JSON array containing all badge records.&lt;br /&gt;
&lt;br /&gt;
  # GET /badges&lt;br /&gt;
  def index&lt;br /&gt;
    @badges = Badge.all&lt;br /&gt;
    render json: @badges, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''show Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges/:id&lt;br /&gt;
&lt;br /&gt;
Functionality: Retrieves a specific badge.&lt;br /&gt;
&lt;br /&gt;
Description: Finds and retrieves a particular badge by its ID from the database. The method responds with a JSON object containing the details of the specific badge.&lt;br /&gt;
  # GET /badges/1&lt;br /&gt;
  def show&lt;br /&gt;
    render json: @badge, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''create Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: POST&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges&lt;br /&gt;
&lt;br /&gt;
Functionality: Creates a new badge.&lt;br /&gt;
&lt;br /&gt;
Description: Instantiates a new badge using the parameters provided in the request (badge_params).&lt;br /&gt;
  # POST /badges&lt;br /&gt;
  def create&lt;br /&gt;
    @badge = Badge.new(badge_params)&lt;br /&gt;
&lt;br /&gt;
    if @badge.save&lt;br /&gt;
      render json: @badge, status: :created, location: @badge&lt;br /&gt;
    else&lt;br /&gt;
      render json: @badge.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''update Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: PATCH/PUT&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges/:id&lt;br /&gt;
&lt;br /&gt;
Functionality: Updates an existing badge.&lt;br /&gt;
&lt;br /&gt;
Description: Modifies the attributes of an existing badge based on the parameters received in the request (badge_params).&lt;br /&gt;
  # PATCH/PUT /badges/1&lt;br /&gt;
  def update&lt;br /&gt;
    if @badge.update(badge_params)&lt;br /&gt;
      render json: @badge, status: :ok&lt;br /&gt;
    else&lt;br /&gt;
      render json: @badge.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''destroy Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: DELETE&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges/:id&lt;br /&gt;
&lt;br /&gt;
Functionality: Deletes a badge.&lt;br /&gt;
&lt;br /&gt;
Description: Locates a specific badge by its ID and removes it from the database. &lt;br /&gt;
  # DELETE /badges/1&lt;br /&gt;
  def destroy&lt;br /&gt;
    @badge.destroy&lt;br /&gt;
    render json: { message: 'Badge was successfully destroyed.'}, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''set_badge Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
Function: Sets up a specific badge for other actions.&lt;br /&gt;
&lt;br /&gt;
Description: A callback method that finds and assigns the @badge instance variable based on the :id parameter before executing the show, update, and destroy actions.&lt;br /&gt;
  private&lt;br /&gt;
    # Use callbacks to share common setup or constraints between actions.&lt;br /&gt;
    def set_badge&lt;br /&gt;
      @badge = Badge.find(params[:id])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
'''badge_params Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
Function: Filters and permits badge parameters for security.&lt;br /&gt;
&lt;br /&gt;
Description: Filters the badge parameters received in the request, allowing only specific parameters (:name, :description, :image_name, :image_file) to be utilized for creating or updating a badge. &lt;br /&gt;
    # Only allow a list of trusted parameters through.&lt;br /&gt;
    def badge_params&lt;br /&gt;
      params.require(:badge).permit(:name, :description, :image_name, :image_file)&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
'''&lt;br /&gt;
== Testing Methodology ==&lt;br /&gt;
During our reimplementation project, Postman was exclusively used for testing API endpoints. Postman allowed us to systematically test these endpoints, covering positive, negative, and edge cases.  We systematically tested various scenarios, ensuring that authorized access was granted when required and denied when not.&lt;br /&gt;
&lt;br /&gt;
In our testing process, we harnessed the power of Swagger UI to comprehensively evaluate the functionality and security of our API endpoints. Swagger UI provided an intuitive and interactive platform for sending various types of requests and scrutinizing responses. However, to ensure that the endpoints were secure, we implemented an authorization mechanism using a YAML file. This YAML file allowed us to generate tokens, particularly for the /login endpoint, which was pivotal in our authentication process. By leveraging Swagger UI a, we methodically tested the endpoints, covering a spectrum of scenarios, including positive and negative cases.&lt;br /&gt;
&lt;br /&gt;
=== Testing DutiesController ===&lt;br /&gt;
The DutiesController is responsible for managing duties in the application. Below is an outline of the RSpec tests applied to verify its functionality.&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scenario 1: Retrieving All Duties&lt;br /&gt;
&lt;br /&gt;
Verifies the retrieval of all duties when present in the database.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the correct JSON response containing all duties.&lt;br /&gt;
&lt;br /&gt;
 RSpec.describe Api::V1::DutiesController, type: :controller do&lt;br /&gt;
  describe &amp;quot;index&amp;quot; do&lt;br /&gt;
    it &amp;quot;returns all duties&amp;quot; do&lt;br /&gt;
      # Test scenario 1: When there are duties in the database&lt;br /&gt;
      # Expect the method to return all duties in JSON format&lt;br /&gt;
      duty1 = Duty.create(name: 'Duty 1')&lt;br /&gt;
      duty2 = Duty.create(name: 'Duty 2')&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include(&lt;br /&gt;
                                             { 'name' =&amp;gt; 'Duty 1' },&lt;br /&gt;
                                             { 'name' =&amp;gt; 'Duty 2' }&lt;br /&gt;
                                           )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario 2: No Duties in the Database&lt;br /&gt;
&lt;br /&gt;
Ensures the method returns an empty JSON array when no duties exist.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with an empty JSON array.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an empty JSON array when there are no duties&amp;quot; do&lt;br /&gt;
      # Test scenario 2: When there are no duties in the database&lt;br /&gt;
      # Expect the method to return an empty JSON array&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to eq([])&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Initializing a New Duty Object&lt;br /&gt;
&lt;br /&gt;
Validates the initialization of a new Duty object.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a new Duty object to be initialized.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#new&amp;quot; do&lt;br /&gt;
    context &amp;quot;when called&amp;quot; do&lt;br /&gt;
      it &amp;quot;initializes a new Duty object&amp;quot; do&lt;br /&gt;
        get :new&lt;br /&gt;
        expect(assigns(:duty)).to be_a_new(Duty)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      it &amp;quot;assigns the value of params[:id] to @id&amp;quot; do&lt;br /&gt;
        id = 123&lt;br /&gt;
        get :new, params: { id: id }&lt;br /&gt;
        expect(assigns(:id)).to eq(id)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Rendering a Duty as JSON&lt;br /&gt;
&lt;br /&gt;
Checks the rendering of a duty in JSON format.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the correct duty details in JSON.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#show&amp;quot; do&lt;br /&gt;
    context &amp;quot;when called&amp;quot; do&lt;br /&gt;
      it &amp;quot;renders the duty as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Test Duty')&lt;br /&gt;
        get :show, params: { id: duty.id }&lt;br /&gt;
        expect(response).to have_http_status(:ok)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Test Duty')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Rendering a Duty for Editing&lt;br /&gt;
&lt;br /&gt;
Tests the rendering of a duty for editing in JSON.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the correct duty details in JSON.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#edit&amp;quot; do&lt;br /&gt;
    context &amp;quot;when called&amp;quot; do&lt;br /&gt;
      it &amp;quot;renders the duty as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Test Duty')&lt;br /&gt;
        get :edit, params: { id: duty.id }&lt;br /&gt;
        expect(response).to have_http_status(:ok)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Test Duty')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Creating a New Duty&lt;br /&gt;
&lt;br /&gt;
Validates the creation of a new duty with valid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a 'created' status and the created duty data in the JSON response.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#create&amp;quot; do&lt;br /&gt;
    context &amp;quot;when duty params are valid&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new duty&amp;quot; do&lt;br /&gt;
        duty_params = { name: 'New Duty' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:created)&lt;br /&gt;
        expect(Duty.last.name).to eq('New Duty')&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Creating Duty&lt;br /&gt;
&lt;br /&gt;
Tests the scenario when invalid duty parameters are provided.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an 'unprocessable entity' status with an error message concerning the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
      it &amp;quot;returns a JSON response with the created duty and status code 201&amp;quot; do&lt;br /&gt;
        duty_params = { name: 'New Duty' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:created)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'New Duty')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when duty params are invalid&amp;quot; do&lt;br /&gt;
      it &amp;quot;does not create a new duty&amp;quot; do&lt;br /&gt;
        duty_params = { name: '' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
        expect(Duty.last).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      it &amp;quot;returns a JSON response with the error messages and status code 422&amp;quot; do&lt;br /&gt;
        duty_params = { name: '' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Successfully Updating Duty&lt;br /&gt;
&lt;br /&gt;
Verifies the successful update of an existing duty.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the updated duty data in JSON.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#update&amp;quot; do&lt;br /&gt;
    context &amp;quot;when duty is successfully updated&amp;quot; do&lt;br /&gt;
      it &amp;quot;returns the updated duty as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Old Duty')&lt;br /&gt;
        updated_name = 'Updated Duty'&lt;br /&gt;
        patch :update, params: { id: duty.id, duty: { name: updated_name } }&lt;br /&gt;
        expect(response).to have_http_status(:ok)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; updated_name)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Updating Duty&lt;br /&gt;
&lt;br /&gt;
Tests the scenario when an existing duty is updated with invalid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an 'unprocessable entity' status with an error message concerning the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when duty fails to update&amp;quot; do&lt;br /&gt;
      it &amp;quot;returns an error message as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Old Duty')&lt;br /&gt;
        patch :update, params: { id: duty.id, duty: { name: '' } }&lt;br /&gt;
        expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Destroying a Duty&lt;br /&gt;
&lt;br /&gt;
Validates the destruction of an existing duty.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and confirms the duty's destruction in the database.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#destroy&amp;quot; do&lt;br /&gt;
    it &amp;quot;destroys the duty&amp;quot; do&lt;br /&gt;
      duty = Duty.create(name: 'Duty to be Destroyed')&lt;br /&gt;
      delete :destroy, params: { id: duty.id }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(Duty.find_by(id: duty.id)).to be_nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Non-existent or Destroyed Duties&lt;br /&gt;
&lt;br /&gt;
Checks the response when attempting to destroy non-existent or already destroyed duties.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects 'not found' status or an 'unprocessable entity' status with corresponding error messages.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a non-existent duty&amp;quot; do&lt;br /&gt;
      delete :destroy, params: { id: 9999 } # Assuming 9999 is an invalid duty ID.&lt;br /&gt;
      expect(response).to have_http_status(:not_found)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('message' =&amp;gt; 'Duty not found')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a previously destroyed duty&amp;quot; do&lt;br /&gt;
      duty = Duty.create(name: 'Destroyed Duty')&lt;br /&gt;
      duty.destroy&lt;br /&gt;
      delete :destroy, params: { id: duty.id }&lt;br /&gt;
      expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('message' =&amp;gt; 'Duty already destroyed')&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Setting a Duty by ID&lt;br /&gt;
&lt;br /&gt;
Validates the setting of @duty based on a valid duty ID.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects @duty to match the duty with the provided ID.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#set_duty&amp;quot; do&lt;br /&gt;
    context &amp;quot;when a valid duty id is provided&amp;quot; do&lt;br /&gt;
      it &amp;quot;sets @duty to the duty with the provided id&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Test Duty')&lt;br /&gt;
        get :show, params: { id: duty.id }&lt;br /&gt;
        expect(assigns(:duty)).to eq(duty)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Invalid Duty ID&lt;br /&gt;
&lt;br /&gt;
Checks for error handling when an invalid duty ID is provided.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an error raising ActiveRecord::RecordNotFound.&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when an invalid duty id is provided&amp;quot; do&lt;br /&gt;
      it &amp;quot;does not set @duty and raises an error&amp;quot; do&lt;br /&gt;
        expect { get :show, params: { id: 9999 } }.to raise_error(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Valid and Missing Parameters&lt;br /&gt;
&lt;br /&gt;
Ensures the return of permitted parameters for a duty object.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects permitted parameters for a valid duty and error raises for missing parameters.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#duty_params&amp;quot; do&lt;br /&gt;
    context &amp;quot;when valid parameters are provided&amp;quot; do&lt;br /&gt;
      it &amp;quot;returns the permitted parameters for duty&amp;quot; do&lt;br /&gt;
        valid_params = { name: 'Valid Duty', assignment_id: 1, max_members_for_duties: 5 }&lt;br /&gt;
        duty = Duty.new(valid_params)&lt;br /&gt;
        duty_params = controller.send(:duty_params, duty)&lt;br /&gt;
        expect(duty_params).to eq(valid_params)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when assignment_id is missing&amp;quot; do&lt;br /&gt;
      it &amp;quot;raises an error&amp;quot; do&lt;br /&gt;
        invalid_params = { name: 'Invalid Duty', max_members_for_duties: 5 }&lt;br /&gt;
        duty = Duty.new(invalid_params)&lt;br /&gt;
        expect { controller.send(:duty_params, duty) }.to raise_error(ActionController::ParameterMissing)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when max_members_for_duty is missing&amp;quot; do&lt;br /&gt;
      it &amp;quot;raises an error&amp;quot; do&lt;br /&gt;
        invalid_params = { name: 'Invalid Duty', assignment_id: 1 }&lt;br /&gt;
        duty = Duty.new(invalid_params)&lt;br /&gt;
        expect { controller.send(:duty_params, duty) }.to raise_error(ActionController::ParameterMissing)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context &amp;quot;when name is missing&amp;quot; do&lt;br /&gt;
        it &amp;quot;raises an error&amp;quot; do&lt;br /&gt;
          invalid_params = { assignment_id: 1, max_members_for_duties: 5 }&lt;br /&gt;
          duty = Duty.new(invalid_params)&lt;br /&gt;
          expect { controller.send(:duty_params, duty) }.to raise_error(ActionController::ParameterMissing)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
=== Testing BadgesController ===&lt;br /&gt;
The BadgesController is a crucial component that handles the CRUD operations for managing badges in the application. To ensure its functionalities are reliable and error-free, comprehensive testing has been implemented using RSpec.&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scenario: Retrieving All Badges&lt;br /&gt;
&lt;br /&gt;
Verifies that the controller returns all badges when the database is empty.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expect an OK status with an empty JSON response.&lt;br /&gt;
&lt;br /&gt;
 RSpec.describe Api::V1::BadgesController, type: :controller do&lt;br /&gt;
  describe &amp;quot;index&amp;quot; do&lt;br /&gt;
    it &amp;quot;returns all badges&amp;quot; do&lt;br /&gt;
      # Test scenario: When there are no badges in the database initially.&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to eq([]) # Use JSON.parse for comparing JSON responses.&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Retrieving Badges&lt;br /&gt;
&lt;br /&gt;
Simulates an error in retrieving badges.&lt;br /&gt;
&lt;br /&gt;
Expectation: The response status should indicate an error.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns a successful response status&amp;quot; do&lt;br /&gt;
      # Test scenario: When there is an error in retrieving badges.&lt;br /&gt;
      # Expected behavior: The response status should indicate an error.&lt;br /&gt;
      allow(Badge).to receive(:all).and_raise(StandardError, 'Database connection error')&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:error) # Adjust this to the actual error status code.&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Valid Badge Request&lt;br /&gt;
&lt;br /&gt;
Ensures the controller returns a specific badge based on a valid ID.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and the correct badge data.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;show&amp;quot; do&lt;br /&gt;
    it &amp;quot;returns a specific badge&amp;quot; do&lt;br /&gt;
      # Test scenario: When a badge with a valid ID is requested.&lt;br /&gt;
      badge = Badge.create(name: 'Test Badge')&lt;br /&gt;
      get :show, params: { id: badge.id }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Test Badge')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Invalid Badge Request&lt;br /&gt;
&lt;br /&gt;
Tests when a non-existent badge is requested.&lt;br /&gt;
&lt;br /&gt;
Expectation: The response should be successful with an empty JSON body.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a non-existent badge&amp;quot; do&lt;br /&gt;
      # Test scenario: When a badge with an invalid ID is requested.&lt;br /&gt;
      get :show, params: { id: 9999 } # Assuming 9999 is an invalid badge ID.&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to be_empty&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Creating a New Badge&lt;br /&gt;
&lt;br /&gt;
Validates the creation of a new badge with valid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a 'created' status and the created badge data in the JSON response.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;create&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Creating a new badge with valid parameters.&lt;br /&gt;
      post :create, params: { badge: { name: 'New Badge' } }&lt;br /&gt;
      expect(response).to have_http_status(:created)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'New Badge')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Creating Badge&lt;br /&gt;
&lt;br /&gt;
Tests the scenario when invalid badge parameters are provided (e.g., empty name).&lt;br /&gt;
&lt;br /&gt;
Expectation: The response should have an 'unprocessable entity' status with an error message regarding the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for invalid badge parameters&amp;quot; do&lt;br /&gt;
      # Test scenario: Creating a new badge with invalid parameters (empty name).&lt;br /&gt;
      post :create, params: { badge: { name: '' } }&lt;br /&gt;
      expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Updating an Existing Badge&lt;br /&gt;
&lt;br /&gt;
Verifies the update process of an existing badge with valid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and the updated badge data.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;update&amp;quot; do&lt;br /&gt;
    it &amp;quot;updates an existing badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Updating an existing badge with valid parameters.&lt;br /&gt;
      badge = Badge.create(name: 'Old Badge')&lt;br /&gt;
      patch :update, params: { id: badge.id, badge: { name: 'Updated Badge' } }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Updated Badge')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Updating Badge&lt;br /&gt;
&lt;br /&gt;
Tests updating an existing badge with invalid parameters (e.g., empty name).&lt;br /&gt;
&lt;br /&gt;
Expectation: The response should have an 'unprocessable entity' status with an error message concerning the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for invalid badge parameters&amp;quot; do&lt;br /&gt;
      # Test scenario: Updating an existing badge with invalid parameters (empty name).&lt;br /&gt;
      badge = Badge.create(name: 'Old Badge')&lt;br /&gt;
      patch :update, params: { id: badge.id, badge: { name: '' } }&lt;br /&gt;
      expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Destroying an Existing Badge&lt;br /&gt;
&lt;br /&gt;
Validates the destruction of an existing badge.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and a success message confirming the badge's destruction.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;destroy&amp;quot; do&lt;br /&gt;
    it &amp;quot;destroys an existing badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Destroying an existing badge.&lt;br /&gt;
      badge = Badge.create(name: 'Badge to be Destroyed')&lt;br /&gt;
      delete :destroy, params: { id: badge.id }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('message' =&amp;gt; 'Badge was successfully destroyed.')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Attempting to Destroy Non-existent Badge&lt;br /&gt;
&lt;br /&gt;
Simulates attempting to delete a non-existent badge.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a 'not found' status for the non-existent badge.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a non-existent badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Attempting to destroy a non-existent badge.&lt;br /&gt;
      delete :destroy, params: { id: 9999 } # Assuming 9999 is an invalid badge ID.&lt;br /&gt;
      expect(response).to have_http_status(:not_found)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
In conclusion, the reimplementation project for the Duties and Badges modules within Expertiza holds significant importance in aligning the existing functionalities with API standards and rectifying the deficiencies identified in the previous implementation.&lt;br /&gt;
&lt;br /&gt;
The Duties module, managed by the duties_controller.rb, plays a pivotal role in handling duties' creation, editing, and deletion within the system. Likewise, the Badges module, governed by the badges_controller.rb, oversees the creation and management of badges, including the handling of image files.&lt;br /&gt;
&lt;br /&gt;
The prior implementation's primary shortcomings revolved around treating the system as a traditional Rails MVC application rather than as a Rails API. This resulted in non-compliance with API standards in handling requests and responses, which this reimplementation aims to rectify. Additionally, the inadequacy of testing procedures highlighted the necessity for a comprehensive testing suite covering various scenarios to ensure the robustness and reliability of the system.&lt;br /&gt;
&lt;br /&gt;
The planned work includes adhering strictly to API-style interactions, returning data in JSON format, and implementing thorough testing for all REST endpoints, ensuring the functionalities for both Duties and Badges are rigorously verified across success and failure scenarios.&lt;br /&gt;
&lt;br /&gt;
By addressing these issues and meticulously implementing the planned functionalities, this reimplementation aims to enhance the system's efficiency, robustness, and adherence to API conventions, ensuring a more reliable and scalable platform for managing duties and badges within Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-back-end&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-back-end/pull/51&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishab Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2369._Reimplement_duties_controller.rb_and_badges_controller.rb&amp;diff=151247</id>
		<title>CSC/ECE 517 Fall 2023 - E2369. Reimplement duties controller.rb and badges controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2369._Reimplement_duties_controller.rb_and_badges_controller.rb&amp;diff=151247"/>
		<updated>2023-11-07T03:52:20Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Testing BadgesController */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Topic Overview &amp;amp; Prior Work ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
'''duties_controller.rb'''&lt;br /&gt;
&lt;br /&gt;
The actions defined by this duties_controller include create, update, and remove. The new duty is saved to the database using the create action. The update action is used to update the duty in the database, while the edit action renders the form for editing an existing duty. Lastly, a duty can be removed from the database by using the delete action. All things considered, Expertiza's Duties module aids in the management of duties.&lt;br /&gt;
&lt;br /&gt;
'''badges_controller.rb'''&lt;br /&gt;
&lt;br /&gt;
A new Badge instance is created by the controller using the user-supplied parameters through the use of the create action. If an image file is attached, it additionally saves it and modifies the badge instance's image_name attribute. &lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
&lt;br /&gt;
The prior implementation of the duties and badges controllers was based on a Rails MVC application rather than strictly as an API built on Rails. The handling of requests and responses did not align with the API architecture, thus needing adjustments to ensure a more suitable API-style communication. Furthermore, the previous implementation lacked comprehensive testing, a crucial aspect that needs attention in the reimplementation.&lt;br /&gt;
&lt;br /&gt;
== Planned Work ==&lt;br /&gt;
=== Functions to implement ===&lt;br /&gt;
'''Functionalities for Duties'''&lt;br /&gt;
*Create Action: Implement the functionality to add and persist new duties to the database.&lt;br /&gt;
*Edit Action: Develop the mechanism to modify existing duties, providing a form for editing duties.&lt;br /&gt;
*Update Action: Enhance the capability to update existing duties already stored in the database.&lt;br /&gt;
&lt;br /&gt;
'''Functionalities for Badges'''&lt;br /&gt;
*Create Action: Implement the creation process for new badges, utilizing user-provided parameters.&lt;br /&gt;
*Image Handling: Develop a mechanism to handle attached image files, ensuring their storage.&lt;br /&gt;
*Update Action: Enhance the functionality to update the image_name attribute associated with a badge instance, especially when an image is attached.&lt;br /&gt;
&lt;br /&gt;
=== Notes for Reimplementation ===&lt;br /&gt;
*Ensure that all interactions with the controllers adhere to API conventions, returning data in JSON format.&lt;br /&gt;
&lt;br /&gt;
*Thoroughly test all REST endpoints for both duties and badges, covering various scenarios to validate their functionality. Comprehensive testing should encompass both success and failure scenarios.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
=== Duties Controller ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 class Api::V1::DutiesController &amp;lt; ApplicationController&lt;br /&gt;
  before_action :set_duty, only: %i[ show update destroy ]&lt;br /&gt;
&lt;br /&gt;
'''index Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Retrieves all duties.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties&lt;br /&gt;
&lt;br /&gt;
Description: Fetches all duties from the database using the Duty.all method and renders a JSON response containing all duties.&lt;br /&gt;
  # GET /duties&lt;br /&gt;
  def index&lt;br /&gt;
    @duties = Duty.all&lt;br /&gt;
    render json: @duties, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''show Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Retrieves a specific duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties/:id&lt;br /&gt;
&lt;br /&gt;
Description: Finds a duty by its ID and renders a JSON response containing the specific duty&lt;br /&gt;
  # GET /duties/1&lt;br /&gt;
  def show&lt;br /&gt;
    render json: @duty, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''create Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Creates a new duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: POST&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties&lt;br /&gt;
&lt;br /&gt;
Description: Creates a new duty by instantiating a Duty object with the provided duty parameters from the request (duty_params).&lt;br /&gt;
  # POST /duties&lt;br /&gt;
  def create&lt;br /&gt;
    @duty = Duty.new(duty_params)&lt;br /&gt;
&lt;br /&gt;
    if @duty.save&lt;br /&gt;
      render json: @duty, status: :created, location: @duty&lt;br /&gt;
    else&lt;br /&gt;
      render json: @duty.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''update Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Updates an existing duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: PATCH/PUT&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties/:id&lt;br /&gt;
&lt;br /&gt;
Description: Updates an existing duty specified by its ID using the provided duty parameters from the request (duty_params). &lt;br /&gt;
  # PATCH/PUT /duties/1&lt;br /&gt;
  def update&lt;br /&gt;
    if @duty.update(duty_params)&lt;br /&gt;
      render json: @duty&lt;br /&gt;
    else&lt;br /&gt;
      render json: @duty.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''destroy Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Deletes a duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: DELETE&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties/:id&lt;br /&gt;
&lt;br /&gt;
Description: Finds a specific duty by its ID and destroys (deletes) it. It then renders a JSON response with a success message&lt;br /&gt;
  # DELETE /duties/1&lt;br /&gt;
  def destroy&lt;br /&gt;
    @duty.destroy&lt;br /&gt;
    render json: { message: &amp;quot;Duty was successfully destroyed.&amp;quot; }, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''set_duty Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
This method is used as a callback to set the @duty instance variable by finding the duty based on the :id parameter. It is used before the show, update, and destroy actions to set up the specific duty being operated on.&lt;br /&gt;
&lt;br /&gt;
  private&lt;br /&gt;
    # Use callbacks to share common setup or constraints between actions.&lt;br /&gt;
    def set_duty&lt;br /&gt;
      @duty = Duty.find(params[:id])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
'''duty_params Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
Filters the duty parameters received from the request, allowing only specific parameters (:name, :assignment_id, :max_members_for_duties) to be used for creating or updating a duty. It uses Rails' strong parameters for security.&lt;br /&gt;
&lt;br /&gt;
    # Only allow a list of trusted parameters through.&lt;br /&gt;
    def duty_params&lt;br /&gt;
      params.require(:duty).permit(:name, :assignment_id, :max_members_for_duties)&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
=== Badges Controller ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 class Api::V1::BadgesController &amp;lt; ApplicationController&lt;br /&gt;
  before_action :set_badge, only: %i[ show update destroy ]&lt;br /&gt;
&lt;br /&gt;
'''index Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges&lt;br /&gt;
&lt;br /&gt;
Functionality: Retrieves all badges.&lt;br /&gt;
&lt;br /&gt;
Description: Fetches all existing badges from the database using Badge.all and returns a JSON array containing all badge records.&lt;br /&gt;
&lt;br /&gt;
  # GET /badges&lt;br /&gt;
  def index&lt;br /&gt;
    @badges = Badge.all&lt;br /&gt;
    render json: @badges, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''show Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges/:id&lt;br /&gt;
&lt;br /&gt;
Functionality: Retrieves a specific badge.&lt;br /&gt;
&lt;br /&gt;
Description: Finds and retrieves a particular badge by its ID from the database. The method responds with a JSON object containing the details of the specific badge.&lt;br /&gt;
  # GET /badges/1&lt;br /&gt;
  def show&lt;br /&gt;
    render json: @badge, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''create Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: POST&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges&lt;br /&gt;
&lt;br /&gt;
Functionality: Creates a new badge.&lt;br /&gt;
&lt;br /&gt;
Description: Instantiates a new badge using the parameters provided in the request (badge_params).&lt;br /&gt;
  # POST /badges&lt;br /&gt;
  def create&lt;br /&gt;
    @badge = Badge.new(badge_params)&lt;br /&gt;
&lt;br /&gt;
    if @badge.save&lt;br /&gt;
      render json: @badge, status: :created, location: @badge&lt;br /&gt;
    else&lt;br /&gt;
      render json: @badge.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''update Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: PATCH/PUT&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges/:id&lt;br /&gt;
&lt;br /&gt;
Functionality: Updates an existing badge.&lt;br /&gt;
&lt;br /&gt;
Description: Modifies the attributes of an existing badge based on the parameters received in the request (badge_params).&lt;br /&gt;
  # PATCH/PUT /badges/1&lt;br /&gt;
  def update&lt;br /&gt;
    if @badge.update(badge_params)&lt;br /&gt;
      render json: @badge, status: :ok&lt;br /&gt;
    else&lt;br /&gt;
      render json: @badge.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''destroy Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: DELETE&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges/:id&lt;br /&gt;
&lt;br /&gt;
Functionality: Deletes a badge.&lt;br /&gt;
&lt;br /&gt;
Description: Locates a specific badge by its ID and removes it from the database. &lt;br /&gt;
  # DELETE /badges/1&lt;br /&gt;
  def destroy&lt;br /&gt;
    @badge.destroy&lt;br /&gt;
    render json: { message: 'Badge was successfully destroyed.'}, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''set_badge Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
Function: Sets up a specific badge for other actions.&lt;br /&gt;
&lt;br /&gt;
Description: A callback method that finds and assigns the @badge instance variable based on the :id parameter before executing the show, update, and destroy actions.&lt;br /&gt;
  private&lt;br /&gt;
    # Use callbacks to share common setup or constraints between actions.&lt;br /&gt;
    def set_badge&lt;br /&gt;
      @badge = Badge.find(params[:id])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
'''badge_params Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
Function: Filters and permits badge parameters for security.&lt;br /&gt;
&lt;br /&gt;
Description: Filters the badge parameters received in the request, allowing only specific parameters (:name, :description, :image_name, :image_file) to be utilized for creating or updating a badge. &lt;br /&gt;
    # Only allow a list of trusted parameters through.&lt;br /&gt;
    def badge_params&lt;br /&gt;
      params.require(:badge).permit(:name, :description, :image_name, :image_file)&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
'''&lt;br /&gt;
== Testing Methodology ==&lt;br /&gt;
During our reimplementation project, Postman was exclusively used for testing API endpoints. Postman allowed us to systematically test these endpoints, covering positive, negative, and edge cases.  We systematically tested various scenarios, ensuring that authorized access was granted when required and denied when not.&lt;br /&gt;
&lt;br /&gt;
In our testing process, we harnessed the power of Swagger UI to comprehensively evaluate the functionality and security of our API endpoints. Swagger UI provided an intuitive and interactive platform for sending various types of requests and scrutinizing responses. However, to ensure that the endpoints were secure, we implemented an authorization mechanism using a YAML file. This YAML file allowed us to generate tokens, particularly for the /login endpoint, which was pivotal in our authentication process. By leveraging Swagger UI a, we methodically tested the endpoints, covering a spectrum of scenarios, including positive and negative cases.&lt;br /&gt;
&lt;br /&gt;
=== Testing DutiesController ===&lt;br /&gt;
The DutiesController is responsible for managing duties in the application. Below is an outline of the RSpec tests applied to verify its functionality.&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scenario 1: Retrieving All Duties&lt;br /&gt;
&lt;br /&gt;
Verifies the retrieval of all duties when present in the database.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the correct JSON response containing all duties.&lt;br /&gt;
&lt;br /&gt;
 RSpec.describe Api::V1::DutiesController, type: :controller do&lt;br /&gt;
  describe &amp;quot;index&amp;quot; do&lt;br /&gt;
    it &amp;quot;returns all duties&amp;quot; do&lt;br /&gt;
      # Test scenario 1: When there are duties in the database&lt;br /&gt;
      # Expect the method to return all duties in JSON format&lt;br /&gt;
      duty1 = Duty.create(name: 'Duty 1')&lt;br /&gt;
      duty2 = Duty.create(name: 'Duty 2')&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include(&lt;br /&gt;
                                             { 'name' =&amp;gt; 'Duty 1' },&lt;br /&gt;
                                             { 'name' =&amp;gt; 'Duty 2' }&lt;br /&gt;
                                           )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario 2: No Duties in the Database&lt;br /&gt;
&lt;br /&gt;
Ensures the method returns an empty JSON array when no duties exist.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with an empty JSON array.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an empty JSON array when there are no duties&amp;quot; do&lt;br /&gt;
      # Test scenario 2: When there are no duties in the database&lt;br /&gt;
      # Expect the method to return an empty JSON array&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to eq([])&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Initializing a New Duty Object&lt;br /&gt;
&lt;br /&gt;
Validates the initialization of a new Duty object.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a new Duty object to be initialized.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#new&amp;quot; do&lt;br /&gt;
    context &amp;quot;when called&amp;quot; do&lt;br /&gt;
      it &amp;quot;initializes a new Duty object&amp;quot; do&lt;br /&gt;
        get :new&lt;br /&gt;
        expect(assigns(:duty)).to be_a_new(Duty)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      it &amp;quot;assigns the value of params[:id] to @id&amp;quot; do&lt;br /&gt;
        id = 123&lt;br /&gt;
        get :new, params: { id: id }&lt;br /&gt;
        expect(assigns(:id)).to eq(id)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Rendering a Duty as JSON&lt;br /&gt;
&lt;br /&gt;
Checks the rendering of a duty in JSON format.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the correct duty details in JSON.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#show&amp;quot; do&lt;br /&gt;
    context &amp;quot;when called&amp;quot; do&lt;br /&gt;
      it &amp;quot;renders the duty as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Test Duty')&lt;br /&gt;
        get :show, params: { id: duty.id }&lt;br /&gt;
        expect(response).to have_http_status(:ok)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Test Duty')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Rendering a Duty for Editing&lt;br /&gt;
&lt;br /&gt;
Tests the rendering of a duty for editing in JSON.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the correct duty details in JSON.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#edit&amp;quot; do&lt;br /&gt;
    context &amp;quot;when called&amp;quot; do&lt;br /&gt;
      it &amp;quot;renders the duty as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Test Duty')&lt;br /&gt;
        get :edit, params: { id: duty.id }&lt;br /&gt;
        expect(response).to have_http_status(:ok)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Test Duty')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Creating a New Duty&lt;br /&gt;
&lt;br /&gt;
Validates the creation of a new duty with valid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a 'created' status and the created duty data in the JSON response.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#create&amp;quot; do&lt;br /&gt;
    context &amp;quot;when duty params are valid&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new duty&amp;quot; do&lt;br /&gt;
        duty_params = { name: 'New Duty' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:created)&lt;br /&gt;
        expect(Duty.last.name).to eq('New Duty')&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Creating Duty&lt;br /&gt;
&lt;br /&gt;
Tests the scenario when invalid duty parameters are provided.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an 'unprocessable entity' status with an error message concerning the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
      it &amp;quot;returns a JSON response with the created duty and status code 201&amp;quot; do&lt;br /&gt;
        duty_params = { name: 'New Duty' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:created)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'New Duty')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when duty params are invalid&amp;quot; do&lt;br /&gt;
      it &amp;quot;does not create a new duty&amp;quot; do&lt;br /&gt;
        duty_params = { name: '' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
        expect(Duty.last).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      it &amp;quot;returns a JSON response with the error messages and status code 422&amp;quot; do&lt;br /&gt;
        duty_params = { name: '' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Successfully Updating Duty&lt;br /&gt;
&lt;br /&gt;
Verifies the successful update of an existing duty.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the updated duty data in JSON.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#update&amp;quot; do&lt;br /&gt;
    context &amp;quot;when duty is successfully updated&amp;quot; do&lt;br /&gt;
      it &amp;quot;returns the updated duty as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Old Duty')&lt;br /&gt;
        updated_name = 'Updated Duty'&lt;br /&gt;
        patch :update, params: { id: duty.id, duty: { name: updated_name } }&lt;br /&gt;
        expect(response).to have_http_status(:ok)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; updated_name)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Updating Duty&lt;br /&gt;
&lt;br /&gt;
Tests the scenario when an existing duty is updated with invalid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an 'unprocessable entity' status with an error message concerning the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when duty fails to update&amp;quot; do&lt;br /&gt;
      it &amp;quot;returns an error message as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Old Duty')&lt;br /&gt;
        patch :update, params: { id: duty.id, duty: { name: '' } }&lt;br /&gt;
        expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Destroying a Duty&lt;br /&gt;
&lt;br /&gt;
Validates the destruction of an existing duty.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and confirms the duty's destruction in the database.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#destroy&amp;quot; do&lt;br /&gt;
    it &amp;quot;destroys the duty&amp;quot; do&lt;br /&gt;
      duty = Duty.create(name: 'Duty to be Destroyed')&lt;br /&gt;
      delete :destroy, params: { id: duty.id }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(Duty.find_by(id: duty.id)).to be_nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Non-existent or Destroyed Duties&lt;br /&gt;
&lt;br /&gt;
Checks the response when attempting to destroy non-existent or already destroyed duties.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects 'not found' status or an 'unprocessable entity' status with corresponding error messages.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a non-existent duty&amp;quot; do&lt;br /&gt;
      delete :destroy, params: { id: 9999 } # Assuming 9999 is an invalid duty ID.&lt;br /&gt;
      expect(response).to have_http_status(:not_found)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('message' =&amp;gt; 'Duty not found')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a previously destroyed duty&amp;quot; do&lt;br /&gt;
      duty = Duty.create(name: 'Destroyed Duty')&lt;br /&gt;
      duty.destroy&lt;br /&gt;
      delete :destroy, params: { id: duty.id }&lt;br /&gt;
      expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('message' =&amp;gt; 'Duty already destroyed')&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Setting a Duty by ID&lt;br /&gt;
&lt;br /&gt;
Validates the setting of @duty based on a valid duty ID.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects @duty to match the duty with the provided ID.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#set_duty&amp;quot; do&lt;br /&gt;
    context &amp;quot;when a valid duty id is provided&amp;quot; do&lt;br /&gt;
      it &amp;quot;sets @duty to the duty with the provided id&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Test Duty')&lt;br /&gt;
        get :show, params: { id: duty.id }&lt;br /&gt;
        expect(assigns(:duty)).to eq(duty)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Invalid Duty ID&lt;br /&gt;
&lt;br /&gt;
Checks for error handling when an invalid duty ID is provided.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an error raising ActiveRecord::RecordNotFound.&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when an invalid duty id is provided&amp;quot; do&lt;br /&gt;
      it &amp;quot;does not set @duty and raises an error&amp;quot; do&lt;br /&gt;
        expect { get :show, params: { id: 9999 } }.to raise_error(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Valid and Missing Parameters&lt;br /&gt;
&lt;br /&gt;
Ensures the return of permitted parameters for a duty object.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects permitted parameters for a valid duty and error raises for missing parameters.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#duty_params&amp;quot; do&lt;br /&gt;
    context &amp;quot;when valid parameters are provided&amp;quot; do&lt;br /&gt;
      it &amp;quot;returns the permitted parameters for duty&amp;quot; do&lt;br /&gt;
        valid_params = { name: 'Valid Duty', assignment_id: 1, max_members_for_duties: 5 }&lt;br /&gt;
        duty = Duty.new(valid_params)&lt;br /&gt;
        duty_params = controller.send(:duty_params, duty)&lt;br /&gt;
        expect(duty_params).to eq(valid_params)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when assignment_id is missing&amp;quot; do&lt;br /&gt;
      it &amp;quot;raises an error&amp;quot; do&lt;br /&gt;
        invalid_params = { name: 'Invalid Duty', max_members_for_duties: 5 }&lt;br /&gt;
        duty = Duty.new(invalid_params)&lt;br /&gt;
        expect { controller.send(:duty_params, duty) }.to raise_error(ActionController::ParameterMissing)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when max_members_for_duty is missing&amp;quot; do&lt;br /&gt;
      it &amp;quot;raises an error&amp;quot; do&lt;br /&gt;
        invalid_params = { name: 'Invalid Duty', assignment_id: 1 }&lt;br /&gt;
        duty = Duty.new(invalid_params)&lt;br /&gt;
        expect { controller.send(:duty_params, duty) }.to raise_error(ActionController::ParameterMissing)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context &amp;quot;when name is missing&amp;quot; do&lt;br /&gt;
        it &amp;quot;raises an error&amp;quot; do&lt;br /&gt;
          invalid_params = { assignment_id: 1, max_members_for_duties: 5 }&lt;br /&gt;
          duty = Duty.new(invalid_params)&lt;br /&gt;
          expect { controller.send(:duty_params, duty) }.to raise_error(ActionController::ParameterMissing)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
=== Testing BadgesController ===&lt;br /&gt;
The BadgesController is a crucial component that handles the CRUD operations for managing badges in the application. To ensure its functionalities are reliable and error-free, comprehensive testing has been implemented using RSpec.&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scenario: Retrieving All Badges&lt;br /&gt;
&lt;br /&gt;
Verifies that the controller returns all badges when the database is empty.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expect an OK status with an empty JSON response.&lt;br /&gt;
&lt;br /&gt;
 RSpec.describe Api::V1::BadgesController, type: :controller do&lt;br /&gt;
  describe &amp;quot;index&amp;quot; do&lt;br /&gt;
    it &amp;quot;returns all badges&amp;quot; do&lt;br /&gt;
      # Test scenario: When there are no badges in the database initially.&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to eq([]) # Use JSON.parse for comparing JSON responses.&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Retrieving Badges&lt;br /&gt;
&lt;br /&gt;
Simulates an error in retrieving badges.&lt;br /&gt;
&lt;br /&gt;
Expectation: The response status should indicate an error.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns a successful response status&amp;quot; do&lt;br /&gt;
      # Test scenario: When there is an error in retrieving badges.&lt;br /&gt;
      # Expected behavior: The response status should indicate an error.&lt;br /&gt;
      allow(Badge).to receive(:all).and_raise(StandardError, 'Database connection error')&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:error) # Adjust this to the actual error status code.&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Valid Badge Request&lt;br /&gt;
&lt;br /&gt;
Ensures the controller returns a specific badge based on a valid ID.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and the correct badge data.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;show&amp;quot; do&lt;br /&gt;
    it &amp;quot;returns a specific badge&amp;quot; do&lt;br /&gt;
      # Test scenario: When a badge with a valid ID is requested.&lt;br /&gt;
      badge = Badge.create(name: 'Test Badge')&lt;br /&gt;
      get :show, params: { id: badge.id }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Test Badge')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Invalid Badge Request&lt;br /&gt;
&lt;br /&gt;
Tests when a non-existent badge is requested.&lt;br /&gt;
&lt;br /&gt;
Expectation: The response should be successful with an empty JSON body.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a non-existent badge&amp;quot; do&lt;br /&gt;
      # Test scenario: When a badge with an invalid ID is requested.&lt;br /&gt;
      get :show, params: { id: 9999 } # Assuming 9999 is an invalid badge ID.&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to be_empty&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Creating a New Badge&lt;br /&gt;
&lt;br /&gt;
Validates the creation of a new badge with valid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a 'created' status and the created badge data in the JSON response.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;create&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Creating a new badge with valid parameters.&lt;br /&gt;
      post :create, params: { badge: { name: 'New Badge' } }&lt;br /&gt;
      expect(response).to have_http_status(:created)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'New Badge')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Creating Badge&lt;br /&gt;
&lt;br /&gt;
Tests the scenario when invalid badge parameters are provided (e.g., empty name).&lt;br /&gt;
&lt;br /&gt;
Expectation: The response should have an 'unprocessable entity' status with an error message regarding the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for invalid badge parameters&amp;quot; do&lt;br /&gt;
      # Test scenario: Creating a new badge with invalid parameters (empty name).&lt;br /&gt;
      post :create, params: { badge: { name: '' } }&lt;br /&gt;
      expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Updating an Existing Badge&lt;br /&gt;
&lt;br /&gt;
Verifies the update process of an existing badge with valid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and the updated badge data.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;update&amp;quot; do&lt;br /&gt;
    it &amp;quot;updates an existing badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Updating an existing badge with valid parameters.&lt;br /&gt;
      badge = Badge.create(name: 'Old Badge')&lt;br /&gt;
      patch :update, params: { id: badge.id, badge: { name: 'Updated Badge' } }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Updated Badge')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Updating Badge&lt;br /&gt;
&lt;br /&gt;
Tests updating an existing badge with invalid parameters (e.g., empty name).&lt;br /&gt;
&lt;br /&gt;
Expectation: The response should have an 'unprocessable entity' status with an error message concerning the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for invalid badge parameters&amp;quot; do&lt;br /&gt;
      # Test scenario: Updating an existing badge with invalid parameters (empty name).&lt;br /&gt;
      badge = Badge.create(name: 'Old Badge')&lt;br /&gt;
      patch :update, params: { id: badge.id, badge: { name: '' } }&lt;br /&gt;
      expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Destroying an Existing Badge&lt;br /&gt;
&lt;br /&gt;
Validates the destruction of an existing badge.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and a success message confirming the badge's destruction.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;destroy&amp;quot; do&lt;br /&gt;
    it &amp;quot;destroys an existing badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Destroying an existing badge.&lt;br /&gt;
      badge = Badge.create(name: 'Badge to be Destroyed')&lt;br /&gt;
      delete :destroy, params: { id: badge.id }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('message' =&amp;gt; 'Badge was successfully destroyed.')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Attempting to Destroy Non-existent Badge&lt;br /&gt;
&lt;br /&gt;
Simulates attempting to delete a non-existent badge.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a 'not found' status for the non-existent badge.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a non-existent badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Attempting to destroy a non-existent badge.&lt;br /&gt;
      delete :destroy, params: { id: 9999 } # Assuming 9999 is an invalid badge ID.&lt;br /&gt;
      expect(response).to have_http_status(:not_found)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
In conclusion, the reimplementation project for the Duties and Badges modules within Expertiza holds significant importance in aligning the existing functionalities with API standards and rectifying the deficiencies identified in the previous implementation.&lt;br /&gt;
&lt;br /&gt;
The Duties module, managed by the duties_controller.rb, plays a pivotal role in handling duties' creation, editing, and deletion within the system. Likewise, the Badges module, governed by the badges_controller.rb, oversees the creation and management of badges, including the handling of image files.&lt;br /&gt;
&lt;br /&gt;
The prior implementation's primary shortcomings revolved around treating the system as a traditional Rails MVC application rather than as a Rails API. This resulted in non-compliance with API standards in handling requests and responses, which this reimplementation aims to rectify. Additionally, the inadequacy of testing procedures highlighted the necessity for a comprehensive testing suite covering various scenarios to ensure the robustness and reliability of the system.&lt;br /&gt;
&lt;br /&gt;
The planned work includes adhering strictly to API-style interactions, returning data in JSON format, and implementing thorough testing for all REST endpoints, ensuring the functionalities for both Duties and Badges are rigorously verified across success and failure scenarios.&lt;br /&gt;
&lt;br /&gt;
By addressing these issues and meticulously implementing the planned functionalities, this reimplementation aims to enhance the system's efficiency, robustness, and adherence to API conventions, ensuring a more reliable and scalable platform for managing duties and badges within Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-back-end&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-back-end/pull/51&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishabh Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2369._Reimplement_duties_controller.rb_and_badges_controller.rb&amp;diff=151246</id>
		<title>CSC/ECE 517 Fall 2023 - E2369. Reimplement duties controller.rb and badges controller.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2369._Reimplement_duties_controller.rb_and_badges_controller.rb&amp;diff=151246"/>
		<updated>2023-11-07T03:51:35Z</updated>

		<summary type="html">&lt;p&gt;Avarma4: /* Testing DutiesController */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Topic Overview &amp;amp; Prior Work ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
'''duties_controller.rb'''&lt;br /&gt;
&lt;br /&gt;
The actions defined by this duties_controller include create, update, and remove. The new duty is saved to the database using the create action. The update action is used to update the duty in the database, while the edit action renders the form for editing an existing duty. Lastly, a duty can be removed from the database by using the delete action. All things considered, Expertiza's Duties module aids in the management of duties.&lt;br /&gt;
&lt;br /&gt;
'''badges_controller.rb'''&lt;br /&gt;
&lt;br /&gt;
A new Badge instance is created by the controller using the user-supplied parameters through the use of the create action. If an image file is attached, it additionally saves it and modifies the badge instance's image_name attribute. &lt;br /&gt;
&lt;br /&gt;
=== Previous Work ===&lt;br /&gt;
&lt;br /&gt;
The prior implementation of the duties and badges controllers was based on a Rails MVC application rather than strictly as an API built on Rails. The handling of requests and responses did not align with the API architecture, thus needing adjustments to ensure a more suitable API-style communication. Furthermore, the previous implementation lacked comprehensive testing, a crucial aspect that needs attention in the reimplementation.&lt;br /&gt;
&lt;br /&gt;
== Planned Work ==&lt;br /&gt;
=== Functions to implement ===&lt;br /&gt;
'''Functionalities for Duties'''&lt;br /&gt;
*Create Action: Implement the functionality to add and persist new duties to the database.&lt;br /&gt;
*Edit Action: Develop the mechanism to modify existing duties, providing a form for editing duties.&lt;br /&gt;
*Update Action: Enhance the capability to update existing duties already stored in the database.&lt;br /&gt;
&lt;br /&gt;
'''Functionalities for Badges'''&lt;br /&gt;
*Create Action: Implement the creation process for new badges, utilizing user-provided parameters.&lt;br /&gt;
*Image Handling: Develop a mechanism to handle attached image files, ensuring their storage.&lt;br /&gt;
*Update Action: Enhance the functionality to update the image_name attribute associated with a badge instance, especially when an image is attached.&lt;br /&gt;
&lt;br /&gt;
=== Notes for Reimplementation ===&lt;br /&gt;
*Ensure that all interactions with the controllers adhere to API conventions, returning data in JSON format.&lt;br /&gt;
&lt;br /&gt;
*Thoroughly test all REST endpoints for both duties and badges, covering various scenarios to validate their functionality. Comprehensive testing should encompass both success and failure scenarios.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
=== Duties Controller ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 class Api::V1::DutiesController &amp;lt; ApplicationController&lt;br /&gt;
  before_action :set_duty, only: %i[ show update destroy ]&lt;br /&gt;
&lt;br /&gt;
'''index Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Retrieves all duties.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties&lt;br /&gt;
&lt;br /&gt;
Description: Fetches all duties from the database using the Duty.all method and renders a JSON response containing all duties.&lt;br /&gt;
  # GET /duties&lt;br /&gt;
  def index&lt;br /&gt;
    @duties = Duty.all&lt;br /&gt;
    render json: @duties, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''show Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Retrieves a specific duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties/:id&lt;br /&gt;
&lt;br /&gt;
Description: Finds a duty by its ID and renders a JSON response containing the specific duty&lt;br /&gt;
  # GET /duties/1&lt;br /&gt;
  def show&lt;br /&gt;
    render json: @duty, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''create Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Creates a new duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: POST&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties&lt;br /&gt;
&lt;br /&gt;
Description: Creates a new duty by instantiating a Duty object with the provided duty parameters from the request (duty_params).&lt;br /&gt;
  # POST /duties&lt;br /&gt;
  def create&lt;br /&gt;
    @duty = Duty.new(duty_params)&lt;br /&gt;
&lt;br /&gt;
    if @duty.save&lt;br /&gt;
      render json: @duty, status: :created, location: @duty&lt;br /&gt;
    else&lt;br /&gt;
      render json: @duty.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''update Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Updates an existing duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: PATCH/PUT&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties/:id&lt;br /&gt;
&lt;br /&gt;
Description: Updates an existing duty specified by its ID using the provided duty parameters from the request (duty_params). &lt;br /&gt;
  # PATCH/PUT /duties/1&lt;br /&gt;
  def update&lt;br /&gt;
    if @duty.update(duty_params)&lt;br /&gt;
      render json: @duty&lt;br /&gt;
    else&lt;br /&gt;
      render json: @duty.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''destroy Method:'''&lt;br /&gt;
&lt;br /&gt;
Function: Deletes a duty.&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: DELETE&lt;br /&gt;
&lt;br /&gt;
URL Endpoint: /duties/:id&lt;br /&gt;
&lt;br /&gt;
Description: Finds a specific duty by its ID and destroys (deletes) it. It then renders a JSON response with a success message&lt;br /&gt;
  # DELETE /duties/1&lt;br /&gt;
  def destroy&lt;br /&gt;
    @duty.destroy&lt;br /&gt;
    render json: { message: &amp;quot;Duty was successfully destroyed.&amp;quot; }, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''set_duty Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
This method is used as a callback to set the @duty instance variable by finding the duty based on the :id parameter. It is used before the show, update, and destroy actions to set up the specific duty being operated on.&lt;br /&gt;
&lt;br /&gt;
  private&lt;br /&gt;
    # Use callbacks to share common setup or constraints between actions.&lt;br /&gt;
    def set_duty&lt;br /&gt;
      @duty = Duty.find(params[:id])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
'''duty_params Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
Filters the duty parameters received from the request, allowing only specific parameters (:name, :assignment_id, :max_members_for_duties) to be used for creating or updating a duty. It uses Rails' strong parameters for security.&lt;br /&gt;
&lt;br /&gt;
    # Only allow a list of trusted parameters through.&lt;br /&gt;
    def duty_params&lt;br /&gt;
      params.require(:duty).permit(:name, :assignment_id, :max_members_for_duties)&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
=== Badges Controller ===&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 class Api::V1::BadgesController &amp;lt; ApplicationController&lt;br /&gt;
  before_action :set_badge, only: %i[ show update destroy ]&lt;br /&gt;
&lt;br /&gt;
'''index Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges&lt;br /&gt;
&lt;br /&gt;
Functionality: Retrieves all badges.&lt;br /&gt;
&lt;br /&gt;
Description: Fetches all existing badges from the database using Badge.all and returns a JSON array containing all badge records.&lt;br /&gt;
&lt;br /&gt;
  # GET /badges&lt;br /&gt;
  def index&lt;br /&gt;
    @badges = Badge.all&lt;br /&gt;
    render json: @badges, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''show Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: GET&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges/:id&lt;br /&gt;
&lt;br /&gt;
Functionality: Retrieves a specific badge.&lt;br /&gt;
&lt;br /&gt;
Description: Finds and retrieves a particular badge by its ID from the database. The method responds with a JSON object containing the details of the specific badge.&lt;br /&gt;
  # GET /badges/1&lt;br /&gt;
  def show&lt;br /&gt;
    render json: @badge, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''create Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: POST&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges&lt;br /&gt;
&lt;br /&gt;
Functionality: Creates a new badge.&lt;br /&gt;
&lt;br /&gt;
Description: Instantiates a new badge using the parameters provided in the request (badge_params).&lt;br /&gt;
  # POST /badges&lt;br /&gt;
  def create&lt;br /&gt;
    @badge = Badge.new(badge_params)&lt;br /&gt;
&lt;br /&gt;
    if @badge.save&lt;br /&gt;
      render json: @badge, status: :created, location: @badge&lt;br /&gt;
    else&lt;br /&gt;
      render json: @badge.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''update Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: PATCH/PUT&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges/:id&lt;br /&gt;
&lt;br /&gt;
Functionality: Updates an existing badge.&lt;br /&gt;
&lt;br /&gt;
Description: Modifies the attributes of an existing badge based on the parameters received in the request (badge_params).&lt;br /&gt;
  # PATCH/PUT /badges/1&lt;br /&gt;
  def update&lt;br /&gt;
    if @badge.update(badge_params)&lt;br /&gt;
      render json: @badge, status: :ok&lt;br /&gt;
    else&lt;br /&gt;
      render json: @badge.errors, status: :unprocessable_entity&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''destroy Method:'''&lt;br /&gt;
&lt;br /&gt;
HTTP Verb: DELETE&lt;br /&gt;
&lt;br /&gt;
Endpoint: /badges/:id&lt;br /&gt;
&lt;br /&gt;
Functionality: Deletes a badge.&lt;br /&gt;
&lt;br /&gt;
Description: Locates a specific badge by its ID and removes it from the database. &lt;br /&gt;
  # DELETE /badges/1&lt;br /&gt;
  def destroy&lt;br /&gt;
    @badge.destroy&lt;br /&gt;
    render json: { message: 'Badge was successfully destroyed.'}, status: :ok&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
'''set_badge Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
Function: Sets up a specific badge for other actions.&lt;br /&gt;
&lt;br /&gt;
Description: A callback method that finds and assigns the @badge instance variable based on the :id parameter before executing the show, update, and destroy actions.&lt;br /&gt;
  private&lt;br /&gt;
    # Use callbacks to share common setup or constraints between actions.&lt;br /&gt;
    def set_badge&lt;br /&gt;
      @badge = Badge.find(params[:id])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
'''badge_params Method (Private):'''&lt;br /&gt;
&lt;br /&gt;
Function: Filters and permits badge parameters for security.&lt;br /&gt;
&lt;br /&gt;
Description: Filters the badge parameters received in the request, allowing only specific parameters (:name, :description, :image_name, :image_file) to be utilized for creating or updating a badge. &lt;br /&gt;
    # Only allow a list of trusted parameters through.&lt;br /&gt;
    def badge_params&lt;br /&gt;
      params.require(:badge).permit(:name, :description, :image_name, :image_file)&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
'''&lt;br /&gt;
== Testing Methodology ==&lt;br /&gt;
During our reimplementation project, Postman was exclusively used for testing API endpoints. Postman allowed us to systematically test these endpoints, covering positive, negative, and edge cases.  We systematically tested various scenarios, ensuring that authorized access was granted when required and denied when not.&lt;br /&gt;
&lt;br /&gt;
In our testing process, we harnessed the power of Swagger UI to comprehensively evaluate the functionality and security of our API endpoints. Swagger UI provided an intuitive and interactive platform for sending various types of requests and scrutinizing responses. However, to ensure that the endpoints were secure, we implemented an authorization mechanism using a YAML file. This YAML file allowed us to generate tokens, particularly for the /login endpoint, which was pivotal in our authentication process. By leveraging Swagger UI a, we methodically tested the endpoints, covering a spectrum of scenarios, including positive and negative cases.&lt;br /&gt;
&lt;br /&gt;
=== Testing DutiesController ===&lt;br /&gt;
The DutiesController is responsible for managing duties in the application. Below is an outline of the RSpec tests applied to verify its functionality.&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scenario 1: Retrieving All Duties&lt;br /&gt;
&lt;br /&gt;
Verifies the retrieval of all duties when present in the database.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the correct JSON response containing all duties.&lt;br /&gt;
&lt;br /&gt;
 RSpec.describe Api::V1::DutiesController, type: :controller do&lt;br /&gt;
  describe &amp;quot;index&amp;quot; do&lt;br /&gt;
    it &amp;quot;returns all duties&amp;quot; do&lt;br /&gt;
      # Test scenario 1: When there are duties in the database&lt;br /&gt;
      # Expect the method to return all duties in JSON format&lt;br /&gt;
      duty1 = Duty.create(name: 'Duty 1')&lt;br /&gt;
      duty2 = Duty.create(name: 'Duty 2')&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include(&lt;br /&gt;
                                             { 'name' =&amp;gt; 'Duty 1' },&lt;br /&gt;
                                             { 'name' =&amp;gt; 'Duty 2' }&lt;br /&gt;
                                           )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario 2: No Duties in the Database&lt;br /&gt;
&lt;br /&gt;
Ensures the method returns an empty JSON array when no duties exist.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with an empty JSON array.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an empty JSON array when there are no duties&amp;quot; do&lt;br /&gt;
      # Test scenario 2: When there are no duties in the database&lt;br /&gt;
      # Expect the method to return an empty JSON array&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to eq([])&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Initializing a New Duty Object&lt;br /&gt;
&lt;br /&gt;
Validates the initialization of a new Duty object.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a new Duty object to be initialized.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#new&amp;quot; do&lt;br /&gt;
    context &amp;quot;when called&amp;quot; do&lt;br /&gt;
      it &amp;quot;initializes a new Duty object&amp;quot; do&lt;br /&gt;
        get :new&lt;br /&gt;
        expect(assigns(:duty)).to be_a_new(Duty)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      it &amp;quot;assigns the value of params[:id] to @id&amp;quot; do&lt;br /&gt;
        id = 123&lt;br /&gt;
        get :new, params: { id: id }&lt;br /&gt;
        expect(assigns(:id)).to eq(id)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Rendering a Duty as JSON&lt;br /&gt;
&lt;br /&gt;
Checks the rendering of a duty in JSON format.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the correct duty details in JSON.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#show&amp;quot; do&lt;br /&gt;
    context &amp;quot;when called&amp;quot; do&lt;br /&gt;
      it &amp;quot;renders the duty as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Test Duty')&lt;br /&gt;
        get :show, params: { id: duty.id }&lt;br /&gt;
        expect(response).to have_http_status(:ok)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Test Duty')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Rendering a Duty for Editing&lt;br /&gt;
&lt;br /&gt;
Tests the rendering of a duty for editing in JSON.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the correct duty details in JSON.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#edit&amp;quot; do&lt;br /&gt;
    context &amp;quot;when called&amp;quot; do&lt;br /&gt;
      it &amp;quot;renders the duty as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Test Duty')&lt;br /&gt;
        get :edit, params: { id: duty.id }&lt;br /&gt;
        expect(response).to have_http_status(:ok)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Test Duty')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Creating a New Duty&lt;br /&gt;
&lt;br /&gt;
Validates the creation of a new duty with valid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a 'created' status and the created duty data in the JSON response.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#create&amp;quot; do&lt;br /&gt;
    context &amp;quot;when duty params are valid&amp;quot; do&lt;br /&gt;
      it &amp;quot;creates a new duty&amp;quot; do&lt;br /&gt;
        duty_params = { name: 'New Duty' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:created)&lt;br /&gt;
        expect(Duty.last.name).to eq('New Duty')&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Creating Duty&lt;br /&gt;
&lt;br /&gt;
Tests the scenario when invalid duty parameters are provided.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an 'unprocessable entity' status with an error message concerning the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
      it &amp;quot;returns a JSON response with the created duty and status code 201&amp;quot; do&lt;br /&gt;
        duty_params = { name: 'New Duty' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:created)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'New Duty')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when duty params are invalid&amp;quot; do&lt;br /&gt;
      it &amp;quot;does not create a new duty&amp;quot; do&lt;br /&gt;
        duty_params = { name: '' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
        expect(Duty.last).to be_nil&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      it &amp;quot;returns a JSON response with the error messages and status code 422&amp;quot; do&lt;br /&gt;
        duty_params = { name: '' }&lt;br /&gt;
        post :create, params: { duty: duty_params }&lt;br /&gt;
        expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Successfully Updating Duty&lt;br /&gt;
&lt;br /&gt;
Verifies the successful update of an existing duty.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status with the updated duty data in JSON.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#update&amp;quot; do&lt;br /&gt;
    context &amp;quot;when duty is successfully updated&amp;quot; do&lt;br /&gt;
      it &amp;quot;returns the updated duty as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Old Duty')&lt;br /&gt;
        updated_name = 'Updated Duty'&lt;br /&gt;
        patch :update, params: { id: duty.id, duty: { name: updated_name } }&lt;br /&gt;
        expect(response).to have_http_status(:ok)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; updated_name)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Updating Duty&lt;br /&gt;
&lt;br /&gt;
Tests the scenario when an existing duty is updated with invalid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an 'unprocessable entity' status with an error message concerning the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when duty fails to update&amp;quot; do&lt;br /&gt;
      it &amp;quot;returns an error message as JSON&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Old Duty')&lt;br /&gt;
        patch :update, params: { id: duty.id, duty: { name: '' } }&lt;br /&gt;
        expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
        expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Destroying a Duty&lt;br /&gt;
&lt;br /&gt;
Validates the destruction of an existing duty.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and confirms the duty's destruction in the database.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#destroy&amp;quot; do&lt;br /&gt;
    it &amp;quot;destroys the duty&amp;quot; do&lt;br /&gt;
      duty = Duty.create(name: 'Duty to be Destroyed')&lt;br /&gt;
      delete :destroy, params: { id: duty.id }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(Duty.find_by(id: duty.id)).to be_nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Non-existent or Destroyed Duties&lt;br /&gt;
&lt;br /&gt;
Checks the response when attempting to destroy non-existent or already destroyed duties.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects 'not found' status or an 'unprocessable entity' status with corresponding error messages.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a non-existent duty&amp;quot; do&lt;br /&gt;
      delete :destroy, params: { id: 9999 } # Assuming 9999 is an invalid duty ID.&lt;br /&gt;
      expect(response).to have_http_status(:not_found)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('message' =&amp;gt; 'Duty not found')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a previously destroyed duty&amp;quot; do&lt;br /&gt;
      duty = Duty.create(name: 'Destroyed Duty')&lt;br /&gt;
      duty.destroy&lt;br /&gt;
      delete :destroy, params: { id: duty.id }&lt;br /&gt;
      expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('message' =&amp;gt; 'Duty already destroyed')&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Setting a Duty by ID&lt;br /&gt;
&lt;br /&gt;
Validates the setting of @duty based on a valid duty ID.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects @duty to match the duty with the provided ID.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#set_duty&amp;quot; do&lt;br /&gt;
    context &amp;quot;when a valid duty id is provided&amp;quot; do&lt;br /&gt;
      it &amp;quot;sets @duty to the duty with the provided id&amp;quot; do&lt;br /&gt;
        duty = Duty.create(name: 'Test Duty')&lt;br /&gt;
        get :show, params: { id: duty.id }&lt;br /&gt;
        expect(assigns(:duty)).to eq(duty)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Invalid Duty ID&lt;br /&gt;
&lt;br /&gt;
Checks for error handling when an invalid duty ID is provided.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an error raising ActiveRecord::RecordNotFound.&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when an invalid duty id is provided&amp;quot; do&lt;br /&gt;
      it &amp;quot;does not set @duty and raises an error&amp;quot; do&lt;br /&gt;
        expect { get :show, params: { id: 9999 } }.to raise_error(ActiveRecord::RecordNotFound)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Valid and Missing Parameters&lt;br /&gt;
&lt;br /&gt;
Ensures the return of permitted parameters for a duty object.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects permitted parameters for a valid duty and error raises for missing parameters.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;#duty_params&amp;quot; do&lt;br /&gt;
    context &amp;quot;when valid parameters are provided&amp;quot; do&lt;br /&gt;
      it &amp;quot;returns the permitted parameters for duty&amp;quot; do&lt;br /&gt;
        valid_params = { name: 'Valid Duty', assignment_id: 1, max_members_for_duties: 5 }&lt;br /&gt;
        duty = Duty.new(valid_params)&lt;br /&gt;
        duty_params = controller.send(:duty_params, duty)&lt;br /&gt;
        expect(duty_params).to eq(valid_params)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when assignment_id is missing&amp;quot; do&lt;br /&gt;
      it &amp;quot;raises an error&amp;quot; do&lt;br /&gt;
        invalid_params = { name: 'Invalid Duty', max_members_for_duties: 5 }&lt;br /&gt;
        duty = Duty.new(invalid_params)&lt;br /&gt;
        expect { controller.send(:duty_params, duty) }.to raise_error(ActionController::ParameterMissing)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context &amp;quot;when max_members_for_duty is missing&amp;quot; do&lt;br /&gt;
      it &amp;quot;raises an error&amp;quot; do&lt;br /&gt;
        invalid_params = { name: 'Invalid Duty', assignment_id: 1 }&lt;br /&gt;
        duty = Duty.new(invalid_params)&lt;br /&gt;
        expect { controller.send(:duty_params, duty) }.to raise_error(ActionController::ParameterMissing)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context &amp;quot;when name is missing&amp;quot; do&lt;br /&gt;
        it &amp;quot;raises an error&amp;quot; do&lt;br /&gt;
          invalid_params = { assignment_id: 1, max_members_for_duties: 5 }&lt;br /&gt;
          duty = Duty.new(invalid_params)&lt;br /&gt;
          expect { controller.send(:duty_params, duty) }.to raise_error(ActionController::ParameterMissing)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
=== Testing BadgesController ===&lt;br /&gt;
The BadgesController is a crucial component that handles the CRUD operations for managing badges in the application. To ensure its functionalities are reliable and error-free, comprehensive testing has been implemented using RSpec.&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
 require 'rails_helper'&lt;br /&gt;
&lt;br /&gt;
Scenario: Retrieving All Badges&lt;br /&gt;
&lt;br /&gt;
Verifies that the controller returns all badges when the database is empty.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expect an OK status with an empty JSON response.&lt;br /&gt;
&lt;br /&gt;
 RSpec.describe Api::V1::BadgesController, type: :controller do&lt;br /&gt;
  describe &amp;quot;index&amp;quot; do&lt;br /&gt;
    it &amp;quot;returns all badges&amp;quot; do&lt;br /&gt;
      # Test scenario: When there are no badges in the database initially.&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to eq([]) # Use JSON.parse for comparing JSON responses.&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Retrieving Badges&lt;br /&gt;
&lt;br /&gt;
Simulates an error in retrieving badges.&lt;br /&gt;
&lt;br /&gt;
Expectation: The response status should indicate an error.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns a successful response status&amp;quot; do&lt;br /&gt;
      # Test scenario: When there is an error in retrieving badges.&lt;br /&gt;
      # Expected behavior: The response status should indicate an error.&lt;br /&gt;
      allow(Badge).to receive(:all).and_raise(StandardError, 'Database connection error')&lt;br /&gt;
      get :index&lt;br /&gt;
      expect(response).to have_http_status(:error) # Adjust this to the actual error status code.&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Valid Badge Request&lt;br /&gt;
&lt;br /&gt;
Ensures the controller returns a specific badge based on a valid ID.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and the correct badge data.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;show&amp;quot; do&lt;br /&gt;
    it &amp;quot;returns a specific badge&amp;quot; do&lt;br /&gt;
      # Test scenario: When a badge with a valid ID is requested.&lt;br /&gt;
      badge = Badge.create(name: 'Test Badge')&lt;br /&gt;
      get :show, params: { id: badge.id }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Test Badge')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Invalid Badge Request&lt;br /&gt;
&lt;br /&gt;
Tests when a non-existent badge is requested.&lt;br /&gt;
&lt;br /&gt;
Expectation: The response should be successful with an empty JSON body.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a non-existent badge&amp;quot; do&lt;br /&gt;
      # Test scenario: When a badge with an invalid ID is requested.&lt;br /&gt;
      get :show, params: { id: 9999 } # Assuming 9999 is an invalid badge ID.&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to be_empty&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Creating a New Badge&lt;br /&gt;
&lt;br /&gt;
Validates the creation of a new badge with valid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a 'created' status and the created badge data in the JSON response.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;create&amp;quot; do&lt;br /&gt;
    it &amp;quot;creates a new badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Creating a new badge with valid parameters.&lt;br /&gt;
      post :create, params: { badge: { name: 'New Badge' } }&lt;br /&gt;
      expect(response).to have_http_status(:created)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'New Badge')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Creating Badge&lt;br /&gt;
&lt;br /&gt;
Tests the scenario when invalid badge parameters are provided (e.g., empty name).&lt;br /&gt;
&lt;br /&gt;
Expectation: The response should have an 'unprocessable entity' status with an error message regarding the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for invalid badge parameters&amp;quot; do&lt;br /&gt;
      # Test scenario: Creating a new badge with invalid parameters (empty name).&lt;br /&gt;
      post :create, params: { badge: { name: '' } }&lt;br /&gt;
      expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Updating an Existing Badge&lt;br /&gt;
&lt;br /&gt;
Verifies the update process of an existing badge with valid parameters.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and the updated badge data.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;update&amp;quot; do&lt;br /&gt;
    it &amp;quot;updates an existing badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Updating an existing badge with valid parameters.&lt;br /&gt;
      badge = Badge.create(name: 'Old Badge')&lt;br /&gt;
      patch :update, params: { id: badge.id, badge: { name: 'Updated Badge' } }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; 'Updated Badge')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Error in Updating Badge&lt;br /&gt;
&lt;br /&gt;
Tests updating an existing badge with invalid parameters (e.g., empty name).&lt;br /&gt;
&lt;br /&gt;
Expectation: The response should have an 'unprocessable entity' status with an error message concerning the invalid parameters.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for invalid badge parameters&amp;quot; do&lt;br /&gt;
      # Test scenario: Updating an existing badge with invalid parameters (empty name).&lt;br /&gt;
      badge = Badge.create(name: 'Old Badge')&lt;br /&gt;
      patch :update, params: { id: badge.id, badge: { name: '' } }&lt;br /&gt;
      expect(response).to have_http_status(:unprocessable_entity)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('name' =&amp;gt; [&amp;quot;can't be blank&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Scenario: Destroying an Existing Badge&lt;br /&gt;
&lt;br /&gt;
Validates the destruction of an existing badge.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects an OK status and a success message confirming the badge's destruction.&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;destroy&amp;quot; do&lt;br /&gt;
    it &amp;quot;destroys an existing badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Destroying an existing badge.&lt;br /&gt;
      badge = Badge.create(name: 'Badge to be Destroyed')&lt;br /&gt;
      delete :destroy, params: { id: badge.id }&lt;br /&gt;
      expect(response).to have_http_status(:ok)&lt;br /&gt;
      expect(JSON.parse(response.body)).to include('message' =&amp;gt; 'Badge was successfully destroyed.')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
Scenario: Attempting to Destroy Non-existent Badge&lt;br /&gt;
&lt;br /&gt;
Simulates attempting to delete a non-existent badge.&lt;br /&gt;
&lt;br /&gt;
Expectation: Expects a 'not found' status for the non-existent badge.&lt;br /&gt;
&lt;br /&gt;
    it &amp;quot;returns an error message for a non-existent badge&amp;quot; do&lt;br /&gt;
      # Test scenario: Attempting to destroy a non-existent badge.&lt;br /&gt;
      delete :destroy, params: { id: 9999 } # Assuming 9999 is an invalid badge ID.&lt;br /&gt;
      expect(response).to have_http_status(:not_found)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
In conclusion, the reimplementation project for the Duties and Badges modules within Expertiza holds significant importance in aligning the existing functionalities with API standards and rectifying the deficiencies identified in the previous implementation.&lt;br /&gt;
&lt;br /&gt;
The Duties module, managed by the duties_controller.rb, plays a pivotal role in handling duties' creation, editing, and deletion within the system. Likewise, the Badges module, governed by the badges_controller.rb, oversees the creation and management of badges, including the handling of image files.&lt;br /&gt;
&lt;br /&gt;
The prior implementation's primary shortcomings revolved around treating the system as a traditional Rails MVC application rather than as a Rails API. This resulted in non-compliance with API standards in handling requests and responses, which this reimplementation aims to rectify. Additionally, the inadequacy of testing procedures highlighted the necessity for a comprehensive testing suite covering various scenarios to ensure the robustness and reliability of the system.&lt;br /&gt;
&lt;br /&gt;
The planned work includes adhering strictly to API-style interactions, returning data in JSON format, and implementing thorough testing for all REST endpoints, ensuring the functionalities for both Duties and Badges are rigorously verified across success and failure scenarios.&lt;br /&gt;
&lt;br /&gt;
By addressing these issues and meticulously implementing the planned functionalities, this reimplementation aims to enhance the system's efficiency, robustness, and adherence to API conventions, ensuring a more reliable and scalable platform for managing duties and badges within Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
*Github Repository: https://github.com/R3Rex31/reimplementation-back-end&lt;br /&gt;
*Pull Request: https://github.com/expertiza/reimplementation-back-end/pull/51&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
'''Group members:'''&lt;br /&gt;
&lt;br /&gt;
Siddhi Mule&lt;br /&gt;
 &lt;br /&gt;
Rishabh Muzhangathu&lt;br /&gt;
&lt;br /&gt;
Aditi Gulabchand Varma&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
Renji Joseph Sabu&lt;/div&gt;</summary>
		<author><name>Avarma4</name></author>
	</entry>
</feed>