package httpapi import ( "encoding/json" "net/http" "github.com/vasyansk/imap-copier/internal/store" ) func (s *Server) handleCreateTask(w http.ResponseWriter, r *http.Request) { var t store.Task if err := json.NewDecoder(r.Body).Decode(&t); err != nil { http.Error(w, "bad json", http.StatusBadRequest) return } id, err := s.store.CreateTask(r.Context(), t) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } writeJSON(w, http.StatusCreated, map[string]int64{"id": id}) } func (s *Server) handleListTasks(w http.ResponseWriter, r *http.Request) { tasks, err := s.store.ListTasks(r.Context()) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } writeJSON(w, http.StatusOK, tasks) } func (s *Server) handleGetTask(w http.ResponseWriter, r *http.Request) { id, err := pathID(r, "id") if err != nil { http.Error(w, "bad id", http.StatusBadRequest) return } task, err := s.store.GetTask(r.Context(), id) if err != nil { http.Error(w, "not found", http.StatusNotFound) return } accs, err := s.store.ListAccountsByTask(r.Context(), id) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } views := make([]AccountView, 0, len(accs)) for _, a := range accs { views = append(views, accountDTO(a)) } writeJSON(w, http.StatusOK, map[string]any{"task": task, "accounts": views}) }