Files
lifelog/internal/service/service.go
T
rhett d495a2b798 feat: initial lifelog project
- 待办事项(支持优先级、截止日期)
- 每日记录(上午/下午/晚上分条目)
- Go后端 + Gin + GORM + MySQL
- React前端 + TailwindCSS
2026-07-28 16:22:46 +08:00

100 lines
2.1 KiB
Go

package service
import (
"errors"
"lifelog/internal/model"
"lifelog/internal/repository"
"time"
)
type TodoService struct {
repo *repository.TodoRepository
}
func NewTodoService(repo *repository.TodoRepository) *TodoService {
return &TodoService{repo: repo}
}
func (s *TodoService) GetAll() ([]model.Todo, error) {
return s.repo.GetAll()
}
func (s *TodoService) Create(title string, priority int, dueDate *time.Time) (*model.Todo, error) {
todo := &model.Todo{
Title: title,
Done: false,
Priority: priority,
DueDate: dueDate,
}
err := s.repo.Create(todo)
return todo, err
}
func (s *TodoService) Update(id uint64, title string, priority int, done bool, dueDate *time.Time) (*model.Todo, error) {
todo, err := s.repo.GetByID(id)
if err != nil {
return nil, err
}
todo.Title = title
todo.Priority = priority
todo.Done = done
todo.DueDate = dueDate
err = s.repo.Update(todo)
return todo, err
}
func (s *TodoService) ToggleDone(id uint64) (*model.Todo, error) {
todo, err := s.repo.GetByID(id)
if err != nil {
return nil, err
}
todo.Done = !todo.Done
err = s.repo.Update(todo)
return todo, err
}
func (s *TodoService) Delete(id uint64) error {
return s.repo.Delete(id)
}
type DailyLogService struct {
repo *repository.DailyLogRepository
}
func NewDailyLogService(repo *repository.DailyLogRepository) *DailyLogService {
return &DailyLogService{repo: repo}
}
func (s *DailyLogService) GetByDate(date string) (*model.DailyLog, error) {
log, err := s.repo.GetByDate(date)
if err != nil {
return nil, err
}
if log == nil {
// 返回空记录
return &model.DailyLog{Date: date}, nil
}
return log, nil
}
func (s *DailyLogService) GetRecent(limit int) ([]model.DailyLog, error) {
if limit <= 0 {
limit = 30
}
return s.repo.GetRecent(limit)
}
func (s *DailyLogService) Save(date, morning, afternoon, evening string) (*model.DailyLog, error) {
if date == "" {
return nil, errors.New("date is required")
}
log := &model.DailyLog{
Date: date,
Morning: morning,
Afternoon: afternoon,
Evening: evening,
}
err := s.repo.Upsert(log)
return log, err
}