MCPcopy Create free account
hub / github.com/cloudbase/garm / UpdateFileObject

Method UpdateFileObject

database/sql/file_store.go:154–229  ·  view source on GitHub ↗
(_ context.Context, objID uint, param params.UpdateFileObjectParams)

Source from the content-addressed store, hash-verified

152}
153
154func (s *sqlDatabase) UpdateFileObject(_ context.Context, objID uint, param params.UpdateFileObjectParams) (fileObjParam params.FileObject, err error) {
155 if err := param.Validate(); err != nil {
156 return params.FileObject{}, fmt.Errorf("failed to validate update params: %w", err)
157 }
158
159 var rowsAffected int64
160 defer func() {
161 if err == nil && rowsAffected > 0 {
162 s.sendNotify(common.FileObjectEntityType, common.UpdateOperation, fileObjParam)
163 }
164 }()
165
166 var fileObj FileObject
167 err = s.objectsConn.Transaction(func(tx *gorm.DB) error {
168 if err := tx.Where("id = ?", objID).Omit("content").First(&fileObj).Error; err != nil {
169 if errors.Is(err, gorm.ErrRecordNotFound) {
170 return runnerErrors.NewNotFoundError("could not find file object with ID: %d", objID)
171 }
172 return fmt.Errorf("error trying to find file object: %w", err)
173 }
174
175 updates := make(map[string]interface{})
176
177 // Update name if provided
178 if param.Name != nil {
179 updates["name"] = *param.Name
180 }
181
182 if param.Description != nil && *param.Description != fileObj.Description {
183 updates["description"] = *param.Description
184 }
185
186 // Update tags if provided
187 if param.Tags != nil {
188 // Delete existing tags
189 if err := tx.Where("file_object_id = ?", objID).Delete(&FileObjectTag{}).Error; err != nil {
190 return fmt.Errorf("failed to delete existing tags: %w", err)
191 }
192
193 // Create new tags
194 for _, tag := range param.Tags {
195 fileObjTag := FileObjectTag{
196 FileObjectID: fileObj.ID,
197 Tag: tag,
198 }
199 if err := tx.Create(&fileObjTag).Error; err != nil {
200 return fmt.Errorf("failed to add tag: %w", err)
201 }
202 }
203 }
204
205 // Save the updated file object
206 if len(updates) > 0 {
207 result := tx.Model(&fileObj).Omit("content").Updates(updates)
208 if result.Error != nil {
209 return fmt.Errorf("failed to update file object: %w", result.Error)
210 }
211 rowsAffected = result.RowsAffected

Callers

nothing calls this directly

Calls 4

sendNotifyMethod · 0.95
DeleteMethod · 0.65
ValidateMethod · 0.45

Tested by

no test coverage detected