Files
backend/internal/repository/schedule_repo.go
lan 0a0cbacbcc 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.
2026-03-12 08:38:14 +08:00

67 lines
1.8 KiB
Go

package repository
import (
"carrot_bbs/internal/model"
"gorm.io/gorm"
)
type ScheduleRepository interface {
ListByUserID(userID string) ([]*model.ScheduleCourse, error)
GetByID(id string) (*model.ScheduleCourse, error)
Create(course *model.ScheduleCourse) error
Update(course *model.ScheduleCourse) error
DeleteByID(id string) error
ExistsColorByUser(userID, color, excludeID string) (bool, error)
}
type scheduleRepository struct {
db *gorm.DB
}
func NewScheduleRepository(db *gorm.DB) ScheduleRepository {
return &scheduleRepository{db: db}
}
func (r *scheduleRepository) ListByUserID(userID string) ([]*model.ScheduleCourse, error) {
var courses []*model.ScheduleCourse
err := r.db.
Where("user_id = ?", userID).
Order("day_of_week ASC, start_section ASC, created_at ASC").
Find(&courses).Error
return courses, err
}
func (r *scheduleRepository) Create(course *model.ScheduleCourse) error {
return r.db.Create(course).Error
}
func (r *scheduleRepository) GetByID(id string) (*model.ScheduleCourse, error) {
var course model.ScheduleCourse
if err := r.db.Where("id = ?", id).First(&course).Error; err != nil {
return nil, err
}
return &course, nil
}
func (r *scheduleRepository) Update(course *model.ScheduleCourse) error {
return r.db.Save(course).Error
}
func (r *scheduleRepository) DeleteByID(id string) error {
return r.db.Delete(&model.ScheduleCourse{}, "id = ?", id).Error
}
func (r *scheduleRepository) ExistsColorByUser(userID, color, excludeID string) (bool, error) {
var count int64
query := r.db.Model(&model.ScheduleCourse{}).
Where("user_id = ? AND LOWER(color) = LOWER(?)", userID, color)
if excludeID != "" {
query = query.Where("id <> ?", excludeID)
}
if err := query.Count(&count).Error; err != nil {
return false, err
}
return count > 0, nil
}