From ce110ed86f9a8770db9e2028ba006bbee911e151 Mon Sep 17 00:00:00 2001 From: MEHMETKECECI Date: Sat, 14 Feb 2026 16:55:10 +0300 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- svc/routes/order_pdf.go | 6 +-- svc/routes/statement_header_pdf.go | 8 ++-- svc/routes/statements_pdf.go | 8 ++-- ui/src/services/api.js | 64 ++++++++++++++++++++++++++++-- 4 files changed, 69 insertions(+), 17 deletions(-) diff --git a/svc/routes/order_pdf.go b/svc/routes/order_pdf.go index 9550058..65021c6 100644 --- a/svc/routes/order_pdf.go +++ b/svc/routes/order_pdf.go @@ -10,7 +10,6 @@ import ( "log" "math" "net/http" - "os" "sort" "strings" "time" @@ -627,9 +626,8 @@ func drawOrderHeader(pdf *gofpdf.Fpdf, h *OrderHeader, showDesc bool) float64 { /* ---------------------------------------------------- 1) LOGO ---------------------------------------------------- */ - logo := "./public/Baggi-Tekstil-A.s-Logolu.jpeg" - if _, err := os.Stat(logo); err == nil { - pdf.ImageOptions(logo, marginL, y, 32, 0, false, gofpdf.ImageOptions{}, 0, "") + if logoPath, err := resolvePdfImagePath("Baggi-Tekstil-A.s-Logolu.jpeg"); err == nil { + pdf.ImageOptions(logoPath, marginL, y, 32, 0, false, gofpdf.ImageOptions{}, 0, "") } /* ---------------------------------------------------- diff --git a/svc/routes/statement_header_pdf.go b/svc/routes/statement_header_pdf.go index 4046899..dd045a8 100644 --- a/svc/routes/statement_header_pdf.go +++ b/svc/routes/statement_header_pdf.go @@ -9,7 +9,6 @@ import ( "fmt" "log" "net/http" - "path/filepath" "sort" "strings" "time" @@ -137,10 +136,9 @@ func hCalcRowHeightForText(pdf *gofpdf.Fpdf, text string, colWidth, lineHeight, /* ============================ HEADER ============================ */ func hDrawPageHeader(pdf *gofpdf.Fpdf, cariKod, cariIsim, start, end string) float64 { - logoPath, _ := filepath.Abs("./public/Baggi-Tekstil-A.s-Logolu.jpeg") - - // Logo - pdf.ImageOptions(logoPath, hMarginL, 2, hLogoW, 0, false, gofpdf.ImageOptions{}, 0, "") + if logoPath, err := resolvePdfImagePath("Baggi-Tekstil-A.s-Logolu.jpeg"); err == nil { + pdf.ImageOptions(logoPath, hMarginL, 2, hLogoW, 0, false, gofpdf.ImageOptions{}, 0, "") + } // Başlıklar pdf.SetFont(hFontFamilyBold, "", 16) diff --git a/svc/routes/statements_pdf.go b/svc/routes/statements_pdf.go index 42b28f3..b490e8c 100644 --- a/svc/routes/statements_pdf.go +++ b/svc/routes/statements_pdf.go @@ -10,7 +10,6 @@ import ( "fmt" "log" "net/http" - "path/filepath" "sort" "strings" "time" @@ -225,10 +224,9 @@ func drawLabeledBox(pdf *gofpdf.Fpdf, x, y, w, h float64, label, value string, a } func drawPageHeader(pdf *gofpdf.Fpdf, cariKod, cariIsim, start, end string) float64 { - logoPath, _ := filepath.Abs("./public/Baggi-Tekstil-A.s-Logolu.jpeg") - - // Logo - pdf.ImageOptions(logoPath, hMarginL, 2, hLogoW, 0, false, gofpdf.ImageOptions{}, 0, "") + if logoPath, err := resolvePdfImagePath("Baggi-Tekstil-A.s-Logolu.jpeg"); err == nil { + pdf.ImageOptions(logoPath, hMarginL, 2, hLogoW, 0, false, gofpdf.ImageOptions{}, 0, "") + } // Başlıklar pdf.SetFont(hFontFamilyBold, "", 16) diff --git a/ui/src/services/api.js b/ui/src/services/api.js index 348cddc..8c6bb3b 100644 --- a/ui/src/services/api.js +++ b/ui/src/services/api.js @@ -61,8 +61,66 @@ export const put = (u, b = {}, c = {}) => export const del = (u, p = {}, c = {}) => api.delete(u, { params: p, ...c }).then(r => r.data) -export const download = (u, p = {}, c = {}) => - api.get(u, { params: p, responseType: 'blob', ...c }) - .then(r => r.data) +async function parseBlobErrorMessage(data) { + if (!data) return '' + + if (typeof Blob !== 'undefined' && data instanceof Blob) { + try { + const text = (await data.text())?.trim() + if (!text) return '' + + try { + const json = JSON.parse(text) + return ( + json?.detail || + json?.message || + json?.error || + text + ) + } catch { + return text + } + } catch { + return '' + } + } + + if (typeof data === 'string') return data.trim() + if (typeof data === 'object') { + return ( + data?.detail || + data?.message || + data?.error || + '' + ) + } + + return '' +} + +export const download = async (u, p = {}, c = {}) => { + try { + const r = await api.get(u, { params: p, responseType: 'blob', ...c }) + return r.data + } catch (err) { + let detail = + err?.response?.data?.detail || + err?.response?.data?.message || + '' + + if (!detail) { + detail = await parseBlobErrorMessage(err?.response?.data) + } + + if (!detail) { + detail = err?.message || 'Download failed' + } + + const wrapped = new Error(detail) + wrapped.status = err?.response?.status + wrapped.original = err + throw wrapped + } +} export default api