diff options
Diffstat (limited to 'golang/api/handlers')
-rw-r--r-- | golang/api/handlers/entities.go | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/golang/api/handlers/entities.go b/golang/api/handlers/entities.go index 9e184d92..708aebdf 100644 --- a/golang/api/handlers/entities.go +++ b/golang/api/handlers/entities.go @@ -29,6 +29,20 @@ type CreatorIdent struct { 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" @@ -66,9 +80,9 @@ func (d *getCreatorID) Handle(params operations.GetCreatorIDParams) middleware.R log.Fatal(err) } api_entity := &models.CreatorEntity{ - Ident: &db_entity_ident.Id, - State: swag.String(db_entity_ident.State()), - Name: swag.String(db_entity_ident.Rev.Name), + 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) @@ -96,6 +110,42 @@ type postCreator struct { } func (d *postCreator) Handle(params operations.PostCreatorParams) middleware.Responder { // get-or-create editgroup based on current editor (session) - // insert new rev, ident, and edit - return middleware.NotImplemented("operation .PostCreatorID has not yet been implemented") + 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) } |