add media service

This commit is contained in:
Дмитрий
2026-05-08 17:36:48 +03:00
parent 1a7251976d
commit 72c57f0de3
16 changed files with 757 additions and 291 deletions

View File

@@ -0,0 +1,32 @@
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
}