dao.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package dao
  2. import (
  3. "context"
  4. "database/sql"
  5. "time"
  6. "go-common/app/service/main/antispam/conf"
  7. "go-common/library/cache/redis"
  8. xsql "go-common/library/database/sql"
  9. )
  10. // Executer .
  11. type Executer interface {
  12. Exec(ctx context.Context, SQL string, args ...interface{}) (sql.Result, error)
  13. }
  14. // Querier .
  15. type Querier interface {
  16. QueryRow(ctx context.Context, SQL string, args ...interface{}) *xsql.Row
  17. Query(ctx context.Context, SQL string, args ...interface{}) (*xsql.Rows, error)
  18. }
  19. // KeywordDao .
  20. type KeywordDao interface {
  21. GetByID(context.Context, int64) (*Keyword, error)
  22. GetByIDs(context.Context, []int64) ([]*Keyword, error)
  23. GetByCond(context.Context, *Condition) ([]*Keyword, int64, error)
  24. GetByOffsetLimit(context.Context, *Condition) ([]*Keyword, error)
  25. GetByAreaAndContents(context.Context, *Condition) ([]*Keyword, error)
  26. GetByAreaAndContent(context.Context, *Condition) (*Keyword, error)
  27. GetRubbish(context.Context, *Condition) ([]*Keyword, error)
  28. Insert(context.Context, *Keyword) (*Keyword, error)
  29. Update(context.Context, *Keyword) (*Keyword, error)
  30. DeleteByIDs(context.Context, []int64) ([]*Keyword, error)
  31. }
  32. // RuleDao .
  33. type RuleDao interface {
  34. GetByID(context.Context, int64) (*Rule, error)
  35. GetByIDs(context.Context, []int64) ([]*Rule, error)
  36. GetByCond(context.Context, *Condition) ([]*Rule, int64, error)
  37. GetByArea(context.Context, *Condition) ([]*Rule, error)
  38. GetByAreaAndTypeAndScope(context.Context, *Condition) (*Rule, error)
  39. GetByAreaAndLimitType(context.Context, *Condition) ([]*Rule, error)
  40. Insert(context.Context, *Rule) (*Rule, error)
  41. Update(context.Context, *Rule) (*Rule, error)
  42. }
  43. // RegexpDao .
  44. type RegexpDao interface {
  45. GetByID(context.Context, int64) (*Regexp, error)
  46. GetByIDs(context.Context, []int64) ([]*Regexp, error)
  47. GetByCond(context.Context, *Condition) ([]*Regexp, int64, error)
  48. GetByAreaAndContent(context.Context, *Condition) (*Regexp, error)
  49. GetByContents(context.Context, []string) ([]*Regexp, error)
  50. Insert(context.Context, *Regexp) (*Regexp, error)
  51. Update(context.Context, *Regexp) (*Regexp, error)
  52. }
  53. // Tx .
  54. type Tx interface {
  55. Executer
  56. RegexpTx
  57. KeywordTx
  58. RuleTx
  59. Commit() error
  60. Rollback() error
  61. }
  62. // KeywordTx .
  63. type KeywordTx interface {
  64. InsertKeyword(*Keyword) error
  65. UpdateKeyword(*Keyword) error
  66. }
  67. // RegexpTx .
  68. type RegexpTx interface {
  69. InsertRegexp(*Regexp) error
  70. UpdateRegexp(*Regexp) error
  71. }
  72. // RuleTx .
  73. type RuleTx interface {
  74. InsertRule(*Rule) error
  75. UpdateRule(*Rule) error
  76. }
  77. // Dao .
  78. type Dao struct {
  79. // db *xsql.DB
  80. redis *redis.Pool
  81. redisExpire int
  82. }
  83. // New a dao and return.
  84. func New(c *conf.Config) (d *Dao) {
  85. d = &Dao{
  86. // db
  87. // db: xsql.NewMySQL(c.MySQL.AntiSpam),
  88. // redis
  89. redis: redis.NewPool(c.Redis.Config),
  90. redisExpire: int(time.Duration(c.Redis.IndexExpire) / time.Second),
  91. }
  92. return
  93. }
  94. // Ping check connection used in dao
  95. func (d *Dao) Ping(c context.Context) (err error) {
  96. if err = d.pingRedis(c); err != nil {
  97. return
  98. }
  99. err = PingMySQL(c)
  100. return
  101. }
  102. // Close close all connection.
  103. func (d *Dao) Close() {
  104. if d.redis != nil {
  105. d.redis.Close()
  106. }
  107. Close()
  108. }