Files
media-service/internal/application/usecases/presign.go
Дмитрий 72c57f0de3 add media service
2026-05-08 17:36:48 +03:00

32 lines
791 B
Go

package usecases
import (
"context"
"time"
"lendry-erp/media/internal/application/dto"
"lendry-erp/media/internal/infrastructure/storage"
)
type PresignUseCase struct {
storage storage.Storage
}
func NewPresignUseCase(s storage.Storage) *PresignUseCase {
return &PresignUseCase{storage: s}
}
func (u *PresignUseCase) Execute(ctx context.Context, input dto.GetUrlRequest) (*dto.GetUrlResponse, error) {
// Приватные файлы (из чатов) сгорают быстро, публичные (аватарки) живут 24 часа
expiry := time.Minute * 2
if input.IsPublic {
expiry = time.Hour * 24
}
url, err := u.storage.GetPresignedURL(ctx, input.FileName, expiry, "GET")
if err != nil {
return nil, err
}
return &dto.GetUrlResponse{URL: url}, nil
}