feat(t241): improve freight admin views
This commit is contained in:
@@ -90,6 +90,12 @@ func TestFreightItemImagesAreCurrentRetryableAndRollbackGuarded(
|
||||
t.Fatalf("retry jobs = %+v, %v", jobs, err)
|
||||
}
|
||||
orders, _ := store.ListFreightOrders(ctx, "local-admin", 10)
|
||||
if len(orders) != 1 ||
|
||||
orders[0].PreviewItemID != ready.FreightOrderItemID ||
|
||||
orders[0].PreviewTitle != "商品一" ||
|
||||
orders[0].PreviewImageStatus != domain.FreightItemImageReady {
|
||||
t.Fatalf("freight order preview = %+v", orders)
|
||||
}
|
||||
detail, err := store.GetFreightOrder(
|
||||
ctx,
|
||||
"local-admin",
|
||||
|
||||
@@ -488,21 +488,80 @@ func (store *Store) ListFreightOrders(
|
||||
if err != nil {
|
||||
return nil, repositoryFailure(err)
|
||||
}
|
||||
defer rows.Close()
|
||||
orders := make([]domain.FreightOrder, 0)
|
||||
for rows.Next() {
|
||||
order, err := scanFreightOrder(rows)
|
||||
if err != nil {
|
||||
rows.Close()
|
||||
return nil, repositoryFailure(err)
|
||||
}
|
||||
orders = append(orders, order)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
rows.Close()
|
||||
return nil, repositoryFailure(err)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, repositoryFailure(err)
|
||||
}
|
||||
for index := range orders {
|
||||
if err := store.loadFreightOrderPreview(
|
||||
ctx,
|
||||
&orders[index],
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return orders, nil
|
||||
}
|
||||
|
||||
func (store *Store) loadFreightOrderPreview(
|
||||
ctx context.Context,
|
||||
order *domain.FreightOrder,
|
||||
) error {
|
||||
var itemID, title string
|
||||
var itemThumb, imageThumb, imageStatus sql.NullString
|
||||
err := store.db.QueryRowContext(
|
||||
ctx,
|
||||
`SELECT item.id, item.title, item.product_thumb_ref,
|
||||
image.product_thumb_ref, image.status
|
||||
FROM freight_order_items AS item
|
||||
LEFT JOIN freight_item_images AS image
|
||||
ON image.freight_order_item_id = item.id
|
||||
WHERE item.freight_order_id = ? AND item.is_present = 1
|
||||
ORDER BY CAST(item.external_item_id AS INTEGER),
|
||||
item.external_item_id
|
||||
LIMIT 1`,
|
||||
order.ID,
|
||||
).Scan(
|
||||
&itemID,
|
||||
&title,
|
||||
&itemThumb,
|
||||
&imageThumb,
|
||||
&imageStatus,
|
||||
)
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil
|
||||
}
|
||||
if err != nil {
|
||||
return repositoryFailure(err)
|
||||
}
|
||||
order.PreviewItemID = itemID
|
||||
order.PreviewTitle = title
|
||||
switch {
|
||||
case !itemThumb.Valid:
|
||||
order.PreviewImageStatus = domain.FreightItemImageNone
|
||||
case imageThumb.Valid && imageStatus.Valid &&
|
||||
imageThumb.String == itemThumb.String:
|
||||
order.PreviewImageStatus = domain.FreightItemImageStatus(
|
||||
imageStatus.String,
|
||||
)
|
||||
default:
|
||||
order.PreviewImageStatus = domain.FreightItemImagePending
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (store *Store) GetFreightOrder(
|
||||
ctx context.Context,
|
||||
creatorSubject, orderID string,
|
||||
|
||||
Reference in New Issue
Block a user