init_database_logic.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package base
  2. import (
  3. "context"
  4. "github.com/suyuan32/simple-admin-job/internal/utils/dberrorhandler"
  5. "entgo.io/ent/dialect/sql/schema"
  6. "github.com/suyuan32/simple-admin-common/enum/errorcode"
  7. "github.com/suyuan32/simple-admin-common/i18n"
  8. "github.com/suyuan32/simple-admin-common/msg/logmsg"
  9. "github.com/zeromicro/go-zero/core/errorx"
  10. "github.com/suyuan32/simple-admin-job/internal/mqs/amq/types/pattern"
  11. "github.com/suyuan32/simple-admin-job/internal/svc"
  12. "github.com/suyuan32/simple-admin-job/types/job"
  13. "github.com/zeromicro/go-zero/core/logx"
  14. )
  15. type InitDatabaseLogic struct {
  16. ctx context.Context
  17. svcCtx *svc.ServiceContext
  18. logx.Logger
  19. }
  20. func NewInitDatabaseLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InitDatabaseLogic {
  21. return &InitDatabaseLogic{
  22. ctx: ctx,
  23. svcCtx: svcCtx,
  24. Logger: logx.WithContext(ctx),
  25. }
  26. }
  27. func (l *InitDatabaseLogic) InitDatabase(in *job.Empty) (*job.BaseResp, error) {
  28. if err := l.svcCtx.DB.Schema.Create(l.ctx, schema.WithForeignKeys(false)); err != nil {
  29. logx.Errorw(logmsg.DatabaseError, logx.Field("detail", err.Error()))
  30. return nil, errorx.NewCodeError(errorcode.Internal, err.Error())
  31. }
  32. count, err := l.svcCtx.DB.Task.Query().Count(l.ctx)
  33. if err != nil {
  34. return nil, dberrorhandler.DefaultEntError(l.Logger, err, "database error")
  35. }
  36. if count != 0 {
  37. return nil, errorx.NewInvalidArgumentError(i18n.AlreadyInit)
  38. }
  39. err = l.insertTaskData()
  40. if err != nil {
  41. return nil, err
  42. }
  43. return &job.BaseResp{
  44. Msg: i18n.Success,
  45. }, nil
  46. }
  47. func (l *InitDatabaseLogic) insertTaskData() error {
  48. err := l.svcCtx.DB.Task.Create().
  49. SetName("hello_world").
  50. SetTaskGroup("base").
  51. SetCronExpression("@every 60s").
  52. SetPattern(pattern.RecordHelloWorld).
  53. SetPayload("{\"name\": \"Mike (DPTask 60s)\"}").
  54. Exec(l.ctx)
  55. if err != nil {
  56. return err
  57. }
  58. return nil
  59. }