2024-09-19 23:13:04 +00:00
|
|
|
package tasks
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"github.com/google/uuid"
|
2024-09-29 06:36:39 +00:00
|
|
|
"github.com/maddalax/htmgo/framework/h"
|
2024-09-23 01:59:44 +00:00
|
|
|
"github.com/maddalax/htmgo/framework/service"
|
2024-09-19 23:13:04 +00:00
|
|
|
"time"
|
|
|
|
|
"todolist/ent"
|
|
|
|
|
"todolist/ent/predicate"
|
|
|
|
|
"todolist/ent/task"
|
2024-09-29 06:36:39 +00:00
|
|
|
"todolist/internal/util"
|
2024-09-19 23:13:04 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Service struct {
|
2024-09-29 06:36:39 +00:00
|
|
|
db *ent.Client
|
|
|
|
|
ipAddress string
|
2024-09-19 23:13:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type CreateRequest struct {
|
|
|
|
|
Name string
|
|
|
|
|
Tags []string
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-29 06:36:39 +00:00
|
|
|
func NewService(ctx *h.RequestContext) Service {
|
2024-09-19 23:13:04 +00:00
|
|
|
return Service{
|
2024-09-29 06:36:39 +00:00
|
|
|
ipAddress: util.GetClientIp(ctx.Request),
|
|
|
|
|
db: service.Get[ent.Client](ctx.ServiceLocator()),
|
2024-09-19 23:13:04 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) Create(request CreateRequest) (*ent.Task, error) {
|
|
|
|
|
return s.db.Task.Create().
|
|
|
|
|
SetName(request.Name).
|
|
|
|
|
SetTags(request.Tags).
|
2024-09-29 06:36:39 +00:00
|
|
|
SetIPAddress(s.ipAddress).
|
2024-09-19 23:13:04 +00:00
|
|
|
Save(context.Background())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) Get(id uuid.UUID) (*ent.Task, error) {
|
|
|
|
|
return s.db.Task.Get(context.Background(), id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) SetName(id uuid.UUID, name string) (*ent.Task, error) {
|
2024-09-29 06:36:39 +00:00
|
|
|
return s.db.Task.UpdateOneID(id).Where(task.IPAddress(s.ipAddress)).SetName(name).Save(context.Background())
|
2024-09-19 23:13:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) SetAllCompleted(value bool) error {
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
updater := s.db.Task.Update()
|
|
|
|
|
|
|
|
|
|
if value {
|
|
|
|
|
updater = updater.SetCompletedAt(time.Now())
|
|
|
|
|
} else {
|
|
|
|
|
updater = updater.ClearCompletedAt()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_, err := updater.
|
2024-09-29 06:36:39 +00:00
|
|
|
Where(task.IPAddress(s.ipAddress)).
|
2024-09-19 23:13:04 +00:00
|
|
|
SetUpdatedAt(time.Now()).
|
|
|
|
|
Save(ctx)
|
|
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) ClearCompleted() error {
|
|
|
|
|
ctx := context.Background()
|
2024-09-29 06:36:39 +00:00
|
|
|
_, err := s.db.Task.Delete().Where(task.CompletedAtNotNil(), task.IPAddress(s.ipAddress)).Exec(ctx)
|
2024-09-19 23:13:04 +00:00
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) SetCompleted(id uuid.UUID, value bool) (*ent.Task, error) {
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
updater := s.db.Task.UpdateOneID(id)
|
|
|
|
|
|
|
|
|
|
if value {
|
|
|
|
|
updater = updater.SetCompletedAt(time.Now())
|
|
|
|
|
} else {
|
|
|
|
|
updater = updater.ClearCompletedAt()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return updater.
|
|
|
|
|
SetUpdatedAt(time.Now()).
|
2024-09-29 06:36:39 +00:00
|
|
|
Where(task.IPAddress(s.ipAddress)).
|
2024-09-19 23:13:04 +00:00
|
|
|
Save(ctx)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) List(ps ...predicate.Task) ([]*ent.Task, error) {
|
2024-09-29 06:36:39 +00:00
|
|
|
ps = append(ps, task.IPAddress(s.ipAddress))
|
2024-09-19 23:13:04 +00:00
|
|
|
return s.db.Task.Query().Where(ps...).All(context.Background())
|
|
|
|
|
}
|