middleware_pipe.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package got
  2. import (
  3. "text/template"
  4. . "git.eugeniocarvalho.dev/eugeniucarvalho/apicodegen/common"
  5. G "github.com/dave/jennifer/jen"
  6. )
  7. var (
  8. pipeStmtsTmpl *template.Template
  9. pipeStmtsErr error
  10. )
  11. func init() {
  12. pipeStmtsTmpl, pipeStmtsErr = ParseTemplate(`
  13. {{if .preconditions}}
  14. if resp, err = executeAction(
  15. ctx,
  16. {{.preconditions}},
  17. ); err != nil {
  18. return
  19. }
  20. {{end}}
  21. return`)
  22. if pipeStmtsErr != nil {
  23. panic(pipeStmtsErr)
  24. }
  25. }
  26. var (
  27. GenPipeStmts = &Middleware{
  28. Id: "post",
  29. Type: "method",
  30. Fn: func(ctx *MiddlewareContext) error {
  31. var (
  32. method = ctx.Method
  33. context = map[string]interface{}{
  34. "preconditions": parseMethodActions(method.Preconditions),
  35. }
  36. )
  37. // Nome do metodo que verifica se a entidade tem dependencias
  38. out, _ := TemplateToString(pipeStmtsTmpl, context)
  39. ctx.Statement.Block(G.Id(out)).Line()
  40. return nil
  41. },
  42. }
  43. )
  44. // var (
  45. // project = ctx.Project
  46. // method = ctx.Method
  47. // responseEntity = GenericPart.ReplaceAllString(method.Response, "")
  48. // )
  49. // if responseEntity == "" {
  50. // panic("Modelo de resposta não definido")
  51. // }
  52. // ctx.Statement.Block(
  53. // // Declaracao das variaveis
  54. // G.Var().Defs(
  55. // // G.Id("err").Op("*").Qual(API_ERROR, "Error"),
  56. // G.Id("entity").Op("=").Id("New"+method.Entity).Call(),
  57. // ).Line(),
  58. // // Fazendo o parse do body
  59. // G.If(
  60. // G.Id("err").Op("=").Qual(API_URL, "ReadJson").Call(G.Id("ctx"), G.Id("entity")),
  61. // G.Id("err").Op("!=").Id("nil"),
  62. // ).Block(
  63. // // G.Id("api").Dot("Falha").Call(
  64. // // G.Id("ctx"),
  65. // // G.Id("api").Dot("ErrGeneral"),
  66. // // G.Id("err").Dot("Error").Call(),
  67. // // G.Nil(),
  68. // // ),
  69. // // G.Return(G.Id("err")),
  70. // G.Return(),
  71. // ).Line(),
  72. // G.Id("values").Op(":=").Id("ctx").Dot("Values()").Line(),
  73. // G.Do(func(part *G.Statement) {
  74. // entity := ctx.Project.GetSchema(method.Entity)
  75. // user := false
  76. // for _, prop := range entity.Properties {
  77. // if def, ok := prop.Autogenerate["create_action"]; ok {
  78. // switch def.Type {
  79. // case "user":
  80. // if !user {
  81. // part.Add(G.Id(`user := values.Get("$user.ref").(*UserReference)`).Line())
  82. // user = true
  83. // }
  84. // part.Add(G.Id("entity").Dot(strings.Title(prop.ID)).Op("=").Id("user").Line())
  85. // case "now":
  86. // part.Add(G.Id("entity").Dot(strings.Title(prop.ID)).Op("=").Qual("time", "Now").Call().Id(".Unix()").Line())
  87. // case "fn":
  88. // part.Add(G.Id("entity").Dot(strings.Title(prop.ID)).Op("=").Id(def.Args[0]).Call().Line())
  89. // default:
  90. // // fmt.Println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
  91. // // spew.Dump(def)
  92. // // parts := strings.Split(def, "#")
  93. // // part.Add(G.Id("entity").Dot(strings.Title(prop.ID)).Op("=").Qual("time", "Now").Call().Id(".Unix()").Line())
  94. // }
  95. // }
  96. // }
  97. // }).Line(),
  98. // G.Do(func(s *G.Statement) {
  99. // entity := ctx.Project.EntityDesc(method.Entity)
  100. // if entity != nil && entity.HasMode {
  101. // s.Add(G.Id(`entity.SetMode("create")`))
  102. // }
  103. // }),
  104. // G.If(
  105. // G.Id("err").Op("=").Qual(API_URL, "Validate").Call(G.Id("entity")),
  106. // G.Id("err").Op("!=").Id("nil"),
  107. // ).Block(
  108. // // G.Return(G.Id("err")),
  109. // G.Return(),
  110. // ).Line(),
  111. // // Carrega o filtro do contexto para adicionar a entidade
  112. // G.Id("filter").Op(":=").Id("values").Dot("Get").Call(
  113. // G.Lit("$filter"),
  114. // ).Assert(G.Op("*").Qual(API_URL, "Filter")).Line(),
  115. // // Adiciona a entidade
  116. // G.Id("filter").Dot("DB").Op("=").Lit(ctx.Project.GetEntityDB(method.Entity)),
  117. // G.Id("filter").Dot("Collection").Op("=").Lit(ctx.Project.GetCollection(method.Entity)),
  118. // G.Id("filter").Dot("Entity").Op("=").Id("entity"),
  119. // generateHookCall(project, method, "beforePersist"),
  120. // // Inseri a entidade na coleção e verifica se a operação ocorreu com exito
  121. // G.If(
  122. // G.List(G.Id("_"), G.Id("err")).Op("=").Id("Models").Dot("InsertOne").Call(
  123. // G.Id("filter"),
  124. // ),
  125. // G.Id("err").Op("!=").Id("nil"),
  126. // ).Block(
  127. // // G.Id("api").Dot("Falha").Call(
  128. // // G.Id("ctx"),
  129. // // G.Id("api").Dot("ErrGeneral"),
  130. // // G.Id("err").Dot("Error").Call(),
  131. // // G.Nil(),
  132. // // ),
  133. // // bson.IsObjectIdHex(m.Id.Hex())
  134. // // G.Return(G.Id("err")),
  135. // G.Return(),
  136. // ),
  137. // // Envia a resposta pro usuario em caso de sucesso
  138. // // G.Line().Id("ctx").Dot("JSON").Call(G.Qual(APIC, "Map").Values(G.Dict{
  139. // // G.Lit("entity"): G.Id("entity"),
  140. // // })),
  141. // // G.Line().Id("resp").Dot("Entity").Op("=").Id("entity"),
  142. // // G.Line().Id("resp").Op("=").Id(responseEntity).Values(G.Dict{
  143. // // G.Id("Entity"): G.Id("entity"),
  144. // // }),
  145. // G.Line().Id("resp").Op("=").Id("entity"),
  146. // generateHookCall(project, method, "beforeSend"),
  147. // // G.Return(G.Nil()),
  148. // G.Return(),
  149. // )