Note: Please read through all the instructions on this epic - we do not expect you to complete all of it at once, and you should ABSOLUTELY split it into separate issues and PRs. Feel free to tackle as much as you can, in order as specified below. Both epics in this application are important to set the stage for the rest of the features.
Have you updated the title?
[X] I have updated the issue's title.
As a...
student
I can...
submit a recommendation request
So that...
I can indicate my request to my professor
Discussion
Student logs in and can access their profile
Can see all their existing requests and their associated status
Can create, read, update, delete, their recommendation requests
Through a Create form, a student can submit their request which:
Has an autogenerated id
Has a field for professorName
Has a field for professorEmail
Has a field for requesterName
Has a dropdown that has recommendationTypes
Also has comments section for other recommendation types (part of the dropdown, if selected the student can add more information in the details section)
Has a section for student to add details
Has submissionDate (set based on when the student submits the request)
Has completionDate (set automatically based on when the professor completes the request)
Has submit button
Recommendation Requests should also store status on the backend, this value needs to be set to Pending (awaiting professor review).
Acceptance Criteria
[ ] As a student, I can login and see all the requests I have submitted (but not any other students).
[ ] There are endpoints for each of the CRUD actions necessary to create, read, update, and delete a recommendation request that have been tested on swagger.
GET api/recommendationrequest/{id}
PUT api/recommendationrequest/{id}
DELETE api/recommendationrequest/{id}
POST api/recommendationrequest/post
May also be useful to implement...
GET by professorName api/recommendationrequest/{professorName}
GET by studentName api/recommendationrequest/{studentName}
[ ] A new recommendation request can be created from the create form (on the frontend) and is posted to the Recommendation Request Table.
Implementation Todos
B1: Create Recommendation Request Table
[ ] Create entity and repository files for a Recommendation Request (RecommendationRequest.java, RecommendationRequestRepository.java)
[ ] There is a database migration file: RecommendationRequest.json
[ ] Table is visible on H2 console and visible when tested on Dokku
B2: Implement CRUD operations for a Recommendation Request
[ ] Implement GET (show), PUT (edit), DELETE, and POST (create) endpoints (see above for endpoint suggestions)
[ ] Backend should check that professor exists (email or name)
[ ] All the endpoints are implemented and tested in RecommendationRequestController.java and RecommendationRequestControllerTests.java and tested on Swagger and dokku-qa
F1: Student Profile Page
[ ] Add a new page to frontend/src/main/pages for the Student Profile Page
[ ] Student Profile Page shows their recommendations submitted in a table format, where they can also create a new request, edit existing requests, delete requests and see all of their requests.
F2: Create Request Page + Form Component
[ ] There is a button on the Student Profile page to create a new request. This button leads to a page where the student can fill out a form for a new request.
[ ] Form component is implemented in the frontend.
[ ] Create Request Button is implemented and leads to a Create Request Page.
[ ] Create Request Page has the form that can be filled out by the user.
[ ] There is adequate test coverage for both the frontend and backend
Note: Please read through all the instructions on this epic - we do not expect you to complete all of it at once, and you should ABSOLUTELY split it into separate issues and PRs. Feel free to tackle as much as you can, in order as specified below. Both epics in this application are important to set the stage for the rest of the features.
Have you updated the title?
As a...
student
I can...
submit a recommendation request
So that...
I can indicate my request to my professor
Discussion
Student logs in and can access their profile
Through a Create form, a student can submit their request which:
id
professorName
professorEmail
requesterName
recommendationTypes
other
recommendation types (part of the dropdown, if selected the student can add more information in the details section)details
submissionDate
(set based on when the student submits the request)completionDate
(set automatically based on when the professor completes the request)Recommendation Requests should also store
status
on the backend, this value needs to be set to Pending (awaiting professor review).Acceptance Criteria
api/recommendationrequest/{id}
api/recommendationrequest/{id}
api/recommendationrequest/{id}
api/recommendationrequest/post
May also be useful to implement...
GET by professorName
api/recommendationrequest/{professorName}
GET by studentName
api/recommendationrequest/{studentName}
[ ] A new recommendation request can be created from the create form (on the frontend) and is posted to the Recommendation Request Table.
Implementation Todos
B1: Create Recommendation Request Table
RecommendationRequest.java
,RecommendationRequestRepository.java
)RecommendationRequest.json
B2: Implement CRUD operations for a Recommendation Request
RecommendationRequestController.java
andRecommendationRequestControllerTests.java
and tested on Swagger and dokku-qaF1: Student Profile Page
frontend/src/main/pages
for the Student Profile PageF2: Create Request Page + Form Component
[ ] There is a button on the Student Profile page to create a new request. This button leads to a page where the student can fill out a form for a new request.
[ ] Form component is implemented in the frontend.
[ ] Create Request Button is implemented and leads to a Create Request Page.
[ ] Create Request Page has the form that can be filled out by the user.
[ ] There is adequate test coverage for both the frontend and backend