123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- package got
- import (
- "text/template"
- . "git.eugeniocarvalho.dev/eugeniucarvalho/apicodegen/common"
- G "github.com/dave/jennifer/jen"
- )
- const ()
- var (
- undeleteStmtsTmpl, hasDepUndeleteStmtsTmpl *template.Template
- undeleteStmtsErr error
- )
- func init() {
- undeleteStmtsTmpl, undeleteStmtsErr = ParseTemplate(`
- var (
- patchs = &models.{{.entity}}Patchs{Set: &models.{{.entity}}Input{}}
- entity = patchs.Set
- )
- values := ctx.Values()
- values.Set("patchs", patchs)
- values.Set("entity", entity)
- user, hasUserRef := values.Get("$user.ref").(*models.UserReference)
- if hasUserRef {
- entity.UpdatedBy = user
- }
- entity.LastUpdate = api.NowUnix()
- entity.SetDeleted(false)
-
- {{if .preconditions}}
- if _, err = executeAction(
- ctx,
- {{.preconditions}},
- ); err != nil {
- return
- }
- {{end}}
- options := values.Get("$filter").(*api.Filter)
- options.DB = "{{.dbName}}"
- options.Collection = "{{.collectionName}}"
- options.Patchs, options.Options = patchs.Patch()
- if _, err = models.Api.PatchOne(options); err != nil {
- return
- }
- {{if .beforeResponse}}
- if resp, err = executeAction(
- ctx,
- {{.beforeResponse}},
- ); err != nil || resp != nil {
- return
- }
- {{end}}
- resp = ""
- return`)
- if undeleteStmtsErr != nil {
- panic(undeleteStmtsErr)
- }
- }
- var (
- GenUndeleteStmts = &Middleware{
- Id: "undelete",
- Type: "method",
- Fn: func(ctx *MiddlewareContext) error {
- var (
- project = ctx.Project
- method = ctx.Method
- dbName = project.GetEntityDB(method.Entity)
- collectionName = project.GetCollection(method.Entity)
- relations = SR.Get(method.Entity)
- relationCount = len(relations)
- dependenceMethod = BASE_HAS_DEPENDE + method.Entity
- // createDepFunc = SR.Has(method.Entity)
- beforeSend = method.Hook("beforeSend")
- beforePersist = method.Hook("beforePersist")
- context = map[string]interface{}{
- "dbName": dbName,
- "collectionName": collectionName,
- "entity": method.Entity,
- "relationCount": relationCount,
- "relations": relations,
- "dependenceMethod": dependenceMethod,
- "beforePersist": beforePersist,
- "beforeSend": beforeSend,
- "preconditions": parseMethodActions(method.Preconditions),
- "beforeResponse": parseMethodActions(method.BeforeResponse),
- }
- )
- // Nome do metodo que verifica se a entidade tem dependencias
- out, _ := TemplateToString(undeleteStmtsTmpl, context)
- ctx.Statement.Block(G.Id(out)).Line()
- return nil
- },
- }
- )
- // import (
- // "fmt"
- // "strings"
- // . "git.eugeniocarvalho.dev/eugeniucarvalho/apicodegen/common"
- // G "github.com/dave/jennifer/jen"
- // // "github.com/davecgh/go-spew/spew"
- // )
- // var (
- // GenUndeleteStmts = &Middleware{
- // Id: "undelete",
- // Type: "method",
- // Fn: func(ctx *MiddlewareContext) error {
- // var (
- // // UpdateRelationRotine *G.Statement
- // method = ctx.Method
- // // updRelation = UPDATE_RELATION + method.Entity
- // // createUpdateRelation = false
- // entity = method.Request
- // responseEntity = GenericPart.ReplaceAllString(method.Response, "")
- // )
- // if entity == "" {
- // panic("Modelo de request não definido em UpdateStmt!")
- // }
- // if responseEntity == "" {
- // panic("Modelo de response não definido!")
- // }
- // ctx.Statement.Block(
- // // Declaracao das variaveis
- // G.Var().Defs(
- // // G.Id("err").Op("*").Qual(API_ERROR, "Error"),
- // // G.Id("patchs").Op("=").Op("&").Id(entity).Values(),
- // G.Id("patchs").Op("=").Op("&").Id(fmt.Sprintf("%sPatchs", method.Entity)).Values(
- // G.Id("Set").Op(": &").Id(entity).Values(),
- // ),
- // // G.Id("patchs").Op("=").Id(entity).Values(),
- // G.Id("entity = patchs.Set"),
- // G.Do(func(s *G.Statement) {
- // if method.BeforePersistAction {
- // s.Id("fn").Func().Call().Op("*").Qual(API_ERROR, "Error")
- // }
- // }),
- // ).Line(),
- // // G.Id("fmt.Println(`era o undelete`)").Line(),
- // // Fazendo o parse do body
- // // G.If(
- // // G.Id("err").Op("=").Qual(API_URL, "ReadJson").Call(G.Id("ctx"), G.Id("patchs")),
- // // 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(),
- // // ),
- // // 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(),
- // // Captura a base de values
- // G.Id("values").Op(":=").Id("ctx").Dot("Values").Call(),
- // G.Id("values").Dot("Set").Call(G.Lit("patchs"), G.Id("patchs")),
- // G.Id("entity.SetDeleted(false)"),
- // // Gera as atribuicoes de variaveis que seram atualizadas (usuario e ultimo update quando existir)
- // G.Do(func(part *G.Statement) {
- // entity := ctx.Project.GetSchema(method.Entity)
- // user := false
- // for _, prop := range entity.Properties {
- // if def, ok := prop.Autogenerate["update"]; 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())
- // }
- // }
- // }
- // }).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.Do(func(s *G.Statement) {
- // if method.BeforePersistAction {
- // fnName := fmt.Sprintf("Before%s%s", strings.Title(method.ID), method.Entity)
- // part := s.Comment("Chama uma função onde são descritas as ações executadas antes da entidade ser persistida.").Line()
- // part.If(
- // G.List(G.Id("fn"), G.Id("err")).Op("=").Id(fnName).Call(G.Id("ctx"), G.Id("patchs")),
- // G.Id("err").Op("!=").Id("nil"),
- // ).Block(G.Return())
- // }
- // }),
- // G.Id("filter").Dot("Patchs").Op("=").Id("patchs.Patch()").Line(),
- // // 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("PatchOne").Call(
- // // G.Lit(ctx.Project.GetCollection(method.Entity)),
- // 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(),
- // ),
- // G.Do(func(s *G.Statement) {
- // if method.BeforePersistAction {
- // part := s.Comment("Chama uma função onde são descritas as ações executadas após a entidade ser persistida.").Line()
- // part.If(
- // G.Id("err").Op("=").Id("fn").Call(),
- // G.Id("err").Op("!=").Id("nil"),
- // ).Block(G.Return())
- // }
- // }),
- // G.Id("resp").Op("=").Lit(""),
- // // Cria a rotina de atualização de relacionamentos
- // // G.Do(func(s *G.Statement) {
- // // if SR.Has(method.Entity) {
- // // createUpdateRelation = true
- // // s.Comment("Cria uma thread que executa a atualizaca das referências.").Line().Go().Func().Params().Block(
- // // G.Id(updRelation).Call(G.Id("filter")),
- // // ).Call()
- // // }
- // // }),
- // // Envia a resposta pro usuario em caso de sucesso
- // // G.Line().Id("resp").Op("=").Id(responseEntity).Values(G.Dict{
- // // G.Id("Entity"): G.Id("entity"),
- // // }),
- // // G.Line().Id("resp").Op("=").Id("entity"),
- // // G.Return(G.Nil()),
- // G.Return(),
- // ).Line()
- // return nil
- // },
- // }
- // )
|