From 45004829c78db9ee0576b21967d078d0a1738ce6 Mon Sep 17 00:00:00 2001 From: Erik Winter Date: Wed, 21 Aug 2024 16:35:44 +0200 Subject: [PATCH] wip --- handler/handler.go | 33 +++++++++++++++++++++++++++++++++ main.go | 15 +++++++++++++-- planner/planner.go | 15 ++++++++++++--- service/storage.go | 13 ------------- storage/memory.go | 24 +++++++++++++----------- storage/storage.go | 20 ++++++++++++++++++++ 6 files changed, 91 insertions(+), 29 deletions(-) create mode 100644 handler/handler.go delete mode 100644 service/storage.go create mode 100644 storage/storage.go diff --git a/handler/handler.go b/handler/handler.go new file mode 100644 index 0000000..8f54513 --- /dev/null +++ b/handler/handler.go @@ -0,0 +1,33 @@ +package handler + +import ( + "encoding/json" + "fmt" + "net/http" + + "code.ewintr.nl/planner/storage" +) + +func Index(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, `{"status":"ok"}`) +} + +func NewSyncHandler(mem storage.Repository) func(w http.ResponseWriter, r *http.Request) { + return func(w http.ResponseWriter, r *http.Request) { + token := r.URL.Query().Get("token") + items, err := mem.NewSince(token) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + body, err := json.Marshal(items) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + fmt.Fprint(w, body) + } + +} diff --git a/main.go b/main.go index aab234c..2405df0 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,17 @@ package main +import ( + "net/http" + + "code.ewintr.nl/planner/handler" + "code.ewintr.nl/planner/storage" +) + func main() { - // td := NewTodoist(os.Getenv("TODOIST_API_TOKEN"), "https://api.todoist.com") - // td.Run() + mem := storage.NewMemory() + + http.HandleFunc("/", handler.Index) + http.HandleFunc("/sync", handler.NewSyncHandler(mem)) + + http.ListenAndServer(":8092", nil) } diff --git a/planner/planner.go b/planner/planner.go index d32a88f..29ef25d 100644 --- a/planner/planner.go +++ b/planner/planner.go @@ -7,19 +7,28 @@ import ( ) type Syncable interface { - LastUpdated() time.Time + ID() string + Updated() time.Time } type Task struct { - ID string + id string description string updated time.Time } func NewTask(description string) Task { return Task{ - ID: uuid.New(), + id: uuid.New().String(), description: description, updated: time.Now(), } } + +func (t *Task) ID() string { + return t.id +} + +func (t *Task) Updated() time.Time { + return t.updated +} diff --git a/service/storage.go b/service/storage.go deleted file mode 100644 index ab69c47..0000000 --- a/service/storage.go +++ /dev/null @@ -1,13 +0,0 @@ -package service - -import "errors" - -var ( - ErrNotFound = errors.New("not found") -) - -type Repository interface { - FindProject(id string) (Project, error) - FindAllProjects() ([]Project, error) - StoreProject(project Project) error -} diff --git a/storage/memory.go b/storage/memory.go index ac6313b..77d6680 100644 --- a/storage/memory.go +++ b/storage/memory.go @@ -3,32 +3,33 @@ package storage import "code.ewintr.nl/planner/planner" type Memory struct { - projects map[string]planner.Task + items map[string]planner.Syncable } func NewMemory() *Memory { return &Memory{ - projects: make(map[string]planner.Task), + items: make(map[string]planner.Syncable), } } -func (m *Memory) StoreProject(project planner.Task) error { - m.projects[project.ID] = project +func (m *Memory) StoreProject(item planner.Syncable) error { + m.items[item.ID()] = item return nil } +/* func (m *Memory) RemoveProject(id string) error { - if _, ok := m.projects[id]; !ok { + if _, ok := m.items[id]; !ok { return ErrNotFound } - delete(m.projects, id) + delete(m.items, id) return nil } func (m *Memory) FindProject(id string) (Project, error) { - project, ok := m.projects[id] + project, ok := m.items[id] if !ok { return Project{}, ErrNotFound } @@ -36,9 +37,10 @@ func (m *Memory) FindProject(id string) (Project, error) { } func (m *Memory) FindAllProjects() ([]Project, error) { - projects := make([]Project, 0, len(m.projects)) - for _, p := range m.projects { - projects = append(projects, p) + items := make([]Project, 0, len(m.items)) + for _, p := range m.items { + items = append(items, p) } - return projects, nil + return items, nil } +*/ diff --git a/storage/storage.go b/storage/storage.go new file mode 100644 index 0000000..9dd3b92 --- /dev/null +++ b/storage/storage.go @@ -0,0 +1,20 @@ +package storage + +import ( + "errors" + "time" + + "code.ewintr.nl/planner/planner" +) + +var ( + ErrNotFound = errors.New("not found") +) + +type Repository interface { + NewSince(t time.Time) ([]planner.Syncable, error) + Store(item planner.Syncable) error + // FindTask(id string) (planner.Task, error) + // FindAllTasks() ([]planner.Task, error) + // StoreTask(project planner.Task) error +}