123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package dbstore
- import (
- "context"
- "fmt"
- "git.linuxforward.com/byop/byop-engine/models"
- "gorm.io/gorm"
- )
- // CreateComponent creates a new component using GORM
- func (s *SQLiteStore) CreateComponent(ctx context.Context, component *models.Component) error {
- result := s.db.WithContext(ctx).Create(component)
- if result.Error != nil {
- return fmt.Errorf("failed to create component: %w", result.Error)
- }
- return nil
- }
- // GetComponentsByUserID retrieves all components for a specific user using GORM
- func (s *SQLiteStore) GetComponentsByUserID(ctx context.Context, userID uint) ([]*models.Component, error) {
- var components []*models.Component
- result := s.db.WithContext(ctx).Where("user_id = ?", userID).Find(&components)
- if result.Error != nil {
- return nil, fmt.Errorf("failed to get components by user ID: %w", result.Error)
- }
- return components, nil
- }
- // GetAllComponents retrieves all components using GORM
- func (s *SQLiteStore) GetAllComponents(ctx context.Context) ([]*models.Component, error) {
- var components []*models.Component
- result := s.db.WithContext(ctx).Find(&components)
- if result.Error != nil {
- return nil, fmt.Errorf("failed to get all components: %w", result.Error)
- }
- return components, nil
- }
- // GetComponentByID retrieves a component by ID using GORM
- func (s *SQLiteStore) GetComponentByID(ctx context.Context, id uint) (*models.Component, error) {
- var component models.Component
- result := s.db.WithContext(ctx).First(&component, id)
- if result.Error != nil {
- if result.Error == gorm.ErrRecordNotFound {
- return nil, models.NewErrNotFound(fmt.Sprintf("component with ID %d not found", id), result.Error)
- }
- return nil, fmt.Errorf("failed to get component by ID: %w", result.Error)
- }
- return &component, nil
- }
- // UpdateComponent updates an existing component using GORM
- func (s *SQLiteStore) UpdateComponent(ctx context.Context, component *models.Component) error {
- result := s.db.WithContext(ctx).Save(component)
- if result.Error != nil {
- return fmt.Errorf("failed to update component: %w", result.Error)
- }
- if result.RowsAffected == 0 {
- return models.NewErrNotFound(fmt.Sprintf("component with ID %d not found for update", component.ID), nil)
- }
- return nil
- }
- // UpdateComponentStatus updates the status and error message of a component using GORM
- func (s *SQLiteStore) UpdateComponentStatus(ctx context.Context, componentID uint, status string, errorMsg string) error {
- result := s.db.WithContext(ctx).Model(&models.Component{}).Where("id = ?", componentID).Updates(map[string]interface{}{
- "status": status,
- "error_msg": errorMsg,
- })
- if result.Error != nil {
- return fmt.Errorf("failed to update component status: %w", result.Error)
- }
- if result.RowsAffected == 0 {
- return models.NewErrNotFound(fmt.Sprintf("component with ID %d not found for status update", componentID), nil)
- }
- return nil
- }
- // UpdateComponentImageInfo updates the image information of a component using GORM
- func (s *SQLiteStore) UpdateComponentImageInfo(ctx context.Context, componentID uint, imageTag string, imageURI string) error {
- result := s.db.WithContext(ctx).Model(&models.Component{}).Where("id = ?", componentID).Updates(map[string]interface{}{
- "current_image_tag": imageTag,
- "current_image_uri": imageURI,
- })
- if result.Error != nil {
- return fmt.Errorf("failed to update component image info: %w", result.Error)
- }
- if result.RowsAffected == 0 {
- return models.NewErrNotFound(fmt.Sprintf("component with ID %d not found for image info update", componentID), nil)
- }
- return nil
- }
- // DeleteComponent deletes a component by ID using GORM
- func (s *SQLiteStore) DeleteComponent(ctx context.Context, id uint) error {
- result := s.db.WithContext(ctx).Delete(&models.Component{}, id)
- if result.Error != nil {
- return fmt.Errorf("failed to delete component: %w", result.Error)
- }
- if result.RowsAffected == 0 {
- return models.NewErrNotFound(fmt.Sprintf("component with ID %d not found for deletion", id), nil)
- }
- return nil
- }
|