apiengine.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package engine
  2. import (
  3. "fmt"
  4. //"github.com/gin-contrib/sessions"
  5. //"github.com/gin-contrib/sessions/memstore"
  6. //"github.com/gin-contrib/sessions/cookie"
  7. "os"
  8. "git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
  9. "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  10. "github.com/gin-contrib/cors"
  11. "github.com/gin-gonic/gin"
  12. "github.com/xormplus/xorm"
  13. )
  14. type ApiEngine struct {
  15. PlatformOrmEngine *xorm.Engine
  16. BusinessOrmEngine map[string]*xorm.Engine
  17. GinEngine *gin.Engine
  18. listen_addr string
  19. }
  20. func Default() *ApiEngine {
  21. apiengine := NewApiEngine("mysql", config.AppConfig.DataSource, fmt.Sprintf(":%d", config.AppConfig.HttpPort))
  22. return apiengine
  23. }
  24. func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
  25. engine := &ApiEngine{}
  26. var err error
  27. engine.PlatformOrmEngine, err = xorm.NewEngine(driverName, dataSourceName)
  28. printError(err)
  29. initOrmEngine(engine.PlatformOrmEngine, driverName)
  30. engine.LoadBusinessOrm()
  31. engine.GinEngine = gin.Default()
  32. //启动session
  33. //store := sessions.NewCookieStore([]byte("secret"))
  34. //engine.GinEngine.Use(sessions.Sessions("session", store))
  35. _, err = os.Stat("doc/api.tpl")
  36. if err == nil {
  37. fmt.Println("LoadHTMLGlob.")
  38. engine.GinEngine.LoadHTMLGlob("doc/*")
  39. }
  40. //cross domain
  41. config := cors.DefaultConfig()
  42. config.AllowAllOrigins = true
  43. //config.AllowOrigins = []string{"http://localhost:8090"}
  44. config.AllowCredentials = true
  45. config.AllowHeaders = []string{"Content-Type,AccessToken,X-CSRF-Token, Authorization, Token"}
  46. engine.GinEngine.Use(cors.New(config))
  47. engine.listen_addr = addr
  48. //设置登陆过滤
  49. return engine
  50. }
  51. func (g *ApiEngine)LoadBusinessOrm() {
  52. var domain []models.SysDomain
  53. g.PlatformOrmEngine.SQL("select * from sys_domain where del_flag = 0").Find(&domain)
  54. g.BusinessOrmEngine = make(map[string]*xorm.Engine)
  55. for _,v := range domain {
  56. db,err := xorm.NewEngine("mysql", v.DataSource)
  57. if err == nil {
  58. initOrmEngine(db, "mysql")
  59. g.BusinessOrmEngine[v.Domain] = db
  60. }
  61. }
  62. }
  63. func (g *ApiEngine) Run() {
  64. initPlatformDbData(g.PlatformOrmEngine)
  65. g.GinEngine.StaticFile("/", "web/index.html")
  66. g.GinEngine.Static("/static", "web/static")
  67. g.GinEngine.Run(g.listen_addr)
  68. }