// PostCompany creates a new company after validating by key. func PostCompany(ctx context.Context, w http.ResponseWriter, r *http.Request) (status int, err error) { if r.Method != "POST" { return http.StatusMethodNotAllowed, nil } var company model.Company if err = json.NewDecoder(r.Body).Decode(&company); err != nil { return http.StatusBadRequest, err } var companies model.Companys _, err = model.NewQueryForCompany(). Filter("Address =", company.Address.Address). Limit(1). GetAll(ctx, &companies) if err != nil { return http.StatusInternalServerError, err } if len(companies) > 0 { return http.StatusConflict, errors.New("already registered") } var key *datastore.Key if key, err = company.Put(ctx, nil); err != nil { return http.StatusInternalServerError, err } // TODO(flowlo): Respond with HTTP 201 and include a // location header and caching information. json.NewEncoder(w).Encode(company.Key(key)) return http.StatusOK, nil }
// CreateAndSaveCompany creates a new Company and saves it to datastore using the provided context func CreateAndSaveCompany(t *testing.T, ctx context.Context, name, email string) (model.Company, *datastore.Key) { if name == "" { name = "Example Company" } if email == "" { email = "*****@*****.**" } company := model.Company{ Address: mail.Address{ Name: name, Address: email, }, } var err error var key *datastore.Key key, err = company.Put(ctx, nil) if err != nil { t.Fatal(err) } return company, key }