Enhance company recommendation caching and pipeline integration
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
- Updated the company service to include a new method for scheduling the refresh of cached AI recommendations after the AI pipeline execution. - Introduced a new interface for managing cached recommendation refreshes, improving the separation of concerns within the service layer. - Enhanced the worker initialization to include Redis client support, allowing for better management of recommendation caching. - Added functionality to list company IDs with existing recommendation caches, ensuring efficient updates post-pipeline runs. - Implemented unit tests to validate the new recommendation refresh logic and ensure proper handling of various scenarios. This update significantly improves the handling of AI recommendations by integrating caching mechanisms with the AI pipeline, enhancing overall system performance and responsiveness.
This commit is contained in:
@@ -24,6 +24,7 @@ type Repository interface {
|
||||
GetByRegistrationNumber(ctx context.Context, registrationNumber string) (*Company, error)
|
||||
GetByTaxID(ctx context.Context, taxID string) (*Company, error)
|
||||
Search(ctx context.Context, form *SearchForm, pagination *response.Pagination) (*orm.PaginatedResult[Company], error)
|
||||
ListIDs(ctx context.Context) ([]string, error)
|
||||
Delete(ctx context.Context, id string) error
|
||||
UpdateStatus(ctx context.Context, id string, status CompanyStatus) error
|
||||
UpdateVerification(ctx context.Context, id string, isVerified, isCompliant bool, complianceNotes *string) error
|
||||
@@ -383,6 +384,49 @@ func (r *companyRepository) Search(ctx context.Context, form *SearchForm, pagina
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// ListIDs returns every company document ID.
|
||||
func (r *companyRepository) ListIDs(ctx context.Context) ([]string, error) {
|
||||
const pageSize = 500
|
||||
ids := make([]string, 0)
|
||||
skip := 0
|
||||
|
||||
for {
|
||||
result, err := r.ormRepo.FindAll(ctx, bson.M{}, orm.Pagination{
|
||||
Limit: pageSize,
|
||||
Skip: skip,
|
||||
SortField: "_id",
|
||||
SortOrder: 1,
|
||||
SkipCount: true,
|
||||
Projection: bson.M{"_id": 1},
|
||||
})
|
||||
if err != nil {
|
||||
r.logger.Error("Failed to list company IDs", map[string]interface{}{
|
||||
"error": err.Error(),
|
||||
"skip": skip,
|
||||
})
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(result.Items) == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
for i := range result.Items {
|
||||
id := strings.TrimSpace(result.Items[i].GetID())
|
||||
if id != "" {
|
||||
ids = append(ids, id)
|
||||
}
|
||||
}
|
||||
|
||||
if len(result.Items) < pageSize {
|
||||
break
|
||||
}
|
||||
skip += pageSize
|
||||
}
|
||||
|
||||
return ids, nil
|
||||
}
|
||||
|
||||
// UpdateStatus updates company status
|
||||
func (r *companyRepository) UpdateStatus(ctx context.Context, id string, status CompanyStatus) error {
|
||||
// Get company first
|
||||
|
||||
Reference in New Issue
Block a user