Hallucinate some wires

This commit is contained in:
2026-01-26 09:35:12 +01:00
parent dfdd74f52e
commit e2e1ebe48f
8 changed files with 114 additions and 104 deletions

View File

@@ -1,4 +1,4 @@
package main
package api
import (
"encoding/base64"
@@ -22,7 +22,7 @@ type APIStatisticsRequest struct {
}
type APIAnalyticsRequest struct {
Filters AnalyticsFilters `json:"filters"`
Filters types.AnalyticsFilters `json:"filters"`
}
type APIModuleCoOccurrenceRequest struct {
@@ -64,109 +64,109 @@ type APIImageData struct {
// Analytics handlers
func handleAnalyticsTimeByHour(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryTimeByHour(r.Context(), req.Filters)
})
}
func handleAnalyticsTimeByDay(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryTimeByDay(r.Context(), req.Filters)
})
}
func handleAnalyticsTimeByDate(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryTimeByDate(r.Context(), req.Filters)
})
}
func handleAnalyticsTimeByMonth(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryTimeByMonth(r.Context(), req.Filters)
})
}
func handleAnalyticsLocationBySystem(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryLocationBySystem(r.Context(), req.Filters)
})
}
func handleAnalyticsLocationByRegion(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryLocationByRegion(r.Context(), req.Filters)
})
}
func handleAnalyticsLocationByConstellation(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryLocationByConstellation(r.Context(), req.Filters)
})
}
func handleAnalyticsLocationBySecurity(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryLocationBySecurity(r.Context(), req.Filters)
})
}
func handleAnalyticsShipByVictim(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryShipByVictim(r.Context(), req.Filters)
})
}
func handleAnalyticsShipByAttacker(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryShipByAttacker(r.Context(), req.Filters)
})
}
func handleAnalyticsPlayerByVictimCharacter(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryPlayerByVictimCharacter(r.Context(), req.Filters)
})
}
func handleAnalyticsPlayerByVictimCorporation(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryPlayerByVictimCorporation(r.Context(), req.Filters)
})
}
func handleAnalyticsPlayerByVictimAlliance(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryPlayerByVictimAlliance(r.Context(), req.Filters)
})
}
func handleAnalyticsPlayerByAttackerCharacter(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryPlayerByAttackerCharacter(r.Context(), req.Filters)
})
}
func handleAnalyticsPlayerByAttackerCorporation(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryPlayerByAttackerCorporation(r.Context(), req.Filters)
})
}
func handleAnalyticsPlayerByAttackerAlliance(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryPlayerByAttackerAlliance(r.Context(), req.Filters)
})
}
func handleAnalyticsModuleBySlotType(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryModuleBySlotType(r.Context(), req.Filters)
})
}
func handleAnalyticsModuleByModule(w http.ResponseWriter, r *http.Request) {
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
return db.QueryModuleByModule(r.Context(), req.Filters)
})
}
@@ -209,7 +209,7 @@ func handleAnalyticsModuleCoOccurrence(w http.ResponseWriter, r *http.Request) {
}
type APIKillmailIDsRequest struct {
Filters AnalyticsFilters `json:"filters"`
Filters types.AnalyticsFilters `json:"filters"`
Limit int `json:"limit"`
Offset int `json:"offset"`
}
@@ -296,7 +296,7 @@ func handleKillmail(w http.ResponseWriter, r *http.Request) {
}
}
type analyticsQueryFunc func(db DB, req APIAnalyticsRequest) (interface{}, error)
type analyticsQueryFunc func(database db.DB, req APIAnalyticsRequest) (interface{}, error)
func handleAnalyticsQuery(w http.ResponseWriter, r *http.Request, queryFn analyticsQueryFunc) {
flog := logger.Default.WithPrefix("handleAnalyticsQuery")

View File

@@ -1,4 +1,4 @@
package main
package api
import (
"bytes"

View File

@@ -3,40 +3,13 @@ package main
import (
"fmt"
"strings"
"zkillsusser/types"
)
// AnalyticsFilters represents the filter state for analytics queries
type AnalyticsFilters struct {
KillHour []uint8
KillDayOfWeek []uint8
KillDate []string
Month []string
SolarSystemID []int32
RegionName []string
ConstellationName []string
SecurityStatus []string
VictimShipTypeID []int32
VictimShipGroupName []string
VictimShipCategory []string
VictimCharacterName []string
VictimCorporation []string
VictimAlliance []string
AttackerShipType []string
AttackerShipGroup []string
AttackerCharacter []string
AttackerCorporation []string
AttackerAlliance []string
SlotType []string
HasModule *ModuleFilter
}
type ModuleFilter struct {
ModuleID int32
}
type FlatKillmailComplete struct {
FlatKillmail
Items []FlatKillmailItem `json:"items"`
types.FlatKillmail
Items []types.FlatKillmailItem `json:"items"`
}
// Time aggregation results
@@ -188,7 +161,7 @@ type ModuleCoOccurrence struct {
}
// buildWhereClause builds a WHERE clause from filters
func buildWhereClause(filters AnalyticsFilters) (string, []interface{}) {
func buildWhereClause(filters types.AnalyticsFilters) (string, []interface{}) {
var conditions []string
var args []interface{}
@@ -367,7 +340,7 @@ func buildWhereClause(filters AnalyticsFilters) (string, []interface{}) {
}
// buildAttackerWhereClause builds WHERE clause for attacker queries
func buildAttackerWhereClause(filters AnalyticsFilters) (string, []interface{}) {
func buildAttackerWhereClause(filters types.AnalyticsFilters) (string, []interface{}) {
var conditions []string
var args []interface{}
@@ -435,7 +408,7 @@ func buildAttackerWhereClause(filters AnalyticsFilters) (string, []interface{})
}
// getKillmailIDSubquery returns a subquery to filter by killmail_id from killmails table
func getKillmailIDSubquery(filters AnalyticsFilters) (string, []interface{}) {
func getKillmailIDSubquery(filters types.AnalyticsFilters) (string, []interface{}) {
whereClause, args := buildWhereClause(filters)
if whereClause == "" {
return "(SELECT killmail_id FROM zkill.killmails)", args

View File

@@ -5,11 +5,18 @@ import (
"fmt"
"strings"
"zkillsusser/types"
"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
logger "git.site.quack-lab.dev/dave/cylogger"
)
type DBWrapper struct {
ch driver.Conn
}
// Time aggregation queries
func (db *DBWrapper) QueryTimeByHour(ctx context.Context, filters AnalyticsFilters) ([]TimeAggregationByHour, error) {
func (db *DBWrapper) QueryTimeByHour(ctx context.Context, filters types.AnalyticsFilters) ([]TimeAggregationByHour, error) {
flog := logger.Default.WithPrefix("QueryTimeByHour")
whereClause, args := buildWhereClause(filters)
@@ -43,7 +50,7 @@ func (db *DBWrapper) QueryTimeByHour(ctx context.Context, filters AnalyticsFilte
return results, nil
}
func (db *DBWrapper) QueryTimeByDay(ctx context.Context, filters AnalyticsFilters) ([]TimeAggregationByDay, error) {
func (db *DBWrapper) QueryTimeByDay(ctx context.Context, filters types.AnalyticsFilters) ([]TimeAggregationByDay, error) {
flog := logger.Default.WithPrefix("QueryTimeByDay")
whereClause, args := buildWhereClause(filters)
@@ -85,7 +92,7 @@ func (db *DBWrapper) QueryTimeByDay(ctx context.Context, filters AnalyticsFilter
return results, nil
}
func (db *DBWrapper) QueryTimeByDate(ctx context.Context, filters AnalyticsFilters) ([]TimeAggregationByDate, error) {
func (db *DBWrapper) QueryTimeByDate(ctx context.Context, filters types.AnalyticsFilters) ([]TimeAggregationByDate, error) {
flog := logger.Default.WithPrefix("QueryTimeByDate")
whereClause, args := buildWhereClause(filters)
@@ -119,7 +126,7 @@ func (db *DBWrapper) QueryTimeByDate(ctx context.Context, filters AnalyticsFilte
return results, nil
}
func (db *DBWrapper) QueryTimeByMonth(ctx context.Context, filters AnalyticsFilters) ([]TimeAggregationByMonth, error) {
func (db *DBWrapper) QueryTimeByMonth(ctx context.Context, filters types.AnalyticsFilters) ([]TimeAggregationByMonth, error) {
flog := logger.Default.WithPrefix("QueryTimeByMonth")
whereClause, args := buildWhereClause(filters)
@@ -153,7 +160,7 @@ func (db *DBWrapper) QueryTimeByMonth(ctx context.Context, filters AnalyticsFilt
}
// Location aggregation queries
func (db *DBWrapper) QueryLocationBySystem(ctx context.Context, filters AnalyticsFilters) ([]LocationAggregationBySystem, error) {
func (db *DBWrapper) QueryLocationBySystem(ctx context.Context, filters types.AnalyticsFilters) ([]LocationAggregationBySystem, error) {
flog := logger.Default.WithPrefix("QueryLocationBySystem")
whereClause, args := buildWhereClause(filters)
@@ -190,7 +197,7 @@ func (db *DBWrapper) QueryLocationBySystem(ctx context.Context, filters Analytic
return results, nil
}
func (db *DBWrapper) QueryLocationByRegion(ctx context.Context, filters AnalyticsFilters) ([]LocationAggregationByRegion, error) {
func (db *DBWrapper) QueryLocationByRegion(ctx context.Context, filters types.AnalyticsFilters) ([]LocationAggregationByRegion, error) {
flog := logger.Default.WithPrefix("QueryLocationByRegion")
whereClause, args := buildWhereClause(filters)
@@ -224,7 +231,7 @@ func (db *DBWrapper) QueryLocationByRegion(ctx context.Context, filters Analytic
return results, nil
}
func (db *DBWrapper) QueryLocationByConstellation(ctx context.Context, filters AnalyticsFilters) ([]LocationAggregationByConstellation, error) {
func (db *DBWrapper) QueryLocationByConstellation(ctx context.Context, filters types.AnalyticsFilters) ([]LocationAggregationByConstellation, error) {
flog := logger.Default.WithPrefix("QueryLocationByConstellation")
whereClause, args := buildWhereClause(filters)
@@ -258,7 +265,7 @@ func (db *DBWrapper) QueryLocationByConstellation(ctx context.Context, filters A
return results, nil
}
func (db *DBWrapper) QueryLocationBySecurity(ctx context.Context, filters AnalyticsFilters) ([]LocationAggregationBySecurity, error) {
func (db *DBWrapper) QueryLocationBySecurity(ctx context.Context, filters types.AnalyticsFilters) ([]LocationAggregationBySecurity, error) {
flog := logger.Default.WithPrefix("QueryLocationBySecurity")
whereClause, args := buildWhereClause(filters)
@@ -296,7 +303,7 @@ func (db *DBWrapper) QueryLocationBySecurity(ctx context.Context, filters Analyt
}
// Ship aggregation queries
func (db *DBWrapper) QueryShipByVictim(ctx context.Context, filters AnalyticsFilters) ([]ShipAggregationByVictimShip, error) {
func (db *DBWrapper) QueryShipByVictim(ctx context.Context, filters types.AnalyticsFilters) ([]ShipAggregationByVictimShip, error) {
flog := logger.Default.WithPrefix("QueryShipByVictim")
whereClause, args := buildWhereClause(filters)
@@ -332,7 +339,7 @@ func (db *DBWrapper) QueryShipByVictim(ctx context.Context, filters AnalyticsFil
return results, nil
}
func (db *DBWrapper) QueryShipByAttacker(ctx context.Context, filters AnalyticsFilters) ([]ShipAggregationByAttackerShip, error) {
func (db *DBWrapper) QueryShipByAttacker(ctx context.Context, filters types.AnalyticsFilters) ([]ShipAggregationByAttackerShip, error) {
flog := logger.Default.WithPrefix("QueryShipByAttacker")
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
whereClause, whereArgs := buildAttackerWhereClause(filters)
@@ -372,7 +379,7 @@ func (db *DBWrapper) QueryShipByAttacker(ctx context.Context, filters AnalyticsF
}
// Player aggregation queries
func (db *DBWrapper) QueryPlayerByVictimCharacter(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByVictimCharacter, error) {
func (db *DBWrapper) QueryPlayerByVictimCharacter(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByVictimCharacter, error) {
flog := logger.Default.WithPrefix("QueryPlayerByVictimCharacter")
whereClause, args := buildWhereClause(filters)
@@ -407,7 +414,7 @@ func (db *DBWrapper) QueryPlayerByVictimCharacter(ctx context.Context, filters A
return results, nil
}
func (db *DBWrapper) QueryPlayerByVictimCorporation(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByVictimCorporation, error) {
func (db *DBWrapper) QueryPlayerByVictimCorporation(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByVictimCorporation, error) {
flog := logger.Default.WithPrefix("QueryPlayerByVictimCorporation")
whereClause, args := buildWhereClause(filters)
@@ -441,7 +448,7 @@ func (db *DBWrapper) QueryPlayerByVictimCorporation(ctx context.Context, filters
return results, nil
}
func (db *DBWrapper) QueryPlayerByVictimAlliance(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByVictimAlliance, error) {
func (db *DBWrapper) QueryPlayerByVictimAlliance(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByVictimAlliance, error) {
flog := logger.Default.WithPrefix("QueryPlayerByVictimAlliance")
whereClause, args := buildWhereClause(filters)
@@ -482,7 +489,7 @@ func (db *DBWrapper) QueryPlayerByVictimAlliance(ctx context.Context, filters An
return results, nil
}
func (db *DBWrapper) QueryPlayerByAttackerCharacter(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByAttackerCharacter, error) {
func (db *DBWrapper) QueryPlayerByAttackerCharacter(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByAttackerCharacter, error) {
flog := logger.Default.WithPrefix("QueryPlayerByAttackerCharacter")
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
whereClause, whereArgs := buildAttackerWhereClause(filters)
@@ -521,7 +528,7 @@ func (db *DBWrapper) QueryPlayerByAttackerCharacter(ctx context.Context, filters
return results, nil
}
func (db *DBWrapper) QueryPlayerByAttackerCorporation(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByAttackerCorporation, error) {
func (db *DBWrapper) QueryPlayerByAttackerCorporation(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByAttackerCorporation, error) {
flog := logger.Default.WithPrefix("QueryPlayerByAttackerCorporation")
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
whereClause, whereArgs := buildAttackerWhereClause(filters)
@@ -558,7 +565,7 @@ func (db *DBWrapper) QueryPlayerByAttackerCorporation(ctx context.Context, filte
return results, nil
}
func (db *DBWrapper) QueryPlayerByAttackerAlliance(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByAttackerAlliance, error) {
func (db *DBWrapper) QueryPlayerByAttackerAlliance(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByAttackerAlliance, error) {
flog := logger.Default.WithPrefix("QueryPlayerByAttackerAlliance")
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
whereClause, whereArgs := buildAttackerWhereClause(filters)
@@ -596,7 +603,7 @@ func (db *DBWrapper) QueryPlayerByAttackerAlliance(ctx context.Context, filters
}
// Module aggregation queries
func (db *DBWrapper) QueryModuleBySlotType(ctx context.Context, filters AnalyticsFilters) ([]ModuleAggregationBySlotType, error) {
func (db *DBWrapper) QueryModuleBySlotType(ctx context.Context, filters types.AnalyticsFilters) ([]ModuleAggregationBySlotType, error) {
flog := logger.Default.WithPrefix("QueryModuleBySlotType")
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
@@ -645,7 +652,7 @@ func (db *DBWrapper) QueryModuleBySlotType(ctx context.Context, filters Analytic
return results, nil
}
func (db *DBWrapper) QueryModuleByModule(ctx context.Context, filters AnalyticsFilters) ([]ModuleAggregationByModule, error) {
func (db *DBWrapper) QueryModuleByModule(ctx context.Context, filters types.AnalyticsFilters) ([]ModuleAggregationByModule, error) {
flog := logger.Default.WithPrefix("QueryModuleByModule")
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
@@ -696,7 +703,7 @@ func (db *DBWrapper) QueryModuleByModule(ctx context.Context, filters AnalyticsF
return results, nil
}
func (db *DBWrapper) QueryModuleCoOccurrence(ctx context.Context, filters AnalyticsFilters, selectedModuleID int32, selectedSlot string) ([]ModuleCoOccurrence, error) {
func (db *DBWrapper) QueryModuleCoOccurrence(ctx context.Context, filters types.AnalyticsFilters, selectedModuleID int32, selectedSlot string) ([]ModuleCoOccurrence, error) {
flog := logger.Default.WithPrefix("QueryModuleCoOccurrence")
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
@@ -740,7 +747,7 @@ func (db *DBWrapper) QueryModuleCoOccurrence(ctx context.Context, filters Analyt
return results, nil
}
func (db *DBWrapper) QueryKillmailIDs(ctx context.Context, filters AnalyticsFilters, limit, offset int) ([]int64, error) {
func (db *DBWrapper) QueryKillmailIDs(ctx context.Context, filters types.AnalyticsFilters, limit, offset int) ([]int64, error) {
flog := logger.Default.WithPrefix("QueryKillmailIDs")
whereClause, args := buildWhereClause(filters)
@@ -821,11 +828,11 @@ func (db *DBWrapper) QueryKillmailWithItems(ctx context.Context, killmailID int6
defer rows.Close()
var result *FlatKillmailComplete
var items []FlatKillmailItem
var items []types.FlatKillmailItem
for rows.Next() {
var km FlatKillmail
var item FlatKillmailItem
var km types.FlatKillmail
var item types.FlatKillmailItem
var itemTypeID int32
var itemTypeName string
var itemGroupName string
@@ -876,7 +883,7 @@ func (db *DBWrapper) QueryKillmailWithItems(ctx context.Context, killmailID int6
if result == nil {
result = &FlatKillmailComplete{
FlatKillmail: km,
Items: []FlatKillmailItem{},
Items: []types.FlatKillmailItem{},
}
}

View File

@@ -12,7 +12,7 @@ func TestQueryTimeByHour(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryTimeByHour(ctx, filters)
if err != nil {
@@ -40,7 +40,7 @@ func TestQueryTimeByDay(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryTimeByDay(ctx, filters)
if err != nil {
@@ -68,7 +68,7 @@ func TestQueryTimeByDate(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryTimeByDate(ctx, filters)
if err != nil {
@@ -96,7 +96,7 @@ func TestQueryTimeByMonth(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryTimeByMonth(ctx, filters)
if err != nil {
@@ -124,7 +124,7 @@ func TestQueryLocationBySystem(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryLocationBySystem(ctx, filters)
if err != nil {
@@ -152,7 +152,7 @@ func TestQueryLocationByRegion(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryLocationByRegion(ctx, filters)
if err != nil {
@@ -180,7 +180,7 @@ func TestQueryLocationByConstellation(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryLocationByConstellation(ctx, filters)
if err != nil {
@@ -208,7 +208,7 @@ func TestQueryLocationBySecurity(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryLocationBySecurity(ctx, filters)
if err != nil {
@@ -233,7 +233,7 @@ func TestQueryShipByVictim(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryShipByVictim(ctx, filters)
if err != nil {
@@ -261,7 +261,7 @@ func TestQueryShipByAttacker(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryShipByAttacker(ctx, filters)
if err != nil {
@@ -289,7 +289,7 @@ func TestQueryPlayerByVictimCharacter(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryPlayerByVictimCharacter(ctx, filters)
if err != nil {
@@ -317,7 +317,7 @@ func TestQueryPlayerByVictimCorporation(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryPlayerByVictimCorporation(ctx, filters)
if err != nil {
@@ -345,7 +345,7 @@ func TestQueryPlayerByVictimAlliance(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryPlayerByVictimAlliance(ctx, filters)
if err != nil {
@@ -373,7 +373,7 @@ func TestQueryPlayerByAttackerCharacter(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryPlayerByAttackerCharacter(ctx, filters)
if err != nil {
@@ -401,7 +401,7 @@ func TestQueryPlayerByAttackerCorporation(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryPlayerByAttackerCorporation(ctx, filters)
if err != nil {
@@ -429,7 +429,7 @@ func TestQueryPlayerByAttackerAlliance(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryPlayerByAttackerAlliance(ctx, filters)
if err != nil {
@@ -457,7 +457,7 @@ func TestQueryModuleBySlotType(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryModuleBySlotType(ctx, filters)
if err != nil {
@@ -482,7 +482,7 @@ func TestQueryModuleByModule(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryModuleByModule(ctx, filters)
if err != nil {
@@ -510,7 +510,7 @@ func TestQueryModuleCoOccurrence(t *testing.T) {
}
ctx := context.Background()
filters := AnalyticsFilters{}
filters := types.AnalyticsFilters{}
results, err := db.QueryModuleCoOccurrence(ctx, filters, 26914, "mid")
if err != nil {

View File

@@ -1,4 +1,4 @@
package main
package db
import (
"context"
@@ -6,6 +6,7 @@ import (
"strings"
"zkillsusser/models"
"zkillsusser/types"
utils "git.site.quack-lab.dev/dave/cyutils"
@@ -20,7 +21,7 @@ type DB interface {
Init() error
Get() *gorm.DB
SaveFlatKillmails(killmails []*FlatKillmail, attackers []FlatKillmailAttacker, items []FlatKillmailItem) error
SaveFlatKillmails(killmails []*types.FlatKillmail, attackers []types.FlatKillmailAttacker, items []types.FlatKillmailItem) error
SearchShips(query string, limit int) ([]models.InvType, error)
SearchSystems(query string, limit int) ([]models.MapSolarSystem, error)
SearchModules(query string, limit int) ([]models.InvType, error)
@@ -29,7 +30,7 @@ type DB interface {
GetItemTypes(itemIDs []int64) ([]models.InvType, error)
GetSolarSystems(systemIDs []int64) ([]models.MapSolarSystem, error)
ExpandGroupsIntoItemTypeIds(groups []int64) ([]int64, error)
GetModuleSlots(moduleIDs []int64) (map[int64]ModuleSlot, error)
GetModuleSlots(moduleIDs []int64) (map[int64]types.ModuleSlot, error)
GetType(ctx context.Context, typeID int32) (*models.InvType, error)
GetGroup(ctx context.Context, groupID int32) (*models.InvGroup, error)

View File

@@ -1,6 +1,7 @@
package main
import (
"zkillsusser/api"
"zkillsusser/config"
"zkillsusser/pipeline"
@@ -17,7 +18,7 @@ func main() {
logger.Info("Starting")
if config.ServerMode {
StartAPIServer(config.ServerPort)
api.StartAPIServer(config.ServerPort)
return
}

View File

@@ -120,3 +120,31 @@ func derefInt64(i *int64) int64 {
}
return *i
}
type ModuleFilter struct {
ModuleID int32
}
type AnalyticsFilters struct {
KillHour []uint8
KillDayOfWeek []uint8
KillDate []string
Month []string
SolarSystemID []int32
RegionName []string
ConstellationName []string
SecurityStatus []string
VictimShipTypeID []int32
VictimShipGroupName []string
VictimShipCategory []string
VictimCharacterName []string
VictimCorporation []string
VictimAlliance []string
AttackerShipType []string
AttackerShipGroup []string
AttackerCharacter []string
AttackerCorporation []string
AttackerAlliance []string
SlotType []string
HasModule *ModuleFilter
}