instance.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package rest
  2. import (
  3. "context"
  4. "errors"
  5. "git.nspix.com/golang/micro/gateway/http"
  6. "gorm.io/gorm"
  7. )
  8. var (
  9. std *CRUD
  10. )
  11. var (
  12. ErrUninitializedComponent = errors.New("uninitialized component")
  13. )
  14. func Init(dialer gorm.Dialector) (err error) {
  15. std, err = New(dialer)
  16. return
  17. }
  18. func Instance() *CRUD {
  19. return std
  20. }
  21. func DB() (db *gorm.DB, err error) {
  22. if std == nil {
  23. return nil, ErrUninitializedComponent
  24. }
  25. return std.db, nil
  26. }
  27. //WithDelegate 添加一个观察者
  28. func WithDelegate(ctx context.Context, d Delegate) (err error) {
  29. if std == nil {
  30. return ErrUninitializedComponent
  31. }
  32. std.RegisterDelegate(d)
  33. return nil
  34. }
  35. //AttachModel 添加一个模块
  36. func AttachModel(ctx context.Context, model Model, cbs ...Option) (err error) {
  37. if std == nil {
  38. return ErrUninitializedComponent
  39. }
  40. return std.Attach(ctx, model, cbs...)
  41. }
  42. //GetSchemas 获取模块的schema
  43. func GetSchemas(ctx context.Context, model Model) ([]*Schema, error) {
  44. if std == nil {
  45. return nil, ErrUninitializedComponent
  46. }
  47. return std.GetSchemas(ctx, DefaultNamespace, model.ModuleName(), model.TableName())
  48. }
  49. //UseRouter 绑定路由
  50. func UseRouter(hs *http.Server, ms ...http.Middleware) (err error) {
  51. if std == nil {
  52. return ErrUninitializedComponent
  53. }
  54. std.api.Router(hs, ms...)
  55. return
  56. }