components.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package dbstore
  2. import (
  3. "context"
  4. "fmt"
  5. "git.linuxforward.com/byop/byop-engine/models"
  6. "gorm.io/gorm"
  7. )
  8. // CreateComponent creates a new component using GORM
  9. func (s *SQLiteStore) CreateComponent(ctx context.Context, component *models.Component) error {
  10. result := s.db.WithContext(ctx).Create(component)
  11. if result.Error != nil {
  12. return fmt.Errorf("failed to create component: %w", result.Error)
  13. }
  14. return nil
  15. }
  16. // GetComponentsByUserID retrieves all components for a specific user using GORM
  17. func (s *SQLiteStore) GetComponentsByUserID(ctx context.Context, userID uint) ([]*models.Component, error) {
  18. var components []*models.Component
  19. result := s.db.WithContext(ctx).Where("user_id = ?", userID).Find(&components)
  20. if result.Error != nil {
  21. return nil, fmt.Errorf("failed to get components by user ID: %w", result.Error)
  22. }
  23. return components, nil
  24. }
  25. // GetAllComponents retrieves all components using GORM
  26. func (s *SQLiteStore) GetAllComponents(ctx context.Context) ([]*models.Component, error) {
  27. var components []*models.Component
  28. result := s.db.WithContext(ctx).Find(&components)
  29. if result.Error != nil {
  30. return nil, fmt.Errorf("failed to get all components: %w", result.Error)
  31. }
  32. return components, nil
  33. }
  34. // GetComponentByID retrieves a component by ID using GORM
  35. func (s *SQLiteStore) GetComponentByID(ctx context.Context, id uint) (*models.Component, error) {
  36. var component models.Component
  37. result := s.db.WithContext(ctx).First(&component, id)
  38. if result.Error != nil {
  39. if result.Error == gorm.ErrRecordNotFound {
  40. return nil, models.NewErrNotFound(fmt.Sprintf("component with ID %d not found", id), result.Error)
  41. }
  42. return nil, fmt.Errorf("failed to get component by ID: %w", result.Error)
  43. }
  44. return &component, nil
  45. }
  46. // UpdateComponent updates an existing component using GORM
  47. func (s *SQLiteStore) UpdateComponent(ctx context.Context, component *models.Component) error {
  48. result := s.db.WithContext(ctx).Save(component)
  49. if result.Error != nil {
  50. return fmt.Errorf("failed to update component: %w", result.Error)
  51. }
  52. if result.RowsAffected == 0 {
  53. return models.NewErrNotFound(fmt.Sprintf("component with ID %d not found for update", component.ID), nil)
  54. }
  55. return nil
  56. }
  57. // UpdateComponentStatus updates the status and error message of a component using GORM
  58. func (s *SQLiteStore) UpdateComponentStatus(ctx context.Context, componentID uint, status string, errorMsg string) error {
  59. result := s.db.WithContext(ctx).Model(&models.Component{}).Where("id = ?", componentID).Updates(map[string]interface{}{
  60. "status": status,
  61. "error_msg": errorMsg,
  62. })
  63. if result.Error != nil {
  64. return fmt.Errorf("failed to update component status: %w", result.Error)
  65. }
  66. if result.RowsAffected == 0 {
  67. return models.NewErrNotFound(fmt.Sprintf("component with ID %d not found for status update", componentID), nil)
  68. }
  69. return nil
  70. }
  71. // UpdateComponentImageInfo updates the image information of a component using GORM
  72. func (s *SQLiteStore) UpdateComponentImageInfo(ctx context.Context, componentID uint, imageTag string, imageURI string) error {
  73. result := s.db.WithContext(ctx).Model(&models.Component{}).Where("id = ?", componentID).Updates(map[string]interface{}{
  74. "current_image_tag": imageTag,
  75. "current_image_uri": imageURI,
  76. })
  77. if result.Error != nil {
  78. return fmt.Errorf("failed to update component image info: %w", result.Error)
  79. }
  80. if result.RowsAffected == 0 {
  81. return models.NewErrNotFound(fmt.Sprintf("component with ID %d not found for image info update", componentID), nil)
  82. }
  83. return nil
  84. }
  85. // DeleteComponent deletes a component by ID using GORM
  86. func (s *SQLiteStore) DeleteComponent(ctx context.Context, id uint) error {
  87. result := s.db.WithContext(ctx).Delete(&models.Component{}, id)
  88. if result.Error != nil {
  89. return fmt.Errorf("failed to delete component: %w", result.Error)
  90. }
  91. if result.RowsAffected == 0 {
  92. return models.NewErrNotFound(fmt.Sprintf("component with ID %d not found for deletion", id), nil)
  93. }
  94. return nil
  95. }