instance.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. func MustDB() (db *gorm.DB) {
  28. var (
  29. err error
  30. )
  31. if db, err = DB(); err != nil {
  32. panic(err)
  33. }
  34. return db
  35. }
  36. //WithDelegate 添加一个观察者
  37. func WithDelegate(ctx context.Context, d Delegate) (err error) {
  38. if std == nil {
  39. return ErrUninitializedComponent
  40. }
  41. std.RegisterDelegate(d)
  42. return nil
  43. }
  44. //AttachModel 添加一个模块
  45. func AttachModel(ctx context.Context, model Model, cbs ...Option) (err error) {
  46. if std == nil {
  47. return ErrUninitializedComponent
  48. }
  49. return std.Attach(ctx, model, cbs...)
  50. }
  51. //GetSchemas 获取模块的schema
  52. func GetSchemas(ctx context.Context, model Model) ([]*Schema, error) {
  53. if std == nil {
  54. return nil, ErrUninitializedComponent
  55. }
  56. return std.GetSchemas(ctx, DefaultNamespace, model.ModuleName(), model.TableName())
  57. }
  58. //UseRouter 绑定路由
  59. func UseRouter(hs *http.Server, ms ...http.Middleware) (err error) {
  60. if std == nil {
  61. return ErrUninitializedComponent
  62. }
  63. std.api.Router(hs, ms...)
  64. return
  65. }