refactor: change SaveUpload to use gorm create or selective Updates
This commit is contained in:
parent
8f78f6fe87
commit
9e35c614e3
|
@ -77,22 +77,52 @@ func (m *MetadataServiceDefault) SaveUpload(ctx context.Context, metadata Upload
|
||||||
ret := m.db.WithContext(ctx).Model(&models.Upload{}).Where(&upload).First(&upload)
|
ret := m.db.WithContext(ctx).Model(&models.Upload{}).Where(&upload).First(&upload)
|
||||||
|
|
||||||
if ret.Error != nil {
|
if ret.Error != nil {
|
||||||
if !errors.Is(ret.Error, gorm.ErrRecordNotFound) {
|
if errors.Is(ret.Error, gorm.ErrRecordNotFound) && ret.RowsAffected > 0 {
|
||||||
|
return m.createUpload(ctx, metadata)
|
||||||
|
}
|
||||||
return ret.Error
|
return ret.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
changed := false
|
||||||
|
|
||||||
|
if upload.UserID != metadata.UserID {
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if upload.MimeType != metadata.MimeType {
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if upload.Protocol != metadata.Protocol {
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if upload.UploaderIP != metadata.UploaderIP {
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if upload.Size != metadata.Size {
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if changed {
|
||||||
|
return m.db.Updates(&upload).Error
|
||||||
}
|
}
|
||||||
|
|
||||||
if ret.RowsAffected > 0 {
|
|
||||||
return nil
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MetadataServiceDefault) createUpload(ctx context.Context, metadata UploadMetadata) error {
|
||||||
|
upload := models.Upload{
|
||||||
|
UserID: metadata.UserID,
|
||||||
|
Hash: metadata.Hash,
|
||||||
|
MimeType: metadata.MimeType,
|
||||||
|
Protocol: metadata.Protocol,
|
||||||
|
UploaderIP: metadata.UploaderIP,
|
||||||
|
Size: metadata.Size,
|
||||||
}
|
}
|
||||||
|
|
||||||
upload.UserID = metadata.UserID
|
return m.db.WithContext(ctx).Create(&upload).Error
|
||||||
upload.MimeType = metadata.MimeType
|
|
||||||
upload.Protocol = metadata.Protocol
|
|
||||||
upload.UploaderIP = metadata.UploaderIP
|
|
||||||
upload.Size = metadata.Size
|
|
||||||
|
|
||||||
return m.db.Save(&metadata).Error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MetadataServiceDefault) GetUpload(ctx context.Context, objectHash []byte) (UploadMetadata, error) {
|
func (m *MetadataServiceDefault) GetUpload(ctx context.Context, objectHash []byte) (UploadMetadata, error) {
|
||||||
|
|
Loading…
Reference in New Issue