feat(t240): cache freight item images

This commit is contained in:
QiuSW
2026-07-29 15:12:05 +08:00
parent 5f17fc11aa
commit c7e152aaa1
28 changed files with 1728 additions and 30 deletions
@@ -30,6 +30,7 @@ type AdminServices struct {
Results *usecase.ExecutionResultService
Authorizations *usecase.OrderAuthorizationService
Freight *usecase.FreightService
FreightImages *usecase.FreightImageService
Procurement *usecase.ProcurementService
ERP *shunyunbao.SessionManager
}
@@ -75,6 +76,12 @@ func registerAdminAPI(routes gin.IRoutes, services AdminServices) error {
routes.GET("/api/v1/freight-orders", handler.listFreightOrders)
routes.GET("/api/v1/freight-orders/:id", handler.freightOrderDetail)
}
if services.FreightImages != nil {
routes.GET(
"/api/v1/freight-items/:id/image",
handler.freightItemImage,
)
}
if services.Procurement != nil {
routes.POST(
"/api/v1/freight-items/:id/procurement-request",
@@ -92,6 +99,29 @@ func registerAdminAPI(routes gin.IRoutes, services AdminServices) error {
return nil
}
func (h *adminHandlers) freightItemImage(ctx *gin.Context) {
result, err := h.services.FreightImages.OpenItemImage(
ctx.Request.Context(),
localAdminSubject,
ctx.Param("id"),
)
if err != nil {
writeUsecaseError(ctx, err)
return
}
defer result.Content.Close()
ctx.Header("Cache-Control", "private, no-store")
ctx.Header("Content-Type", result.Image.MediaType)
ctx.Header(
"Content-Length",
strconv.FormatInt(result.Image.SizeBytes, 10),
)
ctx.Header("ETag", `"`+result.Image.SHA256+`"`)
ctx.Header("X-Content-Type-Options", "nosniff")
ctx.Status(http.StatusOK)
_, _ = io.Copy(ctx.Writer, result.Content)
}
func (h *adminHandlers) evidenceContent(ctx *gin.Context) {
result, err := h.services.Results.OpenEvidence(
ctx.Request.Context(),