61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package queries
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"fiskerinc.com/modules/common"
|
|
"fiskerinc.com/modules/validator"
|
|
|
|
"github.com/go-pg/pg/v10/orm"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type APICallsInterface interface {
|
|
Insert(apiCall common.APICall) (orm.Result, error)
|
|
Search(filter common.APICallsSearch, paging *PageQueryOptions) ([]common.APICall, int, error)
|
|
}
|
|
|
|
type APICalls struct {
|
|
QueryBase
|
|
}
|
|
|
|
func (kv *APICalls) Insert(apiCall common.APICall) (orm.Result, error) {
|
|
err := validator.ValidateStruct(apiCall)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
return kv.insert(&apiCall)
|
|
}
|
|
|
|
func (kv *APICalls) Search(filter common.APICallsSearch, paging *PageQueryOptions) ([]common.APICall, int, error) {
|
|
calls := []common.APICall{}
|
|
query := kv.GetDBConn().Model(&calls)
|
|
|
|
kv.pageQuery(query, paging)
|
|
kv.applyFilters(query, filter)
|
|
count, err := query.SelectAndCount()
|
|
if err != nil {
|
|
return nil, 0, errors.WithStack(err)
|
|
}
|
|
|
|
return calls, count, nil
|
|
}
|
|
|
|
func (kv *APICalls) applyFilters(query *orm.Query, filter common.APICallsSearch) {
|
|
if filter.Search != "" {
|
|
search := strings.ToLower("%" + filter.Search + "%")
|
|
query.Where("LOWER(client_id) LIKE ? "+
|
|
"OR LOWER(endpoint) LIKE ? "+
|
|
"OR LOWER(method) LIKE ?", search, search, search)
|
|
}
|
|
|
|
if filter.From != nil {
|
|
query.Where("created_at >= ?", filter.From)
|
|
}
|
|
|
|
if filter.To != nil {
|
|
query.Where("created_at <= ?", filter.To)
|
|
}
|
|
}
|