get liked tenders error

This commit is contained in:
Mazyar
2026-05-23 23:00:37 +03:30
parent a383f668b7
commit 3c86d35663
+71 -101
View File
@@ -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) {