Refactor Tender Management to Introduce Notice Entity and Repository

- Replaced the tender repository with a new notice repository, encapsulating notice-related data access methods.
- Introduced the Notice entity to represent tender/contract notices, including relevant fields and methods for managing notice data.
- Updated the TED scraper to utilize the new notice repository for creating and managing notices, enhancing the integration with the tender management system.
- Implemented Ollama SDK initialization in the web bootstrap process, allowing for improved AI interactions.
- Enhanced the tender service to include Ollama SDK for additional functionality, ensuring a more robust service layer.
This commit is contained in:
n.nakhostin
2025-10-04 15:22:49 +03:30
parent 154610e2a0
commit cc3d6163ed
15 changed files with 1088 additions and 85 deletions
+29
View File
@@ -47,6 +47,9 @@ type Repository[T any] interface {
// Create inserts a new document
Create(ctx context.Context, model *T) error
// CreateMany inserts multiple documents
CreateMany(ctx context.Context, models []T) error
// Update updates an existing document
Update(ctx context.Context, model *T) error
@@ -239,6 +242,32 @@ func (r *repository[T]) Create(ctx context.Context, model *T) error {
return nil
}
// CreateMany inserts multiple documents
func (r *repository[T]) CreateMany(ctx context.Context, models []T) error {
// Set timestamps if the model implements Timestampable
for _, v := range models {
if timestampable, ok := any(v).(Timestampable); ok {
now := time.Now().Unix()
timestampable.SetCreatedAt(now)
timestampable.SetUpdatedAt(now)
}
}
result, err := r.collection.InsertMany(ctx, models)
if err != nil {
r.logger.Error("Failed to create multiple documents", map[string]interface{}{
"error": err.Error(),
})
return fmt.Errorf("failed to create multiple documents: %w", err)
}
r.logger.Info("Documents created successfully", map[string]interface{}{
"ids": result.InsertedIDs,
})
return nil
}
// Update updates an existing document
func (r *repository[T]) Update(ctx context.Context, model *T) error {
// Set updated timestamp if the model implements Timestampable