79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
|
|
package repository
|
||
|
|
|
||
|
|
import (
|
||
|
|
"lifelog/internal/model"
|
||
|
|
|
||
|
|
"gorm.io/gorm"
|
||
|
|
)
|
||
|
|
|
||
|
|
type TodoRepository struct {
|
||
|
|
db *gorm.DB
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewTodoRepository(db *gorm.DB) *TodoRepository {
|
||
|
|
return &TodoRepository{db: db}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *TodoRepository) GetAll() ([]model.Todo, error) {
|
||
|
|
var todos []model.Todo
|
||
|
|
err := r.db.Order("priority asc, created_at desc").Find(&todos).Error
|
||
|
|
return todos, err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *TodoRepository) Create(todo *model.Todo) error {
|
||
|
|
return r.db.Create(todo).Error
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *TodoRepository) Update(todo *model.Todo) error {
|
||
|
|
return r.db.Save(todo).Error
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *TodoRepository) Delete(id uint64) error {
|
||
|
|
return r.db.Delete(&model.Todo{}, id).Error
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *TodoRepository) GetByID(id uint64) (*model.Todo, error) {
|
||
|
|
var todo model.Todo
|
||
|
|
err := r.db.First(&todo, id).Error
|
||
|
|
return &todo, err
|
||
|
|
}
|
||
|
|
|
||
|
|
type DailyLogRepository struct {
|
||
|
|
db *gorm.DB
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewDailyLogRepository(db *gorm.DB) *DailyLogRepository {
|
||
|
|
return &DailyLogRepository{db: db}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *DailyLogRepository) GetByDate(date string) (*model.DailyLog, error) {
|
||
|
|
var log model.DailyLog
|
||
|
|
err := r.db.Where("date = ?", date).First(&log).Error
|
||
|
|
if err == gorm.ErrRecordNotFound {
|
||
|
|
return nil, nil
|
||
|
|
}
|
||
|
|
return &log, err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *DailyLogRepository) GetRecent(limit int) ([]model.DailyLog, error) {
|
||
|
|
var logs []model.DailyLog
|
||
|
|
err := r.db.Order("date desc").Limit(limit).Find(&logs).Error
|
||
|
|
return logs, err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *DailyLogRepository) Upsert(log *model.DailyLog) error {
|
||
|
|
var existing model.DailyLog
|
||
|
|
err := r.db.Where("date = ?", log.Date).First(&existing).Error
|
||
|
|
if err == gorm.ErrRecordNotFound {
|
||
|
|
return r.db.Create(log).Error
|
||
|
|
}
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
// 更新已有记录
|
||
|
|
existing.Morning = log.Morning
|
||
|
|
existing.Afternoon = log.Afternoon
|
||
|
|
existing.Evening = log.Evening
|
||
|
|
return r.db.Save(&existing).Error
|
||
|
|
}
|