예제 #1
0
파일: db.go 프로젝트: elos/gaia
func (db *DB) deleteRecord(r data.Record) error {
	url := db.recordURL(url.Values{
		"kind": []string{r.Kind().String()},
		"id":   []string{r.ID().String()},
	})

	resp, err := db.deleteReq(url)
	if err != nil {
		log.Printf("gaia.(*DB).save Error: while making request: %s", err)
		return data.ErrNoConnection
	}

	switch resp.StatusCode {
	case http.StatusBadRequest:
		log.Print("gaia.(*DB).deleteRecord Error: malformed request")
		return data.ErrNoConnection
	case http.StatusInternalServerError:
		return data.ErrNoConnection
	case http.StatusUnauthorized:
		return data.ErrAccessDenial
	case http.StatusNotFound:
		return data.ErrNotFound
	case http.StatusNoContent:
		// pass, there is nothing to do, the delete has succeeded
	default:
		log.Printf("gaia.(*DB).deleteRecord Error: unexpected status code: %d", resp.StatusCode)
		return data.ErrNoConnection
	}

	return nil
}
예제 #2
0
파일: db.go 프로젝트: elos/gaia
func (db *DB) PopulateByField(field string, value interface{}, r data.Record) error {
	iter, err := db.query(&query{kind: r.Kind(), attrs: data.AttrMap{
		field: value,
	}})

	if err != nil {
		return err
	}

	if !iter.Next(r) {
		return data.ErrNotFound
	}

	return iter.Close()
}
예제 #3
0
파일: db.go 프로젝트: elos/gaia
func (db *DB) PopulateByID(r data.Record) error {
	params := url.Values{}
	params.Set("kind", r.Kind().String())
	params.Set("id", r.ID().String())
	url := db.recordURL(params)

	resp, err := db.get(url)

	if err != nil {
		return err
	}

	switch resp.StatusCode {
	case http.StatusBadRequest:
		log.Print("gaia.(*DB).PopulateByID Bad Request Error")
		fallthrough
	case http.StatusInternalServerError:
		log.Print("gaia.(*DB).PopulateByID Internal Server Error")
		fallthrough
	case http.StatusUnauthorized:
		log.Print("gaia.(*DB).PopulateByID Unauthorized Server Error")
		fallthrough
	case -1: // catch
		return data.ErrAccessDenial
	case http.StatusNotFound:
		return data.ErrNotFound
	case http.StatusCreated:
	case http.StatusOK:
		defer resp.Body.Close()
		body, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			return err
		}

		return json.Unmarshal(body, r)
	default:
		log.Printf("Unexpected status code: %d", resp.StatusCode)
		return data.ErrNoConnection
	}

	return nil
}
예제 #4
0
파일: db.go 프로젝트: elos/gaia
func (db *DB) save(r data.Record) error {
	// setup Params
	url := db.recordURL(url.Values{
		"kind": []string{r.Kind().String()},
		"id":   []string{r.ID().String()},
	})

	resp, err := db.postJSON(url, r)
	if err != nil {
		log.Printf("gaia.(*DB).save Error: while making request: %s", err)
		return data.ErrNoConnection
	}

	switch resp.StatusCode {
	case http.StatusBadRequest:
		log.Print("gaia.(*DB).save Error: malformed request")
		return data.ErrNoConnection
	case http.StatusInternalServerError:
		return data.ErrNoConnection
	case http.StatusUnauthorized:
		return data.ErrAccessDenial
	case http.StatusCreated:
		fallthrough
	case http.StatusOK:
		defer resp.Body.Close()
		body, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			log.Printf("gaia.(*DB).save Error: reading response body: %s", err)
			return data.ErrNoConnection
		}

		if err := json.Unmarshal(body, r); err != nil {
			log.Printf("gaia.(*DB).save Error: unmarshalling JSON into record: %s", err)
			return data.ErrNoConnection
		}
	default:
		log.Printf("gaia.(*DB).save Error: unexpected status code: %d", resp.StatusCode)
		return data.ErrNoConnection
	}

	return nil
}