123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package dbstore
- import (
- "context"
- "fmt"
- "git.linuxforward.com/byop/byop-engine/models"
- "gorm.io/gorm"
- )
- // CreateApp creates a new app using GORM
- func (s *SQLiteStore) CreateApp(ctx context.Context, app *models.App) error {
- result := s.db.WithContext(ctx).Create(app)
- if result.Error != nil {
- return fmt.Errorf("failed to create app: %w", result.Error)
- }
- return nil
- }
- // GetAllApps retrieves all apps using GORM
- func (s *SQLiteStore) GetAllApps(ctx context.Context) ([]*models.App, error) {
- var apps []*models.App
- result := s.db.WithContext(ctx).Find(&apps)
- if result.Error != nil {
- return nil, fmt.Errorf("failed to get all apps: %w", result.Error)
- }
- return apps, nil
- }
- // GetAppByID retrieves an app by ID using GORM
- func (s *SQLiteStore) GetAppByID(ctx context.Context, id uint) (*models.App, error) {
- var app models.App
- result := s.db.WithContext(ctx).First(&app, id)
- if result.Error != nil {
- if result.Error == gorm.ErrRecordNotFound {
- return nil, models.NewErrNotFound(fmt.Sprintf("app with ID %d not found", id), result.Error)
- }
- return nil, fmt.Errorf("failed to get app by ID: %w", result.Error)
- }
- return &app, nil
- }
- // GetAppsByUserID retrieves all apps for a specific user using GORM
- func (s *SQLiteStore) GetAppsByUserID(ctx context.Context, userID uint) ([]*models.App, error) {
- var apps []*models.App
- result := s.db.WithContext(ctx).Where("user_id = ?", userID).Find(&apps)
- if result.Error != nil {
- return nil, fmt.Errorf("failed to get apps by user ID: %w", result.Error)
- }
- return apps, nil
- }
- // UpdateApp updates an existing app using GORM
- func (s *SQLiteStore) UpdateApp(ctx context.Context, app *models.App) error {
- result := s.db.WithContext(ctx).Save(app)
- if result.Error != nil {
- return fmt.Errorf("failed to update app: %w", result.Error)
- }
- if result.RowsAffected == 0 {
- return models.NewErrNotFound(fmt.Sprintf("app with ID %d not found for update", app.ID), nil)
- }
- return nil
- }
- // DeleteApp deletes an app by ID using GORM
- func (s *SQLiteStore) DeleteApp(ctx context.Context, id uint) error {
- result := s.db.WithContext(ctx).Delete(&models.App{}, id)
- if result.Error != nil {
- return fmt.Errorf("failed to delete app: %w", result.Error)
- }
- if result.RowsAffected == 0 {
- return models.NewErrNotFound(fmt.Sprintf("app with ID %d not found for deletion", id), nil)
- }
- return nil
- }
- // UpdateAppStatus updates the status and error message of an app using GORM
- func (s *SQLiteStore) UpdateAppStatus(ctx context.Context, appID uint, status string, message string) error {
- result := s.db.WithContext(ctx).Model(&models.App{}).Where("id = ?", appID).Updates(map[string]interface{}{
- "status": status,
- "error_msg": message,
- })
- if result.Error != nil {
- return fmt.Errorf("failed to update app status: %w", result.Error)
- }
- if result.RowsAffected == 0 {
- return models.NewErrNotFound(fmt.Sprintf("app with ID %d not found for status update", appID), nil)
- }
- return nil
- }
- // UpdateAppPreview updates the preview information of an app using GORM
- func (s *SQLiteStore) UpdateAppPreview(ctx context.Context, appID uint, previewID uint, previewURL string) error {
- result := s.db.WithContext(ctx).Model(&models.App{}).Where("id = ?", appID).Updates(map[string]interface{}{
- "preview_id": previewID,
- "preview_url": previewURL,
- })
- if result.Error != nil {
- return fmt.Errorf("failed to update app preview: %w", result.Error)
- }
- if result.RowsAffected == 0 {
- return models.NewErrNotFound(fmt.Sprintf("app with ID %d not found for preview update", appID), nil)
- }
- return nil
- }
- // UpdateAppCurrentImage updates the current image information of an app using GORM
- func (s *SQLiteStore) UpdateAppCurrentImage(ctx context.Context, appID uint, imageTag string, imageURI string) error {
- result := s.db.WithContext(ctx).Model(&models.App{}).Where("id = ?", appID).Updates(map[string]interface{}{
- "current_image_tag": imageTag,
- "current_image_uri": imageURI,
- })
- if result.Error != nil {
- return fmt.Errorf("failed to update app current image: %w", result.Error)
- }
- if result.RowsAffected == 0 {
- return models.NewErrNotFound(fmt.Sprintf("app with ID %d not found for image update", appID), nil)
- }
- return nil
- }
|