thread-master/apps/backend/internal/handler/extension/download_extension_zip_hand...

35 lines
901 B
Go
Raw Normal View History

2026-07-13 01:15:30 +00:00
package extension
import (
"net/http"
"os"
"path/filepath"
"apps/backend/internal/logic/extension"
"apps/backend/internal/response"
"apps/backend/internal/svc"
)
func DownloadExtensionZipHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := extension.NewDownloadExtensionZipLogic(r.Context(), svcCtx)
if _, err := l.DownloadExtensionZip(); err != nil {
response.Write(r.Context(), w, nil, err)
return
}
path := svcCtx.ExtensionZipPath
if path == "" {
path = extension.ResolveZipPath(svcCtx)
}
w.Header().Set("Content-Type", "application/zip")
w.Header().Set("Content-Disposition", `attachment; filename="haixun-threads-sync.zip"`)
http.ServeFile(w, r, filepath.Clean(path))
}
}
// ensure zip exists for tests
func zipExists(p string) bool {
st, err := os.Stat(p)
return err == nil && st.Size() > 0
}