diff options
Diffstat (limited to 'golang/api/handlers/entities.go')
-rw-r--r-- | golang/api/handlers/entities.go | 151 |
1 files changed, 0 insertions, 151 deletions
diff --git a/golang/api/handlers/entities.go b/golang/api/handlers/entities.go deleted file mode 100644 index 708aebdf..00000000 --- a/golang/api/handlers/entities.go +++ /dev/null @@ -1,151 +0,0 @@ - -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/restapi/operations" -) - -type CreatorRev struct { - Id int64 - ExtraJson string - Name string - Orcid string - tableName struct{} `sql:"creator_rev"` -} - -type CreatorIdent struct { - Id string - IsLive bool - RevId int64 - Rev *CreatorRev - RedirectId string - Redirect *CreatorIdent - tableName struct{} `sql:"creator_ident"` -} - -type CreatorEdit struct { - Id int64 - ExtraJson string - IdentId string - Ident *CreatorIdent - RevId int64 - Rev *CreatorRev - RedirectId string - Redirect *CreatorIdent - EditgroupId int64 - Editgroup *Editgroup - tableName struct{} `sql:"creator_edit"` -} - -func (ci *CreatorIdent) State() string { - if ci.IsLive && (ci.RedirectId == "") && (ci.RevId == 0) { - return "deleted" - } else if ci.IsLive && (ci.RedirectId != "") { - return "redirect" - } else if ci.IsLive && (ci.RedirectId == "") && (ci.RevId != 0) { - return "active" - } else if !ci.IsLive && (ci.RedirectId == "") && (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} -} -type getCreatorID struct { - db *pg.DB -} -func (d *getCreatorID) Handle(params operations.GetCreatorIDParams) middleware.Responder { - // "get or 404" using params.ID. join creator_ident and creator_rev. - // populate result data - // return that - db_entity_ident := &CreatorIdent{} - err := d.db.Model(db_entity_ident). - Column("creator_ident.*", "Rev"). - Where("creator_ident.id = ?", swag.StringValue(¶ms.ID)). - First() - 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: db_entity_ident.State(), - Name: db_entity_ident.Rev.Name, - Orcid: db_entity_ident.Rev.Orcid, - } - return operations.NewGetCreatorIDOK().WithPayload(api_entity) -} - -//// -func NewGetCreatorLookupHandler(db *pg.DB) operations.GetCreatorLookupHandler { - return &getCreatorLookup{db: db} -} -type getCreatorLookup struct { - db *pg.DB -} -func (d *getCreatorLookup) Handle(params operations.GetCreatorLookupParams) middleware.Responder { - // get-or-create editgroup based on current editor (session) - // insert new rev, ident, and edit - return middleware.NotImplemented("operation .GetCreatorLookup has not yet been implemented") -} - -//// -func NewPostCreatorHandler(db *pg.DB) operations.PostCreatorHandler { - return &postCreator{db: db} -} -type postCreator struct { - db *pg.DB -} -func (d *postCreator) Handle(params operations.PostCreatorParams) middleware.Responder { - // get-or-create editgroup based on current editor (session) - var eg Editgroup - if true { - eg = Editgroup{Id: 1} - } else { - eg = GetOrCreateEditgroup() - } - ce := CreatorEdit{} - - // big honking SQL to update 3 tables in a single INSERT - _, err := d.db.QueryOne( - //Model(ce).ExecOne( - &ce, - `WITH rev AS ( INSERT INTO creator_rev (name, orcid) - VALUES (?, ?) - RETURNING id ), - ident AS ( INSERT INTO creator_ident (rev_id) - VALUES ((SELECT rev.id FROM rev)) - RETURNING id ) - INSERT INTO creator_edit (editgroup_id, ident_id, rev_id) VALUES - (?, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev)) - RETURNING *`, - params.Body.Name, - params.Body.Orcid, - eg.Id) - if err != nil { - log.Fatal(err) - } - if err != nil { - log.Fatal(err) - } - // redirect? or return the edit? - api_edit:= models.EntityEdit { - ID: ce.Id, - Ident: ce.IdentId, - Revision: ce.RevId, - EditgroupID: ce.EditgroupId, - } - return operations.NewPostCreatorCreated().WithPayload(&api_edit) -} |