Assignment Submission
Command-Line Tool
This project is an assignment submission command-line tool similar to Gradescope. Leveraging AWS services such as S3, RDS, Lambda functions, and API Gateway, the serverless architecture will streamline homework submission and grading processes for both instructors and students.
Key Features
- Student, teacher, and assignment creation
- Submission uploads/downloads
- Grading functionality
- Grade distribution showcase
- Leaderboard generation
Software Architecture
- AWS Lambda Functions: For serverless compute power to handle application logic.
- API Gateway: To create and manage scalable APIs for interaction with our application.
- S3 (Simple Storage Service): For storing and retrieving homework submission files.
- RDS (Relational Database Service): To manage a MySQL database. Keep track of students and teachers info, posted homework, submissions, and grades.
- Python: Utilized for both server-side Lambda functions and client-side development.
- Server-Side Focus: Prioritize server-side processing for efficient data management, omitting a frontend interface and using terminal interactions.
Database
API Functions
- PUT /create_a_student: Create a new student and retrieve their ID.
- PUT /create_a_teacher: Create a new teacher and retrieve their ID.
- POST /homework: Create a new homework assignment and retrieve its ID.
- GET /all_homeworks: Retrieve a list of all homework assignments.
- GET /homework/{homework_id}: Retrieve details of a specific homework assignment.
- GET /submission/{student_id}: Retrieve grades for all assignments of a specific student.
- GET /submission/download/{submission_id}: Download PDFs from a specific submission.
- GET /a_submission/{submission_id}: Retrieve details of a specific submission.
- GET /leaderboard: Retrieve a leaderboard based on student average grades.
- GET /grade_distribution/{homework_id}: Retrieve grade distribution for a specific homework assignment.
- PUT /submission/grade/{submissionId}: Grade and provide feedback for a submission.
- POST /submission: Submit homework PDFs.
Design Choices
- Users select a student or teacher role to access relevant features.
- No login required; flexible access to submission details.
- Multiple submissions per homework; one grade per submission.
- Use the latest grade for the submission if graded multiple times.
- Leaderboard based on average grades of all students across all submissions.
Difficulties
- Iterative adjustments were necessary for refining the database and API structures, despite initial planning.
- Managing edge cases and handling invalid input IDs demanded careful consideration.
- Challenges in collaboration arose. Database and lambda functions reside in Helen's AWS account, restricting Aining's database access. Additionally, the VSCode Live Share we used to facilitate client-side development is glitchy.
Future Work
- Optimize the database by removing redundant data, such as homework_id and student_id in the Grades table.
- Implement user registration and authentication to bolster security.
- Restrict access to submission details, such as grades and feedback, to logged-in users for enhanced privacy.
- Enhance the client-side interface to improve user experience.
- Expand file type support to include formats like txt and zip for broader compatibility.
Development Team
This tool was developed in collaboration with Helen. We worked closely together to design the overall database structure and API functions. Our approach involved dividing the work based on specific API functions, allowing us to both contribute to the client and server aspects of the project.