@@ -3,11 +3,13 @@ package repo
3
3
import (
4
4
"context"
5
5
"errors"
6
+ "fmt"
6
7
"time"
7
8
8
9
"github.com/ItsNotGoodName/smtpbridge/internal/database"
9
10
. "github.com/ItsNotGoodName/smtpbridge/internal/jet/table"
10
11
"github.com/ItsNotGoodName/smtpbridge/internal/models"
12
+ "github.com/ItsNotGoodName/smtpbridge/internal/repo/orm"
11
13
"github.com/ItsNotGoodName/smtpbridge/pkg/pagination"
12
14
. "github.com/go-jet/jet/v2/sqlite"
13
15
"github.com/samber/lo"
@@ -60,49 +62,48 @@ func TraceCreate(ctx context.Context, db database.Querier, r models.Trace) (int6
60
62
61
63
func TraceList (ctx context.Context , db database.Querier , page pagination.Page , req models.DTOTraceListRequest ) (models.DTOTraceListResult , error ) {
62
64
subQuery := Traces .
63
- SELECT (
64
- Traces .RequestID .AS ("request_id" ),
65
- COUNT (Raw ("*" )).OVER ().AS ("count" ),
66
- ).
65
+ SELECT (Traces .RequestID .AS (Traces .RequestID .Name ())).
67
66
DISTINCT ()
68
67
// Order
69
- if req .Ascending {
70
- subQuery = subQuery .ORDER_BY (Traces .ID .ASC ())
71
- } else {
72
- subQuery = subQuery .ORDER_BY (Traces .ID .DESC ())
73
- }
68
+ subQuery = traceListOrder (subQuery , req )
74
69
// Pagination
75
70
subQuery = subQuery .
76
71
LIMIT (int64 (page .Limit ())).
77
72
OFFSET (int64 (page .Offset ()))
78
73
79
- var res struct {
80
- Count int `sql:"primary_key"`
81
- Trace []models.Trace
82
- }
83
- query := SELECT (tracePJ , Raw ("t.count" ).AS ("count" )).
74
+ var res []models.Trace
75
+ query := SELECT (tracePJ ).
84
76
FROM (subQuery .AsTable ("t" ).
85
- LEFT_JOIN (Traces , RawString ("t.request_id" ).EQ (Traces .RequestID )))
77
+ LEFT_JOIN (Traces , RawString (fmt . Sprintf ( "t.%s" , Traces . RequestID . Name ()) ).EQ (Traces .RequestID )))
86
78
// Order
87
- if req .Ascending {
88
- query = query .ORDER_BY (Traces .Seq .ASC ())
89
- } else {
90
- query = query .ORDER_BY (Traces .Seq .DESC ())
91
- }
79
+ query = traceListOrder (query , req )
92
80
err := query .QueryContext (ctx , db , & res )
93
81
if err != nil && ! errors .Is (err , ErrNoRows ) {
94
82
return models.DTOTraceListResult {}, err
95
83
}
96
84
97
- traces := lo .PartitionBy (res .Trace , func (t models.Trace ) string { return t .RequestID })
85
+ traces := lo .PartitionBy (res , func (t models.Trace ) string { return t .RequestID })
86
+
87
+ count , err := orm .CountQuery (ctx , db , Traces .
88
+ SELECT (COUNT (Raw (fmt .Sprintf ("DISTINCT %s" , Traces .RequestID .Name ()))).AS ("count" )))
89
+ if err != nil {
90
+ return models.DTOTraceListResult {}, err
91
+ }
98
92
99
- pageResult := pagination .NewPageResult (page , res . Count )
93
+ pageResult := pagination .NewPageResult (page , count )
100
94
return models.DTOTraceListResult {
101
95
PageResult : pageResult ,
102
96
Traces : traces ,
103
97
}, nil
104
98
}
105
99
100
+ func traceListOrder (s SelectStatement , req models.DTOTraceListRequest ) SelectStatement {
101
+ if req .Ascending {
102
+ return s .ORDER_BY (Traces .ID .ASC ())
103
+ }
104
+ return s .ORDER_BY (Traces .ID .DESC ())
105
+ }
106
+
106
107
func TraceDrop (ctx context.Context , db database.Querier ) (int64 , error ) {
107
108
res , err := Traces .
108
109
DELETE ().
0 commit comments