diff options
| author | Bryan Newbold <bnewbold@robocracy.org> | 2018-05-10 17:10:19 -0700 | 
|---|---|---|
| committer | Bryan Newbold <bnewbold@robocracy.org> | 2018-05-10 17:10:19 -0700 | 
| commit | c6422b49b8b946386ca1068ec6887bbf07a8b166 (patch) | |
| tree | c6c082c0875edfbb0eeb7379813e01024fa74367 /golang | |
| parent | 8827f2a643b5dee773869eccb5d839f636b2295d (diff) | |
| download | fatcat-c6422b49b8b946386ca1068ec6887bbf07a8b166.tar.gz fatcat-c6422b49b8b946386ca1068ec6887bbf07a8b166.zip | |
404 example
Diffstat (limited to 'golang')
| -rw-r--r-- | golang/api/handlers/entities.go | 56 | ||||
| -rw-r--r-- | golang/cmd/fatcatd/serve.go | 2 | ||||
| -rw-r--r-- | golang/fatcat-openapi2.yml | 6 | ||||
| -rw-r--r-- | golang/gen/models/creator_entity.go | 43 | ||||
| -rw-r--r-- | golang/gen/restapi/embedded_spec.go | 28 | ||||
| -rw-r--r-- | golang/gen/restapi/operations/get_creator_id_responses.go | 44 | 
6 files changed, 172 insertions, 7 deletions
| diff --git a/golang/api/handlers/entities.go b/golang/api/handlers/entities.go index 61104553..9331a588 100644 --- a/golang/api/handlers/entities.go +++ b/golang/api/handlers/entities.go @@ -3,12 +3,46 @@ package handlers  import (      "github.com/go-pg/pg" +    "github.com/go-openapi/swag"      "github.com/go-openapi/runtime/middleware" +    log "github.com/sirupsen/logrus" -	//"git.archive.org/bnewbold/fatcat/golang/gen/models" +	"git.archive.org/bnewbold/fatcat/golang/gen/models"  	"git.archive.org/bnewbold/fatcat/golang/gen/restapi/operations"  ) +type CreatorRev struct { +    tableName struct{} `sql:"creator_rev"` +    Id          string +    ExtraJson   string +    Name        string +    Orcid       string +} + +type CreatorIdent struct { +    tableName struct{} `sql:"creator_ident"` +    Id          string +    IsLive      bool +    RevId       int64 +    //Rev         *CreatorRev +    RedirectId  int64 +} + +func (ci *CreatorIdent) State() string { +    if ci.IsLive && (ci.RedirectId == 0) && (ci.RevId == 0) { +        return "deleted" +    } else if ci.IsLive && (ci.RedirectId != 0) { +        return "redirect" +    } else if ci.IsLive && (ci.RedirectId == 0) && (ci.RevId != 0) { +        return "active" +    } else if !ci.IsLive && (ci.RedirectId == 0) && (ci.RevId != 0) { +        return "wip" +    } else { +        log.Fatalf("Invalid CreatorIdent state: %v", ci) +        panic("fail") +    } +} +  func NewGetCreatorIDHandler(db *pg.DB) operations.GetCreatorIDHandler {      return &getCreatorID{db: db}  } @@ -21,9 +55,25 @@ func (d *getCreatorID) Handle(params operations.GetCreatorIDParams) middleware.R      // "get or 404" using params.ID. join creator_ident and creator_rev.      // populate result data      // return that -    return middleware.NotImplemented("operation .GetCreatorID has not yet been implemented. Coming soon!") -} +    db_entity_ident := &CreatorIdent{Id: swag.StringValue(¶ms.ID)} +    err := d.db.Select(db_entity_ident) +    //err := d.db.Model(db_entity_ident).Select() +    //    Relation("Rev"). +    //    Select() +    if err == pg.ErrNoRows { +        return operations.NewGetCreatorIDNotFound().WithPayload(&models.Error{Message: swag.String("no such entity")}) +    } else if err != nil { +        log.Fatal(err) +    } +    api_entity := &models.CreatorEntity{ +        Ident: &db_entity_ident.Id, +        State: swag.String(db_entity_ident.State()), +        //Name: db_entity_ident.Rev.Name, +        //Orcid: db_entity_ident.Rev.Orcid, +    } +    return operations.NewGetCreatorIDOK().WithPayload(api_entity) +}  func NewPostCreatorHandler(db *pg.DB) operations.PostCreatorHandler { diff --git a/golang/cmd/fatcatd/serve.go b/golang/cmd/fatcatd/serve.go index f1eeb995..638fe6ce 100644 --- a/golang/cmd/fatcatd/serve.go +++ b/golang/cmd/fatcatd/serve.go @@ -49,7 +49,7 @@ func main_serve() {      db_options, err := pg.ParseURL(viper.GetString("db_url"))      if err != nil { -        log.Panicf("parsing DB string: {}", err) +        log.Panicf("parsing DB string: %v", err)      }      db := pg.Connect(db_options)      defer db.Close() diff --git a/golang/fatcat-openapi2.yml b/golang/fatcat-openapi2.yml index 85d3b4fc..8f2feec9 100644 --- a/golang/fatcat-openapi2.yml +++ b/golang/fatcat-openapi2.yml @@ -34,7 +34,7 @@ definitions:      properties:        state:           type: string -        # actually enum of: (wip, active, redirect, deleted) +        enum: ["wip", "active", "redirect", "deleted"]        ident:          type: string          # format: uuid @@ -79,6 +79,10 @@ paths:            description: fetch a single creator by id            schema:              $ref: "#/definitions/creator_entity" +        404: +          description: no such creator +          schema: +            $ref: "#/definitions/error"          default:            description: generic error response            schema: diff --git a/golang/gen/models/creator_entity.go b/golang/gen/models/creator_entity.go index d094376a..be3bb6d1 100644 --- a/golang/gen/models/creator_entity.go +++ b/golang/gen/models/creator_entity.go @@ -6,6 +6,8 @@ package models  // Editing this file might prove futile when you re-run the swagger generate command  import ( +	"encoding/json" +  	strfmt "github.com/go-openapi/strfmt"  	"github.com/go-openapi/errors" @@ -35,6 +37,7 @@ type CreatorEntity struct {  	// state  	// Required: true +	// Enum: [wip active redirect deleted]  	State *string `json:"state"`  } @@ -65,12 +68,52 @@ func (m *CreatorEntity) validateIdent(formats strfmt.Registry) error {  	return nil  } +var creatorEntityTypeStatePropEnum []interface{} + +func init() { +	var res []string +	if err := json.Unmarshal([]byte(`["wip","active","redirect","deleted"]`), &res); err != nil { +		panic(err) +	} +	for _, v := range res { +		creatorEntityTypeStatePropEnum = append(creatorEntityTypeStatePropEnum, v) +	} +} + +const ( + +	// CreatorEntityStateWip captures enum value "wip" +	CreatorEntityStateWip string = "wip" + +	// CreatorEntityStateActive captures enum value "active" +	CreatorEntityStateActive string = "active" + +	// CreatorEntityStateRedirect captures enum value "redirect" +	CreatorEntityStateRedirect string = "redirect" + +	// CreatorEntityStateDeleted captures enum value "deleted" +	CreatorEntityStateDeleted string = "deleted" +) + +// prop value enum +func (m *CreatorEntity) validateStateEnum(path, location string, value string) error { +	if err := validate.Enum(path, location, value, creatorEntityTypeStatePropEnum); err != nil { +		return err +	} +	return nil +} +  func (m *CreatorEntity) validateState(formats strfmt.Registry) error {  	if err := validate.Required("state", "body", m.State); err != nil {  		return err  	} +	// value enum +	if err := m.validateStateEnum("state", "body", *m.State); err != nil { +		return err +	} +  	return nil  } diff --git a/golang/gen/restapi/embedded_spec.go b/golang/gen/restapi/embedded_spec.go index 6a6cf356..4e08594f 100644 --- a/golang/gen/restapi/embedded_spec.go +++ b/golang/gen/restapi/embedded_spec.go @@ -72,6 +72,12 @@ func init() {                "$ref": "#/definitions/creator_entity"              }            }, +          "404": { +            "description": "no such creator", +            "schema": { +              "$ref": "#/definitions/error" +            } +          },            "default": {              "description": "generic error response",              "schema": { @@ -114,7 +120,13 @@ func init() {            "type": "string"          },          "state": { -          "type": "string" +          "type": "string", +          "enum": [ +            "wip", +            "active", +            "redirect", +            "deleted" +          ]          }        }      }, @@ -186,6 +198,12 @@ func init() {                "$ref": "#/definitions/creator_entity"              }            }, +          "404": { +            "description": "no such creator", +            "schema": { +              "$ref": "#/definitions/error" +            } +          },            "default": {              "description": "generic error response",              "schema": { @@ -228,7 +246,13 @@ func init() {            "type": "string"          },          "state": { -          "type": "string" +          "type": "string", +          "enum": [ +            "wip", +            "active", +            "redirect", +            "deleted" +          ]          }        }      }, diff --git a/golang/gen/restapi/operations/get_creator_id_responses.go b/golang/gen/restapi/operations/get_creator_id_responses.go index 4c1cee1b..58dcb687 100644 --- a/golang/gen/restapi/operations/get_creator_id_responses.go +++ b/golang/gen/restapi/operations/get_creator_id_responses.go @@ -57,6 +57,50 @@ func (o *GetCreatorIDOK) WriteResponse(rw http.ResponseWriter, producer runtime.  	}  } +// GetCreatorIDNotFoundCode is the HTTP code returned for type GetCreatorIDNotFound +const GetCreatorIDNotFoundCode int = 404 + +/*GetCreatorIDNotFound no such creator + +swagger:response getCreatorIdNotFound +*/ +type GetCreatorIDNotFound struct { + +	/* +	  In: Body +	*/ +	Payload *models.Error `json:"body,omitempty"` +} + +// NewGetCreatorIDNotFound creates GetCreatorIDNotFound with default headers values +func NewGetCreatorIDNotFound() *GetCreatorIDNotFound { + +	return &GetCreatorIDNotFound{} +} + +// WithPayload adds the payload to the get creator Id not found response +func (o *GetCreatorIDNotFound) WithPayload(payload *models.Error) *GetCreatorIDNotFound { +	o.Payload = payload +	return o +} + +// SetPayload sets the payload to the get creator Id not found response +func (o *GetCreatorIDNotFound) SetPayload(payload *models.Error) { +	o.Payload = payload +} + +// WriteResponse to the client +func (o *GetCreatorIDNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + +	rw.WriteHeader(404) +	if o.Payload != nil { +		payload := o.Payload +		if err := producer.Produce(rw, payload); err != nil { +			panic(err) // let the recovery middleware deal with this +		} +	} +} +  /*GetCreatorIDDefault generic error response  swagger:response getCreatorIdDefault | 
