fix(ticket): filter stale ticket list

This commit is contained in:
mlogclub
2026-05-02 20:05:35 +08:00
parent 43c245e37e
commit 3130d4f14d
2 changed files with 59 additions and 0 deletions
@@ -2,10 +2,12 @@ package dashboard
import (
"strings"
"time"
"cs-agent/internal/builders"
"cs-agent/internal/pkg/constants"
"cs-agent/internal/pkg/dto/request"
"cs-agent/internal/pkg/enums"
"cs-agent/internal/services"
"github.com/kataras/iris/v12"
@@ -43,6 +45,11 @@ func (c *TicketController) AnyList() *web.JsonResult {
if unassigned, _ := params.Get(c.Ctx, "unassigned"); unassigned == "1" || strings.EqualFold(unassigned, "true") {
cnd.Eq("current_assignee_id", 0)
}
if staleHours, _ := params.GetInt(c.Ctx, "staleHours"); staleHours > 0 {
cnd.
NotEq("status", enums.TicketStatusDone).
Where("updated_at < ?", time.Now().Add(-time.Duration(staleHours)*time.Hour))
}
aggregate, err := services.TicketService.FindPageAggregateByCnd(cnd, operator.UserID)
if err != nil {
return web.JsonError(err)
+52
View File
@@ -284,6 +284,58 @@ func TestTicketServiceSummaryCountsStaleTickets(t *testing.T) {
}
}
func TestTicketServiceFindPageAggregateFiltersStaleTickets(t *testing.T) {
setupTicketTestDB(t)
operator := createTestOperator(t, "stale-list-operator")
staleOpen, err := services.TicketService.CreateTicket(createTestTicketRequest("stale open ticket"), operator)
if err != nil {
t.Fatalf("CreateTicket() stale open error = %v", err)
}
staleDone, err := services.TicketService.CreateTicket(createTestTicketRequest("stale done ticket"), operator)
if err != nil {
t.Fatalf("CreateTicket() stale done error = %v", err)
}
freshOpen, err := services.TicketService.CreateTicket(createTestTicketRequest("fresh open ticket"), operator)
if err != nil {
t.Fatalf("CreateTicket() fresh open error = %v", err)
}
if err := services.TicketService.ChangeStatus(request.ChangeTicketStatusRequest{
TicketID: staleDone.ID,
Status: string(enums.TicketStatusDone),
}, operator); err != nil {
t.Fatalf("ChangeStatus() stale done error = %v", err)
}
staleUpdatedAt := time.Now().Add(-48 * time.Hour)
for _, ticketID := range []int64{staleOpen.ID, staleDone.ID} {
if err := repositories.TicketRepository.Updates(sqls.DB(), ticketID, map[string]any{
"updated_at": staleUpdatedAt,
}); err != nil {
t.Fatalf("update stale ticket %d error = %v", ticketID, err)
}
}
aggregate, err := services.TicketService.FindPageAggregateByCnd(
sqls.NewCnd().
NotEq("status", enums.TicketStatusDone).
Where("updated_at < ?", time.Now().Add(-24*time.Hour)).
Page(1, 10),
operator.UserID,
)
if err != nil {
t.Fatalf("FindPageAggregateByCnd() error = %v", err)
}
if len(aggregate.List) != 1 {
t.Fatalf("expected 1 stale non-done ticket, got %d: %+v", len(aggregate.List), aggregate.List)
}
if aggregate.List[0].ID != staleOpen.ID {
t.Fatalf("expected stale open ticket %d, got %d", staleOpen.ID, aggregate.List[0].ID)
}
if aggregate.List[0].ID == freshOpen.ID || aggregate.List[0].ID == staleDone.ID {
t.Fatalf("stale list included fresh or done ticket: %+v", aggregate.List[0])
}
}
func TestTicketServiceFindPageAggregateEnrichesLookups(t *testing.T) {
setupTicketTestDB(t)
operator := createTestOperator(t, "aggregate-operator")