From 3c86d356638f0ce6d4ad2905cec1b3bf49b98387 Mon Sep 17 00:00:00 2001 From: Mazyar Date: Sat, 23 May 2026 23:00:37 +0330 Subject: [PATCH] get liked tenders error --- internal/feedback/service.go | 172 +++++++++++++++-------------------- 1 file changed, 71 insertions(+), 101 deletions(-) diff --git a/internal/feedback/service.go b/internal/feedback/service.go index a84c6af..691734e 100644 --- a/internal/feedback/service.go +++ b/internal/feedback/service.go @@ -16,7 +16,7 @@ type Service interface { GetByTenderID(ctx context.Context, tenderID, companyID string) (*FeedbackResponse, error) Delete(ctx context.Context, id string) error CompanyStats(ctx context.Context, companyID string) (*StatsResponse, error) - getDetails(ctx context.Context, tenderID, companyID string) (*tenderResponse, *companyResponse, error) + getDetails(ctx context.Context, tenderID, companyID string) (*tenderResponse, *companyResponse) } // feedbackService implements FeedbackService interface @@ -58,14 +58,7 @@ func (s *feedbackService) Toggle(ctx context.Context, req ToggleFeedbackForm, cu return nil, err } - tender, company, err := s.getDetails(ctx, req.Tender, *companyID) - if err != nil { - s.logger.Error("Failed to get details", map[string]interface{}{ - "tender_id": req.Tender, - "company_id": *companyID, - "error": err.Error(), - }) - } + tender, company := s.getDetails(ctx, req.Tender, *companyID) return feedback.ToResponse(tender, company), nil } @@ -88,14 +81,7 @@ func (s *feedbackService) Toggle(ctx context.Context, req ToggleFeedbackForm, cu existing.FeedbackType = "undislike" } - tender, company, err := s.getDetails(ctx, req.Tender, *companyID) - if err != nil { - s.logger.Error("Failed to get details", map[string]interface{}{ - "tender_id": req.Tender, - "company_id": *companyID, - "error": err.Error(), - }) - } + tender, company := s.getDetails(ctx, req.Tender, *companyID) return existing.ToResponse(tender, company), nil } @@ -117,14 +103,7 @@ func (s *feedbackService) Toggle(ctx context.Context, req ToggleFeedbackForm, cu return nil, err } - tender, company, err := s.getDetails(ctx, req.Tender, *companyID) - if err != nil { - s.logger.Error("Failed to get details", map[string]interface{}{ - "tender_id": req.Tender, - "company_id": *companyID, - "error": err.Error(), - }) - } + tender, company := s.getDetails(ctx, req.Tender, *companyID) return existing.ToResponse(tender, company), nil } @@ -139,14 +118,7 @@ func (s *feedbackService) Get(ctx context.Context, id string) (*FeedbackResponse return nil, err } - tender, company, err := s.getDetails(ctx, feedback.TenderID, *feedback.CompanyID) - if err != nil { - s.logger.Error("Failed to get details", map[string]interface{}{ - "tender_id": feedback.TenderID, - "company_id": *feedback.CompanyID, - "error": err.Error(), - }) - } + tender, company := s.getDetails(ctx, feedback.TenderID, feedbackCompanyID(*feedback)) return feedback.ToResponse(tender, company), nil } @@ -167,7 +139,7 @@ func (s *feedbackService) Search(ctx context.Context, criteria SearchForm, pagin result := make([]*FeedbackResponse, len(page.Items)) for i, feedback := range page.Items { - tender, company, _ := s.getDetails(ctx, feedback.TenderID, *feedback.CompanyID) + tender, company := s.getDetails(ctx, feedback.TenderID, feedbackCompanyID(feedback)) result[i] = feedback.ToResponse(tender, company) } @@ -191,86 +163,84 @@ func (s *feedbackService) GetByTenderID(ctx context.Context, tenderID, companyID return nil, err } - tender, err := s.tenderService.GetByID(ctx, feedback.TenderID, "") - if err != nil { - s.logger.Error("Failed to get tender", map[string]interface{}{ - "tender_id": feedback.TenderID, - "error": err.Error(), - }) - } + tender, company := s.getDetails(ctx, feedback.TenderID, feedbackCompanyID(*feedback)) - company, err := s.companyService.GetByID(ctx, *feedback.CompanyID) - if err != nil { - s.logger.Error("Failed to get company", map[string]interface{}{ - "company_id": feedback.CompanyID, - "error": err.Error(), - }) - } - - return feedback.ToResponse( - &tenderResponse{ - ID: tender.ID, - NoticePublicationID: tender.NoticePublicationID, - PublicationDate: tender.PublicationDate, - Title: tender.Title, - Description: tender.Description, - ProcurementTypeCode: tender.ProcurementTypeCode, - ProcedureCode: tender.ProcedureCode, - EstimatedValue: tender.EstimatedValue, - Currency: tender.Currency, - Duration: tender.Duration, - DurationUnit: tender.DurationUnit, - TenderDeadline: tender.TenderDeadline, - SubmissionDeadline: tender.SubmissionDeadline, - CountryCode: tender.CountryCode, - BuyerOrganization: &organizationResponse{Name: tender.BuyerOrganization.Name}, - Status: string(tender.Status), - }, - &companyResponse{ - ID: company.ID, - Name: company.Name, - }, - ), nil + return feedback.ToResponse(tender, company), nil } -func (s *feedbackService) getDetails(ctx context.Context, tenderID, companyID string) (*tenderResponse, *companyResponse, error) { +func feedbackCompanyID(f Feedback) string { + if f.CompanyID == nil { + return "" + } + return *f.CompanyID +} + +func tenderToFeedbackResponse(t *tender.TenderResponse) *tenderResponse { + if t == nil { + return nil + } + + var buyer *organizationResponse + if t.BuyerOrganization != nil { + buyer = &organizationResponse{Name: t.BuyerOrganization.Name} + } + + return &tenderResponse{ + ID: t.ID, + NoticePublicationID: t.NoticePublicationID, + PublicationDate: t.PublicationDate, + Title: t.Title, + Description: t.Description, + ProcurementTypeCode: t.ProcurementTypeCode, + ProcedureCode: t.ProcedureCode, + EstimatedValue: t.EstimatedValue, + Currency: t.Currency, + Duration: t.Duration, + DurationUnit: t.DurationUnit, + TenderDeadline: t.TenderDeadline, + SubmissionDeadline: t.SubmissionDeadline, + CountryCode: t.CountryCode, + BuyerOrganization: buyer, + Status: string(t.Status), + } +} + +func companyToFeedbackResponse(c *company.CompanyResponse) *companyResponse { + if c == nil { + return nil + } + return &companyResponse{ + ID: c.ID, + Name: c.Name, + } +} + +func (s *feedbackService) getDetails(ctx context.Context, tenderID, companyID string) (*tenderResponse, *companyResponse) { + var tenderResp *tenderResponse tender, err := s.tenderService.GetByID(ctx, tenderID, "") if err != nil { s.logger.Error("Failed to get tender", map[string]interface{}{ "tender_id": tenderID, "error": err.Error(), }) + } else { + tenderResp = tenderToFeedbackResponse(tender) } - company, err := s.companyService.GetByID(ctx, companyID) - if err != nil { - s.logger.Error("Failed to get company", map[string]interface{}{ - "company_id": companyID, - "error": err.Error(), - }) + var companyResp *companyResponse + if companyID != "" { + company, err := s.companyService.GetByID(ctx, companyID) + if err != nil { + s.logger.Error("Failed to get company", map[string]interface{}{ + "company_id": companyID, + "error": err.Error(), + }) + } else { + companyResp = companyToFeedbackResponse(company) + } } - return &tenderResponse{ - ID: tender.ID, - NoticePublicationID: tender.NoticePublicationID, - PublicationDate: tender.PublicationDate, - Title: tender.Title, - Description: tender.Description, - ProcurementTypeCode: tender.ProcurementTypeCode, - ProcedureCode: tender.ProcedureCode, - EstimatedValue: tender.EstimatedValue, - Currency: tender.Currency, - Duration: tender.Duration, - DurationUnit: tender.DurationUnit, - TenderDeadline: tender.TenderDeadline, - SubmissionDeadline: tender.SubmissionDeadline, - CountryCode: tender.CountryCode, - BuyerOrganization: &organizationResponse{Name: tender.BuyerOrganization.Name}, - Status: string(tender.Status), - }, &companyResponse{ - ID: company.ID, - Name: company.Name, - }, nil + return tenderResp, companyResp } func (s *feedbackService) CompanyStats(ctx context.Context, companyID string) (*StatsResponse, error) {