From 8b2de9472ef080c69e2c533aeb2d3dafcf7adfa0 Mon Sep 17 00:00:00 2001 From: Marco Pedone Date: Wed, 15 Oct 2025 14:52:30 +0200 Subject: [PATCH] feat: update GetAnnuncioParsed and ParseAnnunci methods for improved filtering and error handling --- apps/backend/miogest_handler.go | 81 +++++++++++++++++++-------------- apps/backend/queries/annunci.go | 14 +++--- apps/backend/server.go | 8 +++- 3 files changed, 60 insertions(+), 43 deletions(-) diff --git a/apps/backend/miogest_handler.go b/apps/backend/miogest_handler.go index 3917703..4b3f133 100644 --- a/apps/backend/miogest_handler.go +++ b/apps/backend/miogest_handler.go @@ -102,39 +102,32 @@ func (m *MiogestHandler) GetAnnunciParsed(i *ImageRefManager) typesdefs.AnnunciP } // versione per singolo annuncio -func (m *MiogestHandler) GetAnnuncioParsed(cod string, i *ImageRefManager) typesdefs.AnnuncioParsed { - data := m.ParseAnnunci2(cod, i) +func (m *MiogestHandler) GetAnnuncioParsed(codFilter string, i *ImageRefManager) typesdefs.AnnunciParsed { + data := m.ParseAnnunci(codFilter, i) if len(data.Annuncio) == 0 { - return typesdefs.AnnuncioParsed{} + return typesdefs.AnnunciParsed{} } - return data.Annuncio[0] + return data } -func (m *MiogestHandler) ParseAnnunci2(codFilter string, i *ImageRefManager) typesdefs.AnnunciParsed { - annunci := m.GetAnnunci() - - if codFilter != "" { - if len(annunci.Annuncio) == 0 { - return typesdefs.AnnunciParsed{} - } - if slices.ContainsFunc(annunci.Annuncio, func(a typesdefs.AnnuncioXML) bool { - - return *a.Codice == codFilter - }) { - - annunci.Annuncio = []typesdefs.AnnuncioXML{annunci.Annuncio[slices.IndexFunc(annunci.Annuncio, func(a typesdefs.AnnuncioXML) bool { - return *a.Codice == codFilter - })]} - //go on - } else { - return typesdefs.AnnunciParsed{} - } - } - return typesdefs.AnnunciParsed{} -} func (m *MiogestHandler) ParseAnnunci(codFilter string, i *ImageRefManager) typesdefs.AnnunciParsed { annunci := m.GetAnnunci() + + if len(annunci.Annuncio) == 0 { + return typesdefs.AnnunciParsed{} + } + + if codFilter != "" { + idx := slices.IndexFunc(annunci.Annuncio, func(a typesdefs.AnnuncioXML) bool { + return *a.Codice == codFilter + }) + if idx == -1 { + return typesdefs.AnnunciParsed{} + } + annunci.Annuncio = []typesdefs.AnnuncioXML{annunci.Annuncio[idx]} + } + image_codes_to_process := []string{} if config.Cfg.Images.Enabled { var err error @@ -142,16 +135,26 @@ func (m *MiogestHandler) ParseAnnunci(codFilter string, i *ImageRefManager) type if err != nil { log.Fatalf("Failed to find images to update: %v", err.Error()) } - missing_codes, err := i.MissingImageFolders() - if err != nil { - log.Fatalf("Failed to find missing image folders: %v", err.Error()) - } + if codFilter == "" { + // if processing all, also check for missing folders + missing_codes, err := i.MissingImageFolders() + if err != nil { + log.Fatalf("Failed to find missing image folders: %v", err.Error()) + } - if len(missing_codes) > 0 { - image_codes_to_process = append(image_codes_to_process, missing_codes...) - image_codes_to_process = slices.Compact(image_codes_to_process) + if len(missing_codes) > 0 { + + image_codes_to_process = append(image_codes_to_process, missing_codes...) + image_codes_to_process = slices.Compact(image_codes_to_process) + + } + } else { + // if processing single codice, ensure it's in the list + if !slices.Contains(image_codes_to_process, codFilter) { + image_codes_to_process = append(image_codes_to_process, codFilter) + } } - // Clear images folder of codes that need to be updated + // Clears images folder of codes that need to be updated if err := i.ClearImages(image_codes_to_process); err != nil { log.Fatalf("Failed to clear images: %v", err.Error()) } @@ -284,9 +287,17 @@ func extractData_update(annuncio *typesdefs.AnnuncioXML, updateImages bool, m *M folders := utils.GetPathDirsArray(filepath.Join(config.Cfg.Images.Path, tmp.Codice)) for _, folder := range folders { folderpath := filepath.Join(filepath.Join(config.Cfg.Images.Path, tmp.Codice), folder) + exists, err := utils.PathExists(folderpath) + if err != nil { + log.Fatalf("Failed to check if folder exists: %v", err) + } + if !exists { + // something went wrong, skip + continue + } files, err := os.ReadDir(folderpath) if err != nil { - panic(err) + log.Fatalf("Failed to read dir: %v", err) } for _, file := range files { if strings.Contains(file.Name(), "webp") && !strings.HasPrefix(file.Name(), "thumbnail") { diff --git a/apps/backend/queries/annunci.go b/apps/backend/queries/annunci.go index b03a661..ef11760 100644 --- a/apps/backend/queries/annunci.go +++ b/apps/backend/queries/annunci.go @@ -18,13 +18,15 @@ func AnnunciGetActive() ([]string, error) { return annunci, nil } -func AnnunciInsert(annunci typesdefs.AnnunciParsed) error { - - //SET ALL WEB TO FALSE - _, err := Db.Dbpool.Exec(Db.Ctx, "UPDATE public.annunci SET web = false, homepage = false, stato='Sospeso'") - if err != nil { - return fmt.Errorf("failed to set all web to false: %w", err) +func AnnunciInsert(annunci typesdefs.AnnunciParsed, resetAllBeforeUpdate bool) error { + var err error + if resetAllBeforeUpdate { + //SET ALL WEB TO FALSE + _, err = Db.Dbpool.Exec(Db.Ctx, "UPDATE public.annunci SET web = false, homepage = false, stato='Sospeso'") + if err != nil { + return fmt.Errorf("failed to set all web to false: %w", err) + } } //GET ALL CODICI var codici []string diff --git a/apps/backend/server.go b/apps/backend/server.go index 0731e6a..da91a80 100644 --- a/apps/backend/server.go +++ b/apps/backend/server.go @@ -124,7 +124,7 @@ func (s *Server) SetupRoutes() *echo.Echo { }) e.GET("/update", func(c echo.Context) error { var data = s.miogest.GetAnnunciParsed(s.imageManager) - err := queries.AnnunciInsert(data) + err := queries.AnnunciInsert(data, true) if err != nil { return c.String(http.StatusInternalServerError, err.Error()) } @@ -134,7 +134,11 @@ func (s *Server) SetupRoutes() *echo.Echo { cod := c.Param("cod") - var _ = s.miogest.GetAnnuncioParsed(cod, s.imageManager) + var data = s.miogest.GetAnnuncioParsed(cod, s.imageManager) + err := queries.AnnunciInsert(data, false) + if err != nil { + return c.String(http.StatusInternalServerError, err.Error()) + } return c.String(http.StatusOK, "Updated") })