Exemplo n.º 1
0
func handleNewJob(w http.ResponseWriter, r *http.Request) {
	token, err := ParseToken(r)
	if err != nil {
		WriteJsonErr(w, 401, err)
		return
	}

	matches := jobPat.FindStringSubmatch(r.URL.Path)
	if len(matches) < 2 || len(matches[1]) == 0 {
		WriteJsonErr(w, 400, errors.New("Job id not found."))
		return
	}
	// Trim the forward slash that came from the url path.
	id := string(matches[1][1:])
	if len(id) == 0 {
		WriteJsonErr(w, 400, errors.New("Job id not found."))
		return
	}

	b, err := ioutil.ReadAll(r.Body)
	if err != nil {
		WriteJsonErr(w, 500, err)
		return
	}

	j := store.Job{Id: id, QueueId: token}
	err = json.Unmarshal(b, &j.Payload)
	if err != nil {
		WriteJsonErr(w, 400, err)
		return
	}

	if ok := j.Get(); ok {
		WriteJson(w, 200, j)
		return
	}

	err = j.Insert()
	if err != nil {
		WriteJsonErr(w, 500, err)
		return
	}
	WriteJson(w, 201, j)
}