package routers import ( "encoding/json" "net/http" tasks "queues-go/app/storage/mongo/collections" ) type TaskResponse struct { Id string `json:"id"` Attempt int `json:"attempt"` Payload interface{} `json:"payload"` } type TakeResponse struct { Task *TaskResponse `json:"task"` } func Take(w http.ResponseWriter, r *http.Request) { queue := r.Header.Get("queue") task, err := tasks.Take(queue) if err != nil { println("Error taking") w.WriteHeader(http.StatusInternalServerError) return } var response TakeResponse if task == nil { response.Task = nil } else { response.Task = &TaskResponse{ Id: task.Id.Hex(), Attempt: task.Attempts, Payload: task.Payload, } } data, err := json.Marshal(response) if err != nil { println("Error marshalling") w.WriteHeader(http.StatusInternalServerError) return } w.Write(data) }