|
@@ -0,0 +1,167 @@
|
|
|
+package got
|
|
|
+
|
|
|
+import (
|
|
|
+ "text/template"
|
|
|
+
|
|
|
+ . "git.eugeniocarvalho.dev/eugeniucarvalho/apicodegen/common"
|
|
|
+ G "github.com/dave/jennifer/jen"
|
|
|
+)
|
|
|
+
|
|
|
+var (
|
|
|
+ pipeStmtsTmpl *template.Template
|
|
|
+ pipeStmtsErr error
|
|
|
+)
|
|
|
+
|
|
|
+func init() {
|
|
|
+
|
|
|
+ pipeStmtsTmpl, pipeStmtsErr = ParseTemplate(`
|
|
|
+ {{if .preconditions}}
|
|
|
+ if resp, err = executeAction(
|
|
|
+ ctx,
|
|
|
+ {{.preconditions}},
|
|
|
+ ); err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ {{end}}
|
|
|
+ return`)
|
|
|
+
|
|
|
+ if pipeStmtsErr != nil {
|
|
|
+ panic(pipeStmtsErr)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+var (
|
|
|
+ GenPipeStmts = &Middleware{
|
|
|
+ Id: "post",
|
|
|
+ Type: "method",
|
|
|
+ Fn: func(ctx *MiddlewareContext) error {
|
|
|
+
|
|
|
+ var (
|
|
|
+ method = ctx.Method
|
|
|
+ context = map[string]interface{}{
|
|
|
+ "preconditions": parseMethodActions(method.Preconditions),
|
|
|
+ }
|
|
|
+ )
|
|
|
+ // Nome do metodo que verifica se a entidade tem dependencias
|
|
|
+ out, _ := TemplateToString(pipeStmtsTmpl, context)
|
|
|
+ ctx.Statement.Block(G.Id(out)).Line()
|
|
|
+ return nil
|
|
|
+ },
|
|
|
+ }
|
|
|
+)
|
|
|
+
|
|
|
+// var (
|
|
|
+// project = ctx.Project
|
|
|
+// method = ctx.Method
|
|
|
+// responseEntity = GenericPart.ReplaceAllString(method.Response, "")
|
|
|
+// )
|
|
|
+
|
|
|
+// if responseEntity == "" {
|
|
|
+// panic("Modelo de resposta não definido")
|
|
|
+// }
|
|
|
+
|
|
|
+// ctx.Statement.Block(
|
|
|
+// // Declaracao das variaveis
|
|
|
+// G.Var().Defs(
|
|
|
+// // G.Id("err").Op("*").Qual(API_ERROR, "Error"),
|
|
|
+// G.Id("entity").Op("=").Id("New"+method.Entity).Call(),
|
|
|
+// ).Line(),
|
|
|
+
|
|
|
+// // Fazendo o parse do body
|
|
|
+// G.If(
|
|
|
+// G.Id("err").Op("=").Qual(API_URL, "ReadJson").Call(G.Id("ctx"), G.Id("entity")),
|
|
|
+// G.Id("err").Op("!=").Id("nil"),
|
|
|
+// ).Block(
|
|
|
+// // G.Id("api").Dot("Falha").Call(
|
|
|
+// // G.Id("ctx"),
|
|
|
+// // G.Id("api").Dot("ErrGeneral"),
|
|
|
+// // G.Id("err").Dot("Error").Call(),
|
|
|
+// // G.Nil(),
|
|
|
+// // ),
|
|
|
+// // G.Return(G.Id("err")),
|
|
|
+// G.Return(),
|
|
|
+// ).Line(),
|
|
|
+
|
|
|
+// G.Id("values").Op(":=").Id("ctx").Dot("Values()").Line(),
|
|
|
+
|
|
|
+// G.Do(func(part *G.Statement) {
|
|
|
+// entity := ctx.Project.GetSchema(method.Entity)
|
|
|
+// user := false
|
|
|
+// for _, prop := range entity.Properties {
|
|
|
+// if def, ok := prop.Autogenerate["create_action"]; ok {
|
|
|
+// switch def.Type {
|
|
|
+// case "user":
|
|
|
+// if !user {
|
|
|
+// part.Add(G.Id(`user := values.Get("$user.ref").(*UserReference)`).Line())
|
|
|
+// user = true
|
|
|
+// }
|
|
|
+// part.Add(G.Id("entity").Dot(strings.Title(prop.ID)).Op("=").Id("user").Line())
|
|
|
+// case "now":
|
|
|
+// part.Add(G.Id("entity").Dot(strings.Title(prop.ID)).Op("=").Qual("time", "Now").Call().Id(".Unix()").Line())
|
|
|
+// case "fn":
|
|
|
+// part.Add(G.Id("entity").Dot(strings.Title(prop.ID)).Op("=").Id(def.Args[0]).Call().Line())
|
|
|
+// default:
|
|
|
+// // fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
|
|
|
+// // spew.Dump(def)
|
|
|
+// // parts := strings.Split(def, "#")
|
|
|
+// // part.Add(G.Id("entity").Dot(strings.Title(prop.ID)).Op("=").Qual("time", "Now").Call().Id(".Unix()").Line())
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }).Line(),
|
|
|
+
|
|
|
+// G.Do(func(s *G.Statement) {
|
|
|
+// entity := ctx.Project.EntityDesc(method.Entity)
|
|
|
+// if entity != nil && entity.HasMode {
|
|
|
+// s.Add(G.Id(`entity.SetMode("create")`))
|
|
|
+// }
|
|
|
+// }),
|
|
|
+// G.If(
|
|
|
+// G.Id("err").Op("=").Qual(API_URL, "Validate").Call(G.Id("entity")),
|
|
|
+// G.Id("err").Op("!=").Id("nil"),
|
|
|
+// ).Block(
|
|
|
+// // G.Return(G.Id("err")),
|
|
|
+// G.Return(),
|
|
|
+// ).Line(),
|
|
|
+
|
|
|
+// // Carrega o filtro do contexto para adicionar a entidade
|
|
|
+// G.Id("filter").Op(":=").Id("values").Dot("Get").Call(
|
|
|
+// G.Lit("$filter"),
|
|
|
+// ).Assert(G.Op("*").Qual(API_URL, "Filter")).Line(),
|
|
|
+
|
|
|
+// // Adiciona a entidade
|
|
|
+// G.Id("filter").Dot("DB").Op("=").Lit(ctx.Project.GetEntityDB(method.Entity)),
|
|
|
+// G.Id("filter").Dot("Collection").Op("=").Lit(ctx.Project.GetCollection(method.Entity)),
|
|
|
+// G.Id("filter").Dot("Entity").Op("=").Id("entity"),
|
|
|
+// generateHookCall(project, method, "beforePersist"),
|
|
|
+// // Inseri a entidade na coleção e verifica se a operação ocorreu com exito
|
|
|
+// G.If(
|
|
|
+// G.List(G.Id("_"), G.Id("err")).Op("=").Id("Models").Dot("InsertOne").Call(
|
|
|
+// G.Id("filter"),
|
|
|
+// ),
|
|
|
+// G.Id("err").Op("!=").Id("nil"),
|
|
|
+// ).Block(
|
|
|
+// // G.Id("api").Dot("Falha").Call(
|
|
|
+// // G.Id("ctx"),
|
|
|
+// // G.Id("api").Dot("ErrGeneral"),
|
|
|
+// // G.Id("err").Dot("Error").Call(),
|
|
|
+// // G.Nil(),
|
|
|
+// // ),
|
|
|
+// // bson.IsObjectIdHex(m.Id.Hex())
|
|
|
+// // G.Return(G.Id("err")),
|
|
|
+// G.Return(),
|
|
|
+// ),
|
|
|
+
|
|
|
+// // Envia a resposta pro usuario em caso de sucesso
|
|
|
+// // G.Line().Id("ctx").Dot("JSON").Call(G.Qual(APIC, "Map").Values(G.Dict{
|
|
|
+// // G.Lit("entity"): G.Id("entity"),
|
|
|
+// // })),
|
|
|
+// // G.Line().Id("resp").Dot("Entity").Op("=").Id("entity"),
|
|
|
+// // G.Line().Id("resp").Op("=").Id(responseEntity).Values(G.Dict{
|
|
|
+// // G.Id("Entity"): G.Id("entity"),
|
|
|
+// // }),
|
|
|
+// G.Line().Id("resp").Op("=").Id("entity"),
|
|
|
+// generateHookCall(project, method, "beforeSend"),
|
|
|
+// // G.Return(G.Nil()),
|
|
|
+// G.Return(),
|
|
|
+// )
|