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  }