github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/store/sqlstore/audit_store.go (about) 1 package sqlstore 2 3 import ( 4 sq "github.com/Masterminds/squirrel" 5 "github.com/pkg/errors" 6 7 "github.com/masterhung0112/hk_server/v5/model" 8 "github.com/masterhung0112/hk_server/v5/store" 9 ) 10 11 type SqlAuditStore struct { 12 *SqlStore 13 } 14 15 func newSqlAuditStore(sqlStore *SqlStore) store.AuditStore { 16 s := &SqlAuditStore{sqlStore} 17 18 for _, db := range sqlStore.GetAllConns() { 19 table := db.AddTableWithName(model.Audit{}, "Audits").SetKeys(false, "Id") 20 table.ColMap("Id").SetMaxSize(26) 21 table.ColMap("UserId").SetMaxSize(26) 22 table.ColMap("Action").SetMaxSize(512) 23 table.ColMap("ExtraInfo").SetMaxSize(1024) 24 table.ColMap("IpAddress").SetMaxSize(64) 25 table.ColMap("SessionId").SetMaxSize(26) 26 } 27 28 return s 29 } 30 31 func (s SqlAuditStore) createIndexesIfNotExists() { 32 s.CreateIndexIfNotExists("idx_audits_user_id", "Audits", "UserId") 33 } 34 35 func (s SqlAuditStore) Save(audit *model.Audit) error { 36 audit.Id = model.NewId() 37 audit.CreateAt = model.GetMillis() 38 39 if err := s.GetMaster().Insert(audit); err != nil { 40 return errors.Wrapf(err, "failed to save Audit with userId=%s and action=%s", audit.UserId, audit.Action) 41 } 42 return nil 43 } 44 45 func (s SqlAuditStore) Get(userId string, offset int, limit int) (model.Audits, error) { 46 if limit > 1000 { 47 return nil, store.NewErrOutOfBounds(limit) 48 } 49 50 query := s.getQueryBuilder(). 51 Select("*"). 52 From("Audits"). 53 OrderBy("CreateAt DESC"). 54 Limit(uint64(limit)). 55 Offset(uint64(offset)) 56 57 if userId != "" { 58 query = query.Where(sq.Eq{"UserId": userId}) 59 } 60 61 queryString, args, err := query.ToSql() 62 if err != nil { 63 return nil, errors.Wrap(err, "audits_tosql") 64 } 65 66 var audits model.Audits 67 if _, err := s.GetReplica().Select(&audits, queryString, args...); err != nil { 68 return nil, errors.Wrapf(err, "failed to get Audit list for userId=%s", userId) 69 } 70 return audits, nil 71 } 72 73 func (s SqlAuditStore) PermanentDeleteByUser(userId string) error { 74 if _, err := s.GetMaster().Exec("DELETE FROM Audits WHERE UserId = :userId", 75 map[string]interface{}{"userId": userId}); err != nil { 76 return errors.Wrapf(err, "failed to delete Audit with userId=%s", userId) 77 } 78 return nil 79 }