application.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package controllers
  2. import (
  3. "context"
  4. "sparrow/pkg/models"
  5. "sparrow/pkg/rpcs"
  6. "sparrow/pkg/server"
  7. "sparrow/services/knowoapi/services"
  8. "strings"
  9. "github.com/opentracing/opentracing-go/ext"
  10. "github.com/opentracing/opentracing-go"
  11. "github.com/kataras/iris"
  12. )
  13. // AppController api
  14. type AppController struct {
  15. Ctx iris.Context
  16. Service services.ApplicationService
  17. Token Token
  18. }
  19. // Post 创建app
  20. // POST /application
  21. func (a *AppController) Post() {
  22. app := new(models.Application)
  23. if err := parseBody(a.Ctx, app); err != nil {
  24. badRequest(a.Ctx, err)
  25. return
  26. }
  27. app.VendorID = a.Token.getVendorID(a.Ctx)
  28. if app.AppIcon != "" {
  29. //move image
  30. args := &rpcs.ArgsMoveFile{
  31. Source: app.AppIcon,
  32. Target: "application",
  33. }
  34. args.SpanCarrier = make(map[string]string)
  35. reply := &rpcs.ReplyMoveFile{}
  36. span, ctx := opentracing.StartSpanFromContext(context.Background(), a.Ctx.Path())
  37. defer span.Finish()
  38. ext.SpanKindRPCClient.Set(span)
  39. ext.HTTPMethod.Set(span, a.Ctx.Method())
  40. err := server.RPCCallByName(ctx, "fileaccess", "FileAccess.MoveFile", args, reply)
  41. if err != nil {
  42. server.Log.Error(err)
  43. app.AppIcon = ""
  44. } else {
  45. app.AppIcon = reply.FilePath
  46. }
  47. }
  48. err := a.Service.Create(app)
  49. if err != nil {
  50. responseError(a.Ctx, ErrDatabase, err.Error())
  51. return
  52. }
  53. done(a.Ctx, app)
  54. }
  55. // Get 获取我的app
  56. // GET /application?pi=1&ps=&name=
  57. func (a *AppController) Get() {
  58. pi, err := a.Ctx.URLParamInt("pi")
  59. if err != nil {
  60. badRequest(a.Ctx, err)
  61. return
  62. }
  63. ps, err := a.Ctx.URLParamInt("ps")
  64. if err != nil {
  65. badRequest(a.Ctx, err)
  66. return
  67. }
  68. name := a.Ctx.URLParam("name")
  69. ds, total, err := a.Service.GetVendorApps(a.Token.getVendorID(a.Ctx), pi, ps, name)
  70. if err != nil {
  71. responseError(a.Ctx, ErrDatabase, err.Error())
  72. return
  73. }
  74. done(a.Ctx, map[string]interface{}{
  75. "list": ds,
  76. "total": total,
  77. })
  78. }
  79. // Delete 删除
  80. // DELETE /application
  81. func (a *AppController) Delete() {
  82. app := new(models.Application)
  83. if err := parseBody(a.Ctx, app); err != nil {
  84. badRequest(a.Ctx, err)
  85. return
  86. }
  87. err := a.Service.Delete(app)
  88. if err != nil {
  89. responseError(a.Ctx, ErrDatabase, err.Error())
  90. return
  91. }
  92. done(a.Ctx, "删除成功")
  93. }
  94. // GetBy 获取app信息
  95. // GET /application/{key}
  96. func (a *AppController) GetBy(key string) {
  97. app, err := a.Service.GetAppInfo(a.Token.getVendorID(a.Ctx), key)
  98. if err != nil {
  99. responseError(a.Ctx, ErrDatabase, err.Error())
  100. return
  101. }
  102. done(a.Ctx, app)
  103. }
  104. // Put 更新
  105. // PUT /application
  106. func (a *AppController) Put() {
  107. app := new(models.Application)
  108. if err := parseBody(a.Ctx, app); err != nil {
  109. badRequest(a.Ctx, err)
  110. return
  111. }
  112. // check update image
  113. if strings.Contains(app.AppIcon, "tmp") {
  114. //move image
  115. args := &rpcs.ArgsMoveFile{
  116. Source: app.AppIcon,
  117. Target: "application",
  118. }
  119. reply := &rpcs.ReplyMoveFile{}
  120. err := server.RPCCallByName(nil, "fileaccess", "FileAccess.MoveFile", args, reply)
  121. if err != nil {
  122. server.Log.Error(err)
  123. app.AppIcon = ""
  124. } else {
  125. app.AppIcon = reply.FilePath
  126. }
  127. }
  128. if app.AppIcon == "" {
  129. old, _ := a.Service.GetAppInfo(a.Token.getVendorID(a.Ctx), app.AppKey)
  130. arg := &rpcs.ArgsDeleteFile{
  131. FileName: old.AppIcon,
  132. }
  133. reply := &rpcs.ReplyEmptyResult{}
  134. server.RPCCallByName(nil, "fileaccess", "FileAccess.DeleteFile", arg, reply)
  135. }
  136. result, err := a.Service.Update(app)
  137. if err != nil {
  138. responseError(a.Ctx, ErrDatabase, err.Error())
  139. return
  140. }
  141. done(a.Ctx, result)
  142. }