init push
This commit is contained in:
107
internal/repository/mysql/file_upload_intent_repo.go
Normal file
107
internal/repository/mysql/file_upload_intent_repo.go
Normal file
@@ -0,0 +1,107 @@
|
||||
package mysql
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
|
||||
filemanager "wucher/internal/domain/file_manager"
|
||||
)
|
||||
|
||||
func (r *FileManagerFileRepository) CreateUploadIntent(ctx context.Context, row *filemanager.FileUploadIntent) error {
|
||||
return r.db.WithContext(ctx).Create(row).Error
|
||||
}
|
||||
|
||||
func (r *FileManagerFileRepository) GetUploadIntentByID(ctx context.Context, id []byte) (*filemanager.FileUploadIntent, error) {
|
||||
var row filemanager.FileUploadIntent
|
||||
err := r.db.WithContext(ctx).Where("id = ?", id).First(&row).Error
|
||||
if err == nil {
|
||||
return &row, nil
|
||||
}
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func (r *FileManagerFileRepository) GetUploadIntentByIDForUpdate(ctx context.Context, id []byte) (*filemanager.FileUploadIntent, error) {
|
||||
var row filemanager.FileUploadIntent
|
||||
err := r.db.WithContext(ctx).
|
||||
Clauses(clause.Locking{Strength: "UPDATE"}).
|
||||
Where("id = ?", id).
|
||||
First(&row).Error
|
||||
if err == nil {
|
||||
return &row, nil
|
||||
}
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func (r *FileManagerFileRepository) MarkUploadIntentCompleted(ctx context.Context, params filemanager.FileUploadIntentCompleteParams) error {
|
||||
completedAt := params.CompletedAt
|
||||
if completedAt.IsZero() {
|
||||
completedAt = time.Now().UTC()
|
||||
}
|
||||
|
||||
res := r.db.WithContext(ctx).
|
||||
Model(&filemanager.FileUploadIntent{}).
|
||||
Where("id = ? AND status = ?", params.ID, filemanager.FileUploadIntentStatusPending).
|
||||
Updates(map[string]any{
|
||||
"status": filemanager.FileUploadIntentStatusCompleted,
|
||||
"completed_at": completedAt.UTC(),
|
||||
"updated_by": params.UpdatedBy,
|
||||
"updated_at": completedAt.UTC(),
|
||||
})
|
||||
if res.Error != nil {
|
||||
return res.Error
|
||||
}
|
||||
if res.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *FileManagerFileRepository) MarkUploadIntentExpired(ctx context.Context, params filemanager.FileUploadIntentExpireParams) error {
|
||||
expiredAt := params.ExpiredAt
|
||||
if expiredAt.IsZero() {
|
||||
expiredAt = time.Now().UTC()
|
||||
}
|
||||
|
||||
res := r.db.WithContext(ctx).
|
||||
Model(&filemanager.FileUploadIntent{}).
|
||||
Where("id = ? AND status = ?", params.ID, filemanager.FileUploadIntentStatusPending).
|
||||
Updates(map[string]any{
|
||||
"status": filemanager.FileUploadIntentStatusExpired,
|
||||
"updated_by": params.UpdatedBy,
|
||||
"updated_at": expiredAt.UTC(),
|
||||
})
|
||||
if res.Error != nil {
|
||||
return res.Error
|
||||
}
|
||||
if res.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *FileManagerFileRepository) UpdateUploadIntentSize(ctx context.Context, params filemanager.FileUploadIntentSizeUpdateParams) error {
|
||||
res := r.db.WithContext(ctx).
|
||||
Model(&filemanager.FileUploadIntent{}).
|
||||
Where("id = ? AND status = ?", params.ID, filemanager.FileUploadIntentStatusPending).
|
||||
Updates(map[string]any{
|
||||
"size_bytes": params.SizeBytes,
|
||||
"updated_by": params.UpdatedBy,
|
||||
"updated_at": time.Now().UTC(),
|
||||
})
|
||||
if res.Error != nil {
|
||||
return res.Error
|
||||
}
|
||||
if res.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user