feat(t219): show pending-payment reconciliation

This commit is contained in:
QiuSW
2026-07-28 18:16:09 +08:00
parent c2ec98d5be
commit 78dc595815
20 changed files with 768 additions and 37 deletions
@@ -728,6 +728,35 @@ const orderSubmissionSelect = `SELECT
manual_reason_code, fenced_at, reconciled_at, manual_review_at
FROM order_submissions`
func listOrderSubmissions(
ctx context.Context,
queryer queryer,
taskID string,
) ([]domain.OrderSubmission, error) {
rows, err := queryer.QueryContext(
ctx,
orderSubmissionSelect+
` WHERE task_id = ? ORDER BY fenced_at ASC, id ASC`,
taskID,
)
if err != nil {
return nil, repositoryFailure(err)
}
defer rows.Close()
submissions := make([]domain.OrderSubmission, 0)
for rows.Next() {
submission, err := scanOrderSubmission(rows)
if err != nil {
return nil, repositoryFailure(err)
}
submissions = append(submissions, submission)
}
if err := rows.Err(); err != nil {
return nil, repositoryFailure(err)
}
return submissions, nil
}
func scanOrderSubmission(
scanner rowScanner,
) (domain.OrderSubmission, error) {
@@ -186,6 +186,7 @@ func TestStoreAssetAndTaskLifecycleIsTransactionalAndIdempotent(
}
if detail.Asset.ID != asset.ID ||
len(detail.Events) != 1 ||
len(detail.OrderSubmissions) != 0 ||
detail.Events[0].Type != "TASK_CREATED" {
t.Fatalf("detail = %+v", detail)
}
@@ -324,6 +324,10 @@ func (s *Store) GetTaskDetail(
if err != nil {
return domain.TaskDetail{}, err
}
orderSubmissions, err := listOrderSubmissions(ctx, tx, taskID)
if err != nil {
return domain.TaskDetail{}, err
}
detail := domain.TaskDetail{
Task: task,
Asset: asset,
@@ -331,6 +335,7 @@ func (s *Store) GetTaskDetail(
Events: events,
Report: report,
OrderAuthorizations: orderAuthorizations,
OrderSubmissions: orderSubmissions,
}
if err := tx.Commit(); err != nil {
return domain.TaskDetail{}, repositoryFailure(err)