refactor(server): decouple services and improve architecture
- Introduce interfaces for all major services (JWT, PostAI, Comment, Message, Notification, QRCodeLogin, Upload, Vote, etc.) to support dependency inversion. - Move query parameters from `internal/dto` to a new `internal/query` package to separate request payloads from data transfer objects. - Refactor `internal/router` to use embedded `RouterDeps` for cleaner dependency management. - Decouple handlers from repositories by injecting services instead of direct repository access, ensuring proper layering. - Improve database initialization by moving it from `internal/model` to `internal/database`. - Optimize message decryption by implementing a more efficient `BatchDecrypt` method in `MessageEncryptor` using a worker pool. - Enhance error handling and security by implementing fail-fast checks for encryption key length during startup. - Clean up unused code, including the `avatar` package and several unused DTOs.
This commit is contained in:
@@ -15,12 +15,12 @@ import (
|
||||
)
|
||||
|
||||
type SyncEmptyClassroomsRequest struct {
|
||||
Username string `json:"username" binding:"required"`
|
||||
Password string `json:"password" binding:"required"`
|
||||
Semester string `json:"semester"`
|
||||
WeekStart string `json:"week_start"`
|
||||
WeekEnd string `json:"week_end"`
|
||||
CampusCode string `json:"campus_code"`
|
||||
Username string `json:"username" binding:"required"`
|
||||
Password string `json:"password" binding:"required"`
|
||||
Semester string `json:"semester"`
|
||||
WeekStart string `json:"week_start"`
|
||||
WeekEnd string `json:"week_end"`
|
||||
CampusCode string `json:"campus_code"`
|
||||
}
|
||||
|
||||
type SyncEmptyClassroomsResult struct {
|
||||
@@ -32,10 +32,11 @@ type SyncEmptyClassroomsResult struct {
|
||||
|
||||
type EmptyClassroomSyncService interface {
|
||||
SyncUserEmptyClassrooms(ctx context.Context, userID string, req *SyncEmptyClassroomsRequest) (*SyncEmptyClassroomsResult, error)
|
||||
ListClassrooms(userID, semester string) ([]*model.EmptyClassroom, error)
|
||||
}
|
||||
|
||||
type emptyClassroomSyncService struct {
|
||||
taskManager *runner.TaskManager
|
||||
taskManager *runner.TaskManager
|
||||
classroomRepo repository.EmptyClassroomRepository
|
||||
logger *zap.Logger
|
||||
}
|
||||
@@ -46,20 +47,20 @@ func NewEmptyClassroomSyncService(
|
||||
logger *zap.Logger,
|
||||
) EmptyClassroomSyncService {
|
||||
return &emptyClassroomSyncService{
|
||||
taskManager: taskManager,
|
||||
classroomRepo: classroomRepo,
|
||||
logger: logger,
|
||||
taskManager: taskManager,
|
||||
classroomRepo: classroomRepo,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *emptyClassroomSyncService) SyncUserEmptyClassrooms(ctx context.Context, userID string, req *SyncEmptyClassroomsRequest) (*SyncEmptyClassroomsResult, error) {
|
||||
payload := &pb.GetEmptyClassroomPayload{
|
||||
Username: req.Username,
|
||||
Password: req.Password,
|
||||
Semester: req.Semester,
|
||||
WeekStart: req.WeekStart,
|
||||
WeekEnd: req.WeekEnd,
|
||||
CampusCode: req.CampusCode,
|
||||
Username: req.Username,
|
||||
Password: req.Password,
|
||||
Semester: req.Semester,
|
||||
WeekStart: req.WeekStart,
|
||||
WeekEnd: req.WeekEnd,
|
||||
CampusCode: req.CampusCode,
|
||||
}
|
||||
|
||||
taskResult, err := s.taskManager.SubmitTaskSync(ctx, pb.TaskType_TASK_TYPE_GET_EMPTY_CLASSROOM, payload)
|
||||
@@ -133,3 +134,8 @@ func (s *emptyClassroomSyncService) saveClassrooms(ctx context.Context, userID,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ListClassrooms 查询用户某学期的空教室。
|
||||
func (s *emptyClassroomSyncService) ListClassrooms(userID, semester string) ([]*model.EmptyClassroom, error) {
|
||||
return s.classroomRepo.ListByUserAndSemester(userID, semester)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user