Changes on routes
This commit is contained in:
@@ -8,6 +8,8 @@ namespace Musify.Application.Contracts.Infrastructure
|
|||||||
|
|
||||||
Task<string> GetUrlAsync(string bucketName, string keyName, TimeSpan ExpirationTime, CancellationToken cancellationToken);
|
Task<string> GetUrlAsync(string bucketName, string keyName, TimeSpan ExpirationTime, CancellationToken cancellationToken);
|
||||||
|
|
||||||
|
Task<Result<string>> UploadFileAsync(string filePath, string bucketName, string keyName, CancellationToken cancellationToken);
|
||||||
|
|
||||||
Task<Result<string>> UploadFileAsync(Stream sourceStream, string contentType, string bucketName, string keyName, CancellationToken cancellationToken);
|
Task<Result<string>> UploadFileAsync(Stream sourceStream, string contentType, string bucketName, string keyName, CancellationToken cancellationToken);
|
||||||
|
|
||||||
Task<Result> TransferFilesAsync(string sourceDirectory, string bucketName, string route, CancellationToken cancellationToken);
|
Task<Result> TransferFilesAsync(string sourceDirectory, string bucketName, string route, CancellationToken cancellationToken);
|
||||||
|
|||||||
@@ -4,13 +4,13 @@
|
|||||||
Guid TrackId,
|
Guid TrackId,
|
||||||
string SourceBucketName,
|
string SourceBucketName,
|
||||||
string SourceKeyName,
|
string SourceKeyName,
|
||||||
string SmallPictureKeyName,
|
string SmallPictureRoute,
|
||||||
int SmallPictureWidth,
|
int SmallPictureWidth,
|
||||||
int SmallPictureHeight,
|
int SmallPictureHeight,
|
||||||
string MediumPictureKeyName,
|
string MediumPictureRoute,
|
||||||
int MediumPictureWidth,
|
int MediumPictureWidth,
|
||||||
int MediumPictureHeight,
|
int MediumPictureHeight,
|
||||||
string LargePictureKeyName,
|
string LargePictureRoute,
|
||||||
int LargePictureWidth,
|
int LargePictureWidth,
|
||||||
int LargePictureHeight);
|
int LargePictureHeight);
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@ using Musify.Domain.Entities;
|
|||||||
|
|
||||||
namespace Musify.Application.Tracks.Handler
|
namespace Musify.Application.Tracks.Handler
|
||||||
{
|
{
|
||||||
public class CreateTrackCommandHandler(IDatabase database, IPictureHandler pictureHandler, IEventBus eventBus, IStorageHandler storageHandler,
|
public class CreateTrackCommandHandler(IDatabase database, IEventBus eventBus, IStorageHandler storageHandler,
|
||||||
ILogger<CreateTrackCommandHandler> logger, ApplicationStorageConfiguration storageConfiguration, TrackConfiguration trackConfiguration)
|
ILogger<CreateTrackCommandHandler> logger, ApplicationStorageConfiguration storageConfiguration, TrackConfiguration trackConfiguration)
|
||||||
: IRequestHandler<CreateTrackCommand, Task<Result<TrackResponse> >>
|
: IRequestHandler<CreateTrackCommand, Task<Result<TrackResponse> >>
|
||||||
{
|
{
|
||||||
@@ -38,7 +38,7 @@ namespace Musify.Application.Tracks.Handler
|
|||||||
LargePictureKeyName = trackConfiguration.Routes.PresetLargePicture,
|
LargePictureKeyName = trackConfiguration.Routes.PresetLargePicture,
|
||||||
};
|
};
|
||||||
|
|
||||||
var originalPictureKeyName = Path.Combine(trackConfiguration.Routes.PresetMediumPicture,
|
var originalPictureKeyName = Path.Combine(trackConfiguration.Routes.OriginalPicturesPath,
|
||||||
originalPictureFileName);
|
originalPictureFileName);
|
||||||
var pictureUploadResult = await UploadFile(request.Picture, originalPictureKeyName, cancellationToken);
|
var pictureUploadResult = await UploadFile(request.Picture, originalPictureKeyName, cancellationToken);
|
||||||
if (!pictureUploadResult.IsSuccess)
|
if (!pictureUploadResult.IsSuccess)
|
||||||
@@ -48,7 +48,7 @@ namespace Musify.Application.Tracks.Handler
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var audioKeyName = Path.Combine(trackConfiguration.Routes.OriginalAudiosFolder,
|
var audioKeyName = Path.Combine(trackConfiguration.Routes.OriginalAudiosPath,
|
||||||
Guid.NewGuid() + request.Audio.FileType);
|
Guid.NewGuid() + request.Audio.FileType);
|
||||||
var audioUploadResult = await UploadFile(request.Audio, audioKeyName, cancellationToken);
|
var audioUploadResult = await UploadFile(request.Audio, audioKeyName, cancellationToken);
|
||||||
if (!audioUploadResult.IsSuccess)
|
if (!audioUploadResult.IsSuccess)
|
||||||
@@ -97,31 +97,24 @@ namespace Musify.Application.Tracks.Handler
|
|||||||
|
|
||||||
async Task PublishUpdateEvent(string originalPictureKeyName, Track track, CancellationToken cancellationToken)
|
async Task PublishUpdateEvent(string originalPictureKeyName, Track track, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var smallPictureKeyName = Path.Combine(trackConfiguration.Routes.MediumPicturesPath,
|
|
||||||
track.Id + pictureHandler.FileExtension);
|
|
||||||
var mediumPictureKeyName = Path.Combine(trackConfiguration.Routes.MediumPicturesPath,
|
|
||||||
track.Id + pictureHandler.FileExtension);
|
|
||||||
var largePictureKeyName = Path.Combine(trackConfiguration.Routes.LargePicturesPath,
|
|
||||||
track.Id + pictureHandler.FileExtension);
|
|
||||||
|
|
||||||
await eventBus.PublishAsync(new UpdateTrackPictureEvent(
|
await eventBus.PublishAsync(new UpdateTrackPictureEvent(
|
||||||
track.Id,
|
track.Id,
|
||||||
storageConfiguration.BucketName,
|
storageConfiguration.BucketName,
|
||||||
originalPictureKeyName,
|
originalPictureKeyName,
|
||||||
smallPictureKeyName,
|
trackConfiguration.Routes.SmallPicturesPath,
|
||||||
trackConfiguration.PicturesSizes.SmallPictureWidth,
|
trackConfiguration.PicturesSizes.SmallPictureWidth,
|
||||||
trackConfiguration.PicturesSizes.SmallPictureHeight,
|
trackConfiguration.PicturesSizes.SmallPictureHeight,
|
||||||
mediumPictureKeyName,
|
trackConfiguration.Routes.MediumPicturesPath,
|
||||||
trackConfiguration.PicturesSizes.MediumPictureWidth,
|
trackConfiguration.PicturesSizes.MediumPictureWidth,
|
||||||
trackConfiguration.PicturesSizes.MediumPictureHeight,
|
trackConfiguration.PicturesSizes.MediumPictureHeight,
|
||||||
largePictureKeyName,
|
trackConfiguration.Routes.LargePicturesPath,
|
||||||
trackConfiguration.PicturesSizes.LargePictureWidth,
|
trackConfiguration.PicturesSizes.LargePictureWidth,
|
||||||
trackConfiguration.PicturesSizes.LargePictureHeight), cancellationToken);
|
trackConfiguration.PicturesSizes.LargePictureHeight), cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task PublishTranscodeEvent(Guid trackId, string audioKeyName, CancellationToken cancellationToken)
|
async Task PublishTranscodeEvent(Guid trackId, string audioKeyName, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var destinationFolderAudio = Path.Combine(trackConfiguration.Routes.ProcessedAudioFolder,
|
var destinationFolderAudio = Path.Combine(trackConfiguration.Routes.ProcessedAudiosPath,
|
||||||
Guid.NewGuid().ToString());
|
Guid.NewGuid().ToString());
|
||||||
|
|
||||||
await eventBus.PublishAsync(new UpdateTrackAudioEvent(
|
await eventBus.PublishAsync(new UpdateTrackAudioEvent(
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.5" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.5" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.1" />
|
||||||
|
<PackageReference Include="MimeMapping" Version="4.0.0" />
|
||||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" />
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" />
|
||||||
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.0" />
|
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.0" />
|
||||||
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.15.0" />
|
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.15.0" />
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using MassTransit;
|
using MassTransit;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using MimeMapping;
|
||||||
using Musify.Application.Contracts.Infrastructure;
|
using Musify.Application.Contracts.Infrastructure;
|
||||||
using Musify.Domain.Entities;
|
using Musify.Domain.Entities;
|
||||||
using Musify.Infrastructure.MassTransit.Arguments;
|
using Musify.Infrastructure.MassTransit.Arguments;
|
||||||
@@ -33,16 +34,14 @@ namespace Musify.Infrastructure.MassTransit.Activities.Files
|
|||||||
var sourceFilePath = executeContext.GetVariable<string>(executeContext.Arguments.FilePathVariableName);
|
var sourceFilePath = executeContext.GetVariable<string>(executeContext.Arguments.FilePathVariableName);
|
||||||
if (string.IsNullOrEmpty(sourceFilePath))
|
if (string.IsNullOrEmpty(sourceFilePath))
|
||||||
throw new InvalidOperationException($"Upload activity requires variable '{executeContext.Arguments.FilePathVariableName}' with source file path.");
|
throw new InvalidOperationException($"Upload activity requires variable '{executeContext.Arguments.FilePathVariableName}' with source file path.");
|
||||||
|
var fileName = Path.GetFileName(sourceFilePath);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using var fileStream = File.OpenRead(sourceFilePath);
|
|
||||||
|
|
||||||
var uploadResult = await storageHandler.UploadFileAsync(
|
var uploadResult = await storageHandler.UploadFileAsync(
|
||||||
fileStream,
|
sourceFilePath,
|
||||||
executeContext.Arguments.ContentType,
|
|
||||||
executeContext.Arguments.DestinationBucketName,
|
executeContext.Arguments.DestinationBucketName,
|
||||||
executeContext.Arguments.DestinationKeyName,
|
Path.Combine(executeContext.Arguments.DestinationRoute, fileName),
|
||||||
executeContext.CancellationToken);
|
executeContext.CancellationToken);
|
||||||
|
|
||||||
if (!uploadResult.IsSuccess)
|
if (!uploadResult.IsSuccess)
|
||||||
@@ -50,15 +49,15 @@ namespace Musify.Infrastructure.MassTransit.Activities.Files
|
|||||||
var errors = string.Join("; ", uploadResult.Errors);
|
var errors = string.Join("; ", uploadResult.Errors);
|
||||||
logger.LogWarning("Failed to upload file to bucket. Bucket: {BucketName}, Key: {KeyName}, Errors: {Errors}",
|
logger.LogWarning("Failed to upload file to bucket. Bucket: {BucketName}, Key: {KeyName}, Errors: {Errors}",
|
||||||
executeContext.Arguments.DestinationBucketName,
|
executeContext.Arguments.DestinationBucketName,
|
||||||
executeContext.Arguments.DestinationKeyName,
|
executeContext.Arguments.DestinationRoute,
|
||||||
errors);
|
errors);
|
||||||
throw new Exception(errors);
|
throw new Exception(errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
await processTrackingStore.CompleteStepAsync(processId, stepId, executeContext.CancellationToken);
|
await processTrackingStore.CompleteStepAsync(processId, stepId, executeContext.CancellationToken);
|
||||||
return executeContext.Completed(new UploadFileToBucketLog(
|
return executeContext.CompletedWithVariables(new UploadFileToBucketLog(
|
||||||
executeContext.Arguments.DestinationBucketName,
|
executeContext.Arguments.DestinationBucketName,
|
||||||
executeContext.Arguments.DestinationKeyName));
|
executeContext.Arguments.DestinationRoute));
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Musify.Application.Contracts.Infrastructure;
|
|||||||
using Musify.Domain.Entities;
|
using Musify.Domain.Entities;
|
||||||
using Musify.Infrastructure.MassTransit.Activities.Arguments;
|
using Musify.Infrastructure.MassTransit.Activities.Arguments;
|
||||||
using Musify.Infrastructure.MassTransit.Activities.Logs;
|
using Musify.Infrastructure.MassTransit.Activities.Logs;
|
||||||
|
using Musify.Infrastructure.MassTransit.RoutingSlip.Builders;
|
||||||
|
|
||||||
namespace Musify.Infrastructure.MassTransit.Activities
|
namespace Musify.Infrastructure.MassTransit.Activities
|
||||||
{
|
{
|
||||||
@@ -66,9 +67,7 @@ namespace Musify.Infrastructure.MassTransit.Activities
|
|||||||
|
|
||||||
var destinationDirectory = Path.GetDirectoryName(destinationFilePath);
|
var destinationDirectory = Path.GetDirectoryName(destinationFilePath);
|
||||||
if (!string.IsNullOrEmpty(destinationDirectory))
|
if (!string.IsNullOrEmpty(destinationDirectory))
|
||||||
{
|
|
||||||
Directory.CreateDirectory(destinationDirectory);
|
Directory.CreateDirectory(destinationDirectory);
|
||||||
}
|
|
||||||
|
|
||||||
await using var destinationStream = File.Create(destinationFilePath);
|
await using var destinationStream = File.Create(destinationFilePath);
|
||||||
await resizedPicture.Value.CopyToAsync(destinationStream, executeContext.CancellationToken);
|
await resizedPicture.Value.CopyToAsync(destinationStream, executeContext.CancellationToken);
|
||||||
@@ -80,7 +79,7 @@ namespace Musify.Infrastructure.MassTransit.Activities
|
|||||||
executeContext.Arguments.Height);
|
executeContext.Arguments.Height);
|
||||||
|
|
||||||
await processTrackingStore.CompleteStepAsync(processId, stepId, executeContext.CancellationToken);
|
await processTrackingStore.CompleteStepAsync(processId, stepId, executeContext.CancellationToken);
|
||||||
return executeContext.Completed();
|
return executeContext.Completed(new ResizePictureLog(destinationFilePath));
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,8 +2,5 @@ namespace Musify.Infrastructure.MassTransit.Activities.Arguments
|
|||||||
{
|
{
|
||||||
public record GeneratePictureWorkflowPathsArguments(
|
public record GeneratePictureWorkflowPathsArguments(
|
||||||
string TemporaryRootDirectory,
|
string TemporaryRootDirectory,
|
||||||
string SourceKeyName,
|
string SourceKeyName);
|
||||||
string SmallPictureKeyName,
|
|
||||||
string MediumPictureKeyName,
|
|
||||||
string LargePictureKeyName);
|
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
{
|
{
|
||||||
public record UploadFileToBucketArguments(
|
public record UploadFileToBucketArguments(
|
||||||
string FilePathVariableName,
|
string FilePathVariableName,
|
||||||
string ContentType,
|
|
||||||
string DestinationBucketName,
|
string DestinationBucketName,
|
||||||
string DestinationKeyName);
|
string DestinationRoute);
|
||||||
}
|
}
|
||||||
@@ -182,14 +182,14 @@ namespace Musify.Infrastructure.MassTransit
|
|||||||
where TLog : class
|
where TLog : class
|
||||||
{
|
{
|
||||||
busFactoryConfigurator.ReceiveEndpoint($"{endpointName}_execute", endpointConfigurator =>
|
busFactoryConfigurator.ReceiveEndpoint($"{endpointName}_execute", endpointConfigurator =>
|
||||||
{
|
endpointConfigurator.ExecuteActivityHost<TActivity, TArguments>(
|
||||||
endpointConfigurator.ExecuteActivityHost<TActivity, TArguments>(busRegistrationContext);
|
MessagingHelper.BuildCompensateActivityUri(endpointName),
|
||||||
} );
|
busRegistrationContext)
|
||||||
|
);
|
||||||
|
|
||||||
busFactoryConfigurator.ReceiveEndpoint($"{endpointName}_compensate", endpointConfigurator =>
|
busFactoryConfigurator.ReceiveEndpoint($"{endpointName}_compensate", endpointConfigurator =>
|
||||||
{
|
endpointConfigurator.CompensateActivityHost<TActivity, TLog>(busRegistrationContext)
|
||||||
endpointConfigurator.CompensateActivityHost<TActivity, TLog>(busRegistrationContext);
|
);
|
||||||
} );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,8 +9,10 @@ namespace Musify.Infrastructure.MassTransit.RoutingSlip
|
|||||||
internal const string ResizeSmall = "ResizeSmall";
|
internal const string ResizeSmall = "ResizeSmall";
|
||||||
internal const string ResizeMedium = "ResizeMedium";
|
internal const string ResizeMedium = "ResizeMedium";
|
||||||
internal const string ResizeLarge = "ResizeLarge";
|
internal const string ResizeLarge = "ResizeLarge";
|
||||||
|
internal const string UploadSmall = "UploadSmall";
|
||||||
|
internal const string UploadMedium = "UploadMedium";
|
||||||
|
internal const string UploadLarge = "UploadLarge";
|
||||||
internal const string TransferFiles = "TransferFiles";
|
internal const string TransferFiles = "TransferFiles";
|
||||||
internal const string UploadFiles = "UploadFiles";
|
|
||||||
internal const string RemoveFile = "RemoveFile";
|
internal const string RemoveFile = "RemoveFile";
|
||||||
internal const string DeleteOriginal = "DeleteOriginal";
|
internal const string DeleteOriginal = "DeleteOriginal";
|
||||||
internal const string UpdateTrackPicture = "UpdateTrackPicture";
|
internal const string UpdateTrackPicture = "UpdateTrackPicture";
|
||||||
|
|||||||
+38
-18
@@ -1,10 +1,13 @@
|
|||||||
using MassTransit;
|
using MassTransit;
|
||||||
using MassTransit.Courier.Contracts;
|
using MassTransit.Courier.Contracts;
|
||||||
|
using MimeMapping;
|
||||||
using Musify.Application.Events;
|
using Musify.Application.Events;
|
||||||
using Musify.Infrastructure.Configuration;
|
using Musify.Infrastructure.Configuration;
|
||||||
using Musify.Infrastructure.MassTransit.Consumers;
|
|
||||||
using Musify.Infrastructure.MassTransit.Activities;
|
using Musify.Infrastructure.MassTransit.Activities;
|
||||||
using Musify.Infrastructure.MassTransit.Activities.Arguments;
|
using Musify.Infrastructure.MassTransit.Activities.Arguments;
|
||||||
|
using Musify.Infrastructure.MassTransit.Activities.Files;
|
||||||
|
using Musify.Infrastructure.MassTransit.Arguments;
|
||||||
|
using Musify.Infrastructure.MassTransit.Consumers;
|
||||||
|
|
||||||
namespace Musify.Infrastructure.MassTransit.RoutingSlip.Builders
|
namespace Musify.Infrastructure.MassTransit.RoutingSlip.Builders
|
||||||
{
|
{
|
||||||
@@ -15,13 +18,13 @@ namespace Musify.Infrastructure.MassTransit.RoutingSlip.Builders
|
|||||||
var routingSlipBuilder = BuildPictureWorkflow(
|
var routingSlipBuilder = BuildPictureWorkflow(
|
||||||
message.SourceBucketName,
|
message.SourceBucketName,
|
||||||
message.SourceKeyName,
|
message.SourceKeyName,
|
||||||
message.SmallPictureKeyName,
|
message.SmallPictureRoute,
|
||||||
message.SmallPictureWidth,
|
message.SmallPictureWidth,
|
||||||
message.SmallPictureHeight,
|
message.SmallPictureHeight,
|
||||||
message.MediumPictureKeyName,
|
message.MediumPictureRoute,
|
||||||
message.MediumPictureWidth,
|
message.MediumPictureWidth,
|
||||||
message.MediumPictureHeight,
|
message.MediumPictureHeight,
|
||||||
message.LargePictureKeyName,
|
message.LargePictureRoute,
|
||||||
message.LargePictureWidth,
|
message.LargePictureWidth,
|
||||||
message.LargePictureHeight,
|
message.LargePictureHeight,
|
||||||
correlationId);
|
correlationId);
|
||||||
@@ -36,9 +39,9 @@ namespace Musify.Infrastructure.MassTransit.RoutingSlip.Builders
|
|||||||
new UpdateTrackPictureArguments(
|
new UpdateTrackPictureArguments(
|
||||||
message.TrackId,
|
message.TrackId,
|
||||||
message.SourceKeyName,
|
message.SourceKeyName,
|
||||||
message.SmallPictureKeyName,
|
message.SmallPictureRoute,
|
||||||
message.MediumPictureKeyName,
|
message.MediumPictureRoute,
|
||||||
message.LargePictureKeyName));
|
message.LargePictureRoute));
|
||||||
|
|
||||||
return routingSlipBuilder;
|
return routingSlipBuilder;
|
||||||
}
|
}
|
||||||
@@ -73,15 +76,15 @@ namespace Musify.Infrastructure.MassTransit.RoutingSlip.Builders
|
|||||||
}
|
}
|
||||||
|
|
||||||
RoutingSlipBuilder BuildPictureWorkflow(
|
RoutingSlipBuilder BuildPictureWorkflow(
|
||||||
string sourceBucketName,
|
string bucketName,
|
||||||
string sourceKeyName,
|
string sourceKeyName,
|
||||||
string smallPictureKeyName,
|
string destinationSmallPictureRoute,
|
||||||
int smallPictureWidth,
|
int smallPictureWidth,
|
||||||
int smallPictureHeight,
|
int smallPictureHeight,
|
||||||
string mediumPictureKeyName,
|
string destinationMediumPictureRoute,
|
||||||
int mediumPictureWidth,
|
int mediumPictureWidth,
|
||||||
int mediumPictureHeight,
|
int mediumPictureHeight,
|
||||||
string largePictureKeyName,
|
string destinationLargePictureRoute,
|
||||||
int largePictureWidth,
|
int largePictureWidth,
|
||||||
int largePictureHeight,
|
int largePictureHeight,
|
||||||
Guid? correlationId)
|
Guid? correlationId)
|
||||||
@@ -95,37 +98,43 @@ namespace Musify.Infrastructure.MassTransit.RoutingSlip.Builders
|
|||||||
MessagingHelper.BuildExecuteActivityUri(GeneratePictureWorkflowPathsActivity.ExecuteEndpointName),
|
MessagingHelper.BuildExecuteActivityUri(GeneratePictureWorkflowPathsActivity.ExecuteEndpointName),
|
||||||
new GeneratePictureWorkflowPathsArguments(
|
new GeneratePictureWorkflowPathsArguments(
|
||||||
workerConfiguration.Routes.TemporaryFilesDirectory,
|
workerConfiguration.Routes.TemporaryFilesDirectory,
|
||||||
sourceKeyName,
|
sourceKeyName));
|
||||||
smallPictureKeyName,
|
|
||||||
mediumPictureKeyName,
|
|
||||||
largePictureKeyName));
|
|
||||||
|
|
||||||
routingSlipBuilder.AddActivity(
|
routingSlipBuilder.AddActivity(
|
||||||
ActivityNames.DownloadFile,
|
ActivityNames.DownloadFile,
|
||||||
MessagingHelper.BuildExecuteActivityUri(DownloadFileFromBucketActivity.ExecuteEndpointName),
|
MessagingHelper.BuildExecuteActivityUri(DownloadFileFromBucketActivity.ExecuteEndpointName),
|
||||||
new DownloadFileFromBucketArguments(
|
new DownloadFileFromBucketArguments(
|
||||||
sourceBucketName,
|
bucketName,
|
||||||
sourceKeyName,
|
sourceKeyName,
|
||||||
RoutingSlipVariableNames.Picture.OriginalFilePath));
|
RoutingSlipVariableNames.Picture.OriginalFilePath));
|
||||||
|
|
||||||
AddResizeActivity(
|
AddResizeActivity(
|
||||||
routingSlipBuilder,
|
routingSlipBuilder,
|
||||||
ActivityNames.ResizeSmall,
|
ActivityNames.ResizeSmall,
|
||||||
|
ActivityNames.UploadSmall,
|
||||||
|
bucketName,
|
||||||
RoutingSlipVariableNames.Picture.SmallResizedFilePath,
|
RoutingSlipVariableNames.Picture.SmallResizedFilePath,
|
||||||
|
destinationSmallPictureRoute,
|
||||||
smallPictureWidth,
|
smallPictureWidth,
|
||||||
smallPictureHeight);
|
smallPictureHeight);
|
||||||
|
|
||||||
AddResizeActivity(
|
AddResizeActivity(
|
||||||
routingSlipBuilder,
|
routingSlipBuilder,
|
||||||
ActivityNames.ResizeMedium,
|
ActivityNames.ResizeMedium,
|
||||||
|
ActivityNames.ResizeMedium,
|
||||||
|
bucketName,
|
||||||
RoutingSlipVariableNames.Picture.MediumResizedFilePath,
|
RoutingSlipVariableNames.Picture.MediumResizedFilePath,
|
||||||
|
destinationMediumPictureRoute,
|
||||||
mediumPictureWidth,
|
mediumPictureWidth,
|
||||||
mediumPictureHeight);
|
mediumPictureHeight);
|
||||||
|
|
||||||
AddResizeActivity(
|
AddResizeActivity(
|
||||||
routingSlipBuilder,
|
routingSlipBuilder,
|
||||||
ActivityNames.ResizeLarge,
|
ActivityNames.ResizeLarge,
|
||||||
|
ActivityNames.UploadLarge,
|
||||||
|
bucketName,
|
||||||
RoutingSlipVariableNames.Picture.LargeResizedFilePath,
|
RoutingSlipVariableNames.Picture.LargeResizedFilePath,
|
||||||
|
destinationLargePictureRoute,
|
||||||
largePictureWidth,
|
largePictureWidth,
|
||||||
largePictureHeight);
|
largePictureHeight);
|
||||||
|
|
||||||
@@ -134,19 +143,30 @@ namespace Musify.Infrastructure.MassTransit.RoutingSlip.Builders
|
|||||||
|
|
||||||
static void AddResizeActivity(
|
static void AddResizeActivity(
|
||||||
RoutingSlipBuilder routingSlipBuilder,
|
RoutingSlipBuilder routingSlipBuilder,
|
||||||
string activityName,
|
string resizeActivityName,
|
||||||
|
string uploadActivityName,
|
||||||
|
string bucketName,
|
||||||
string destinationFilePathVariableName,
|
string destinationFilePathVariableName,
|
||||||
|
string destinationBucketRoute,
|
||||||
int width,
|
int width,
|
||||||
int height)
|
int height)
|
||||||
{
|
{
|
||||||
routingSlipBuilder.AddActivity(
|
routingSlipBuilder.AddActivity(
|
||||||
activityName,
|
resizeActivityName,
|
||||||
MessagingHelper.BuildExecuteActivityUri(ResizePictureActivity.ExecuteEndpointName),
|
MessagingHelper.BuildExecuteActivityUri(ResizePictureActivity.ExecuteEndpointName),
|
||||||
new ResizePictureLocalArguments(
|
new ResizePictureLocalArguments(
|
||||||
RoutingSlipVariableNames.Picture.OriginalFilePath,
|
RoutingSlipVariableNames.Picture.OriginalFilePath,
|
||||||
destinationFilePathVariableName,
|
destinationFilePathVariableName,
|
||||||
width,
|
width,
|
||||||
height));
|
height));
|
||||||
|
|
||||||
|
routingSlipBuilder.AddActivity(
|
||||||
|
uploadActivityName,
|
||||||
|
MessagingHelper.BuildExecuteActivityUri(UploadFileToBucketActivity.ExecuteEndpointName),
|
||||||
|
new UploadFileToBucketArguments(
|
||||||
|
destinationFilePathVariableName,
|
||||||
|
bucketName,
|
||||||
|
destinationBucketRoute));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ namespace Musify.Infrastructure.MassTransit
|
|||||||
internal const string MediumResizedFilePath = "Picture.MediumResizedFilePath";
|
internal const string MediumResizedFilePath = "Picture.MediumResizedFilePath";
|
||||||
internal const string LargeResizedFilePath = "Picture.LargeResizedFilePath";
|
internal const string LargeResizedFilePath = "Picture.LargeResizedFilePath";
|
||||||
internal const string DestinationFolderName = "Picture.DestinationFolderName";
|
internal const string DestinationFolderName = "Picture.DestinationFolderName";
|
||||||
|
|
||||||
|
internal const string SmallPictureKeyName = "Picture.SmallPictureKeyName";
|
||||||
|
internal const string MediumPictureKeyName = "Picture.MediumPictureKeyName";
|
||||||
|
internal const string LargePictureKeyName = "Picture.LargePictureKeyName";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using Amazon.S3.Model;
|
|||||||
using Amazon.S3.Transfer;
|
using Amazon.S3.Transfer;
|
||||||
using Ardalis.Result;
|
using Ardalis.Result;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using MimeMapping;
|
||||||
using Musify.Application.Contracts.Infrastructure;
|
using Musify.Application.Contracts.Infrastructure;
|
||||||
using Musify.Domain.Entities;
|
using Musify.Domain.Entities;
|
||||||
using Musify.Infrastructure.Configuration;
|
using Musify.Infrastructure.Configuration;
|
||||||
@@ -111,6 +112,21 @@ namespace Musify.Infrastructure.Storage
|
|||||||
return Result.Success();
|
return Result.Success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<Result<string>> UploadFileAsync(string filePath, string bucketName, string keyName, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var fileStream = File.OpenRead(filePath);
|
||||||
|
var contentType = MimeUtility.GetMimeMapping(filePath);
|
||||||
|
return await UploadFileAsync(fileStream, contentType, bucketName, keyName, cancellationToken);
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
logger.LogError(exception, "Failed to upload file to S3 with bucket name {BucketName} and key name {KeyName}", bucketName, keyName);
|
||||||
|
return Result.Error($"Failed to upload file to S3 with bucket name {bucketName} and key name {keyName}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<Result<string>> UploadFileAsync(Stream sourceStream, string contentType, string bucketName, string keyName, CancellationToken cancellationToken)
|
public async Task<Result<string>> UploadFileAsync(Stream sourceStream, string contentType, string bucketName, string keyName, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var request = new PutObjectRequest
|
var request = new PutObjectRequest
|
||||||
|
|||||||
Reference in New Issue
Block a user