Files
Joshua cce3e061a7
Some checks failed
Dev Build / build-test (pull_request) Failing after 11m6s
Dev Build / build-test (push) Successful in 1m54s
CUB-127: implement Control Center CRUD API in Go
2026-05-06 17:29:44 -04:00

65 lines
1.3 KiB
Go

package store
import (
"sort"
"sync"
"time"
"code.cubecraftcreations.com/CubeCraft-Creations/Control-Center/go-backend/internal/models"
"github.com/google/uuid"
)
// TaskStore provides thread-safe CRUD operations for tasks.
type TaskStore struct {
mu sync.RWMutex
tasks map[string]models.Task
}
// NewTaskStore returns an initialized TaskStore.
func NewTaskStore() *TaskStore {
return &TaskStore{
tasks: make(map[string]models.Task),
}
}
// ListRecent returns tasks ordered by updated_at descending (newest first).
func (s *TaskStore) ListRecent() []models.Task {
s.mu.RLock()
defer s.mu.RUnlock()
result := make([]models.Task, 0, len(s.tasks))
for _, t := range s.tasks {
result = append(result, t)
}
sort.Slice(result, func(i, j int) bool {
return result[i].UpdatedAt.After(result[j].UpdatedAt)
})
return result
}
// Create inserts a new task.
func (s *TaskStore) Create(t models.Task) models.Task {
s.mu.Lock()
defer s.mu.Unlock()
if t.ID == "" {
t.ID = uuid.New().String()
}
now := time.Now().UTC()
if t.CreatedAt.IsZero() {
t.CreatedAt = now
}
if t.UpdatedAt.IsZero() {
t.UpdatedAt = now
}
s.tasks[t.ID] = t
return t
}
// Count returns the total number of tasks.
func (s *TaskStore) Count() int {
s.mu.RLock()
defer s.mu.RUnlock()
return len(s.tasks)
}