49 lines
986 B
Go
49 lines
986 B
Go
package services
|
|
|
|
import (
|
|
"platform/pkg/u"
|
|
m "platform/web/models"
|
|
q "platform/web/queries"
|
|
)
|
|
|
|
var Edge = &edgeService{}
|
|
|
|
type edgeService struct{}
|
|
|
|
func (s *edgeService) AllEdges(count int, filter EdgeFilter) ([]*m.Edge, error) {
|
|
do := q.Edge.Where(q.Edge.Type.Eq(int(m.EdgeTypeSelfBuilt)))
|
|
if prov := u.N(filter.Prov); prov != nil {
|
|
do = do.Where(q.Edge.Prov.Eq(*prov))
|
|
}
|
|
if city := u.N(filter.City); city != nil {
|
|
do = do.Where(q.Edge.City.Eq(*city))
|
|
}
|
|
if isp := u.X(filter.Isp.String()); isp != nil {
|
|
do = do.Where(q.Edge.ISP.Eq(int(*filter.Isp)))
|
|
}
|
|
if count > 0 {
|
|
do = do.Limit(count)
|
|
}
|
|
|
|
edges, err := q.Edge.Where(do).Find()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return edges, nil
|
|
}
|
|
|
|
type EdgeFilter struct {
|
|
Isp *m.EdgeISP `json:"isp"`
|
|
Prov *string `json:"prov"`
|
|
City *string `json:"city"`
|
|
}
|
|
|
|
func (f *EdgeFilter) IsEmpty() bool {
|
|
if f == nil {
|
|
return true
|
|
}
|
|
|
|
return u.X(f.Isp.String()) == nil && u.N(f.Prov) == nil && u.N(f.City) == nil
|
|
}
|