Initial commit: Homelab API
This commit is contained in:
126
internal/service/task.go
Normal file
126
internal/service/task.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"time"
|
||||
|
||||
"github.com/daniil/homelab-api/internal/model"
|
||||
"github.com/daniil/homelab-api/internal/repository"
|
||||
)
|
||||
|
||||
type TaskService struct {
|
||||
taskRepo *repository.TaskRepository
|
||||
}
|
||||
|
||||
func NewTaskService(taskRepo *repository.TaskRepository) *TaskService {
|
||||
return &TaskService{taskRepo: taskRepo}
|
||||
}
|
||||
|
||||
func (s *TaskService) Create(userID int64, req *model.CreateTaskRequest) (*model.Task, error) {
|
||||
task := &model.Task{
|
||||
UserID: userID,
|
||||
Title: req.Title,
|
||||
Description: req.Description,
|
||||
Icon: defaultString(req.Icon, "📋"),
|
||||
Color: defaultString(req.Color, "#6B7280"),
|
||||
Priority: req.Priority,
|
||||
}
|
||||
|
||||
if req.DueDate != nil && *req.DueDate != "" {
|
||||
parsed, err := time.Parse("2006-01-02", *req.DueDate)
|
||||
if err == nil {
|
||||
task.DueDate = sql.NullTime{Time: parsed, Valid: true}
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.taskRepo.Create(task); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
task.ProcessForJSON()
|
||||
return task, nil
|
||||
}
|
||||
|
||||
func (s *TaskService) Get(id, userID int64) (*model.Task, error) {
|
||||
return s.taskRepo.GetByID(id, userID)
|
||||
}
|
||||
|
||||
func (s *TaskService) List(userID int64, completed *bool) ([]model.Task, error) {
|
||||
tasks, err := s.taskRepo.ListByUser(userID, completed)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if tasks == nil {
|
||||
tasks = []model.Task{}
|
||||
}
|
||||
return tasks, nil
|
||||
}
|
||||
|
||||
func (s *TaskService) GetTodayTasks(userID int64) ([]model.Task, error) {
|
||||
tasks, err := s.taskRepo.GetTodayTasks(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if tasks == nil {
|
||||
tasks = []model.Task{}
|
||||
}
|
||||
return tasks, nil
|
||||
}
|
||||
|
||||
func (s *TaskService) Update(id, userID int64, req *model.UpdateTaskRequest) (*model.Task, error) {
|
||||
task, err := s.taskRepo.GetByID(id, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.Title != nil {
|
||||
task.Title = *req.Title
|
||||
}
|
||||
if req.Description != nil {
|
||||
task.Description = *req.Description
|
||||
}
|
||||
if req.Icon != nil {
|
||||
task.Icon = *req.Icon
|
||||
}
|
||||
if req.Color != nil {
|
||||
task.Color = *req.Color
|
||||
}
|
||||
if req.Priority != nil {
|
||||
task.Priority = *req.Priority
|
||||
}
|
||||
if req.DueDate != nil {
|
||||
if *req.DueDate == "" {
|
||||
task.DueDate = sql.NullTime{Valid: false}
|
||||
} else {
|
||||
parsed, err := time.Parse("2006-01-02", *req.DueDate)
|
||||
if err == nil {
|
||||
task.DueDate = sql.NullTime{Time: parsed, Valid: true}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err := s.taskRepo.Update(task); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
task.ProcessForJSON()
|
||||
return task, nil
|
||||
}
|
||||
|
||||
func (s *TaskService) Delete(id, userID int64) error {
|
||||
return s.taskRepo.Delete(id, userID)
|
||||
}
|
||||
|
||||
func (s *TaskService) Complete(id, userID int64) (*model.Task, error) {
|
||||
if err := s.taskRepo.Complete(id, userID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.taskRepo.GetByID(id, userID)
|
||||
}
|
||||
|
||||
func (s *TaskService) Uncomplete(id, userID int64) (*model.Task, error) {
|
||||
if err := s.taskRepo.Uncomplete(id, userID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.taskRepo.GetByID(id, userID)
|
||||
}
|
||||
Reference in New Issue
Block a user