fix(ticket): filter stale ticket list
This commit is contained in:
@@ -2,10 +2,12 @@ package dashboard
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"cs-agent/internal/builders"
|
"cs-agent/internal/builders"
|
||||||
"cs-agent/internal/pkg/constants"
|
"cs-agent/internal/pkg/constants"
|
||||||
"cs-agent/internal/pkg/dto/request"
|
"cs-agent/internal/pkg/dto/request"
|
||||||
|
"cs-agent/internal/pkg/enums"
|
||||||
"cs-agent/internal/services"
|
"cs-agent/internal/services"
|
||||||
|
|
||||||
"github.com/kataras/iris/v12"
|
"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") {
|
if unassigned, _ := params.Get(c.Ctx, "unassigned"); unassigned == "1" || strings.EqualFold(unassigned, "true") {
|
||||||
cnd.Eq("current_assignee_id", 0)
|
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)
|
aggregate, err := services.TicketService.FindPageAggregateByCnd(cnd, operator.UserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return web.JsonError(err)
|
return web.JsonError(err)
|
||||||
|
|||||||
@@ -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) {
|
func TestTicketServiceFindPageAggregateEnrichesLookups(t *testing.T) {
|
||||||
setupTicketTestDB(t)
|
setupTicketTestDB(t)
|
||||||
operator := createTestOperator(t, "aggregate-operator")
|
operator := createTestOperator(t, "aggregate-operator")
|
||||||
|
|||||||
Reference in New Issue
Block a user