feat(t240): cache freight item images
This commit is contained in:
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user