feat(schedule): add course table screens and navigation

Add complete schedule functionality including:
- Schedule screen with weekly course table view
- Course detail screen with transparent modal presentation
- New ScheduleStack navigator integrated into main tab bar
- Schedule service for API interactions
- Type definitions for course entities

Also includes bug fixes for group invite/request handlers
to include required groupId parameter.
This commit is contained in:
2026-03-12 08:38:14 +08:00
parent 21293644b8
commit 0a0cbacbcc
25 changed files with 3050 additions and 260 deletions

View File

@@ -23,6 +23,7 @@ type Router struct {
stickerHandler *handler.StickerHandler
gorseHandler *handler.GorseHandler
voteHandler *handler.VoteHandler
scheduleHandler *handler.ScheduleHandler
jwtService *service.JWTService
}
@@ -41,6 +42,7 @@ func New(
stickerHandler *handler.StickerHandler,
gorseHandler *handler.GorseHandler,
voteHandler *handler.VoteHandler,
scheduleHandler *handler.ScheduleHandler,
) *Router {
// 设置JWT服务
userHandler.SetJWTService(jwtService)
@@ -59,6 +61,7 @@ func New(
stickerHandler: stickerHandler,
gorseHandler: gorseHandler,
voteHandler: voteHandler,
scheduleHandler: scheduleHandler,
jwtService: jwtService,
}
@@ -160,6 +163,18 @@ func (r *Router) setupRoutes() {
posts.DELETE("/:id/vote", authMiddleware, r.voteHandler.Unvote) // 取消投票
}
// 课表路由
if r.scheduleHandler != nil {
schedule := v1.Group("/schedule")
schedule.Use(authMiddleware)
{
schedule.GET("/courses", r.scheduleHandler.ListCourses)
schedule.POST("/courses", r.scheduleHandler.CreateCourse)
schedule.PUT("/courses/:id", r.scheduleHandler.UpdateCourse)
schedule.DELETE("/courses/:id", r.scheduleHandler.DeleteCourse)
}
}
// 投票选项路由
voteOptions := v1.Group("/vote-options")
voteOptions.Use(authMiddleware)