Extract business logic from gRPC handlers into a dedicated service package.
Add context support throughout for cancellation and timeouts. Move models to
their own package, remove hardcoded credentials from config, and simplify
parsers to only handle HTML parsing.
Refactor the gRPC client and task handling logic to improve modularity,
error handling, and observability.
- Split `grpc/handler.go` into specialized handler files (login,
classroom, exams, grades, schedule) to reduce complexity.
- Replace standard `log` with `log/slog` throughout the project for
structured logging.
- Refactor `grpc/client.go` to use a thread-safe connection management
pattern with `sync.RWMutex`.
- Remove the legacy `service` package and HTTP server implementation,
transitioning the application to a pure gRPC runner mode.
- Clean up `config` and `pkg/errors` to remove unused utilities and
simplify the API.
- Improve error reporting in parsers and HTTP clients by checking
response status codes.
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