aboutsummaryrefslogtreecommitdiffstats
path: root/golang
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2018-05-10 17:10:19 -0700
committerBryan Newbold <bnewbold@robocracy.org>2018-05-10 17:10:19 -0700
commitc6422b49b8b946386ca1068ec6887bbf07a8b166 (patch)
treec6c082c0875edfbb0eeb7379813e01024fa74367 /golang
parent8827f2a643b5dee773869eccb5d839f636b2295d (diff)
downloadfatcat-c6422b49b8b946386ca1068ec6887bbf07a8b166.tar.gz
fatcat-c6422b49b8b946386ca1068ec6887bbf07a8b166.zip
404 example
Diffstat (limited to 'golang')
-rw-r--r--golang/api/handlers/entities.go56
-rw-r--r--golang/cmd/fatcatd/serve.go2
-rw-r--r--golang/fatcat-openapi2.yml6
-rw-r--r--golang/gen/models/creator_entity.go43
-rw-r--r--golang/gen/restapi/embedded_spec.go28
-rw-r--r--golang/gen/restapi/operations/get_creator_id_responses.go44
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(&params.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