tlogrestorerecordmodel.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package model
  2. import (
  3. "context"
  4. "database/sql"
  5. "fmt"
  6. "strings"
  7. "time"
  8. "github.com/zeromicro/go-zero/core/stores/sqlx"
  9. )
  10. // TLogRestoreRecord is one archive-restore run booked against the archive
  11. // it restores.
  12. type TLogRestoreRecord struct {
  13. Id int64 `db:"id"` // 主键
  14. ArchiveId int64 `db:"archive_id"` // 归档记录ID
  15. RestoreStatus int64 `db:"restore_status"` // 恢复状态:1-成功,2-失败,3-处理中
  16. RestoreMessage sql.NullString `db:"restore_message"` // 恢复说明或错误原因
  17. RestoredBy string `db:"restored_by"` // 恢复人账号
  18. RestoredAt time.Time `db:"restored_at"` // 恢复时间
  19. }
  20. // LogRestoreFilter mirrors LogRestoreReq; empty fields = no filtering.
  21. type LogRestoreFilter struct {
  22. RestoreStatus int64
  23. RestoreMessage string
  24. }
  25. type TLogRestoreRecordModel interface {
  26. // Insert books a new restore run and returns the insert result.
  27. Insert(ctx context.Context, data *TLogRestoreRecord) (sql.Result, error)
  28. // UpdateResult updates status and message of a restore run.
  29. UpdateResult(ctx context.Context, id int64, status int64, message sql.NullString) error
  30. // FindPage lists restore runs with optional filters, newest first.
  31. FindPage(ctx context.Context, page, pageSize int64, f LogRestoreFilter) ([]TLogRestoreRecord, int64, error)
  32. }
  33. type customTLogRestoreRecordModel struct {
  34. conn sqlx.SqlConn
  35. table string
  36. }
  37. var _ TLogRestoreRecordModel = (*customTLogRestoreRecordModel)(nil)
  38. // NewTLogRestoreRecordModel returns the model for t_log_restore_record.
  39. func NewTLogRestoreRecordModel(conn sqlx.SqlConn) TLogRestoreRecordModel {
  40. return &customTLogRestoreRecordModel{
  41. conn: conn,
  42. table: "`t_log_restore_record`",
  43. }
  44. }
  45. func (m *customTLogRestoreRecordModel) Insert(ctx context.Context, data *TLogRestoreRecord) (sql.Result, error) {
  46. query := "insert into t_log_restore_record (`archive_id`, `restore_status`, `restore_message`, `restored_by`) values (?, ?, ?, ?)"
  47. ret, err := m.conn.ExecCtx(ctx, query,
  48. data.ArchiveId, data.RestoreStatus, data.RestoreMessage, data.RestoredBy)
  49. return ret, err
  50. }
  51. func (m *customTLogRestoreRecordModel) UpdateResult(ctx context.Context, id int64, status int64, message sql.NullString) error {
  52. query := "update t_log_restore_record set `restore_status` = ?, `restore_message` = ? where `id` = ?"
  53. if _, err := m.conn.ExecCtx(ctx, query, status, message, id); err != nil {
  54. return err
  55. }
  56. return nil
  57. }
  58. func (m *customTLogRestoreRecordModel) FindPage(ctx context.Context, page, pageSize int64, f LogRestoreFilter) ([]TLogRestoreRecord, int64, error) {
  59. var conds []string
  60. var args []any
  61. if f.RestoreStatus != 0 {
  62. conds = append(conds, "`restore_status` = ?")
  63. args = append(args, f.RestoreStatus)
  64. }
  65. if f.RestoreMessage != "" {
  66. conds = append(conds, "`restore_message` like ? escape '\\\\'")
  67. args = append(args, "%"+escapeLike(f.RestoreMessage)+"%")
  68. }
  69. where := ""
  70. if len(conds) > 0 {
  71. where = " where " + strings.Join(conds, " and ")
  72. }
  73. var total int64
  74. if err := m.conn.QueryRowCtx(ctx, &total, fmt.Sprintf("select count(*) from %s%s", m.table, where), args...); err != nil {
  75. return nil, 0, err
  76. }
  77. if total == 0 {
  78. return nil, 0, nil
  79. }
  80. offset := (page - 1) * pageSize
  81. args = append(args, pageSize, offset)
  82. query := fmt.Sprintf(
  83. "select `id`, `archive_id`, `restore_status`, `restore_message`, `restored_by`, `restored_at` from %s%s order by `restored_at` desc limit ? offset ?",
  84. m.table, where)
  85. var resp []TLogRestoreRecord
  86. if err := m.conn.QueryRowsCtx(ctx, &resp, query, args...); err != nil {
  87. return nil, 0, err
  88. }
  89. return resp, total, nil
  90. }