Implement the `TASK_TYPE_GET_EMPTY_CLASSROOM` task type to allow users to fetch available classroom information.
- Add `TASK_TYPE_GET_EMPTY_CLASSROOM` to the `TaskType` enum in protobuf.
- Define `GetEmptyClassroomPayload` and `EmptyClassroomResultData` messages.
- Implement `getEmptyClassrooms`
Update the gRPC service definitions and handlers to provide more detailed
information for grades and exams.
- Add `GpaSummary` message to include average GPA, rank, and other
academic statistics.
- Expand `Grade` message with additional fields like `term`, `nature`,
`category`, and `is_exam`.
- Refactor `Exam` message to use `week` and `weekday` instead of `room`
and `seat`.
- Update `TaskHandler.getGrades` to populate the new `GpaSummary` and
enriched grade details.
- Update protobuf generated files to reflect schema changes.
Implement new gRPC task handlers for retrieving student grades and exam schedules. This includes adding new parser logic for processing score and exam data, and updating the client capabilities to advertise support for these new task types.
- Add `getGrades` and `getExams` handlers in `grpc/handler.go`
- Add `parser/encoding.go`, `parser/exam.go`, and `parser/score.go` for data parsing
- Update `grpc/client.go` to include `TASK_TYPE_GET_GRADES` and `TASK_TYPE_GET_EXAMS` in capabilities