package file import ( "context" "donat-widget/internal/model" "donat-widget/internal/model/sql" "fmt" "github.com/google/uuid" "github.com/jackc/pgx/v5" "mime/multipart" ) func New( db model.Db, storage model.Storage, ) *RepoFile { return &RepoFile{ db: db, storage: storage, } } type RepoFile struct { db model.Db storage model.Storage } func (fileRepo *RepoFile) AddNew( ctx context.Context, streamerID int, file multipart.FileHeader, fileName, extension, fileType string, ) (string, error) { args := pgx.NamedArgs{ "streamer_id": streamerID, "file_name": fileName, "file_type": fileType, "extension": extension, } fileIDRaw, err := fileRepo.db.Insert(ctx, sql.AddNewFile, args) if err != nil { return "", err } fileIDBytes, ok := fileIDRaw.([16]uint8) if !ok { return "", fmt.Errorf("unexpected fileID type: %T", fileIDRaw) } fileID := uuid.UUID(fileIDBytes).String() err = fileRepo.storage.Upload(&file, streamerID) if err != nil { return "", err } return fileID, nil }