application.go 3.4 KB

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