Skip to content

Commit

Permalink
Added Send messages from uploaded files (#52)
Browse files Browse the repository at this point in the history
  • Loading branch information
Carael authored Mar 11, 2024
1 parent 01897b0 commit a4220f4
Show file tree
Hide file tree
Showing 13 changed files with 178 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/Api/Host/Host.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

<PropertyGroup Condition=" '$(RunConfiguration)' == 'CrossBusExplorer' " />
<ItemGroup>
<PackageReference Include="HotChocolate.AspNetCore" Version="13.8.1" />
<PackageReference Include="HotChocolate.AspNetCore" Version="13.9.0" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Management/Management.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.2" />
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
</ItemGroup>

Expand Down
6 changes: 5 additions & 1 deletion src/Core/ServiceBus.Contracts/Types/SendMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@ public record SendMessage(
string? SessionId,
DateTimeOffset? ScheduledEnqueueTime,
TimeSpan? TimeToLive,
Dictionary<string, object?>? ApplicationProperties);
Dictionary<string, object?>? ApplicationProperties)
{
public static SendMessage CreateFromBody(string body) =>
new SendMessage(body, null, null, null, null, null, null, null, null, null, null, null);
}
7 changes: 7 additions & 0 deletions src/Core/ServiceBus.Contracts/Types/UploadFileType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace CrossBusExplorer.ServiceBus.Contracts.Types;

public enum UploadFileType
{
Body = 0,
BodyWithApplicationProperties = 1
}
2 changes: 1 addition & 1 deletion src/Core/ServiceBus/ServiceBus.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.2" />
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
</ItemGroup>

Expand Down
4 changes: 2 additions & 2 deletions src/Ui/Website.Host/Website.Host.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ElectronSharp.API" Version="28.2.0.44969" />
<PackageReference Include="MudBlazor" Version="6.15.0" />
<PackageReference Include="ElectronSharp.API" Version="29.0.1.46142" />
<PackageReference Include="MudBlazor" Version="6.17.0" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Website.Host/electron.manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"appId": "com.crossbusexplorer.app",
"productName": "Cross Bus Explorer",
"copyright": "Copyright © 2024",
"buildVersion": "0.4.6",
"buildVersion": "0.4.7",
"compression": "maximum",
"directories": {
"output": "../../../bin/Desktop"
Expand Down
5 changes: 5 additions & 0 deletions src/Ui/Website/Models/MessagesUploadDialogResult.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using System.Collections.Generic;
using CrossBusExplorer.ServiceBus.Contracts.Types;
namespace CrossBusExplorer.Website.Models;

public record MessagesUploadDialogResult(UploadFileType Type, IList<string> FilesContent);
12 changes: 10 additions & 2 deletions src/Ui/Website/Pages/Messages.razor
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
<MudTooltip Text="Send message">
<MudIconButton Icon="@Icons.Filled.Send" OnClick="@(() => Model.ViewMessageDetails(null, true))" ButtonType="ButtonType.Button">Send message</MudIconButton>
</MudTooltip>

<MudTooltip Text="Import messages from file">
<MudIconButton Icon="@Icons.Filled.FileUpload" OnClick="@(() => Model.ImportMessagesFromFileAsync(default))" ButtonType="ButtonType.Button">Import messages from file</MudIconButton>
</MudTooltip>
</div>

<MudTable Items="Model.Messages" Hover="true" SortLabel="Sort By" Elevation="0">
Expand Down Expand Up @@ -81,7 +85,7 @@
</MudTable>
</MudPaper>

<MudDialog @bind-IsVisible="Model.DialogVisible">
<MudDialog @bind-IsVisible="Model.DialogVisible" Options="_dialogOptions" DefaultFocus="DefaultFocus.Element">
<TitleContent>
<MudText Typo="Typo.h6">
Receive @QueueOrTopicName @SubscriptionName messages
Expand Down Expand Up @@ -132,7 +136,7 @@
For="@(() => _formModel.Type)">

@* TODO: fix all receive option
<MudRadio Dense="true" *@
<MudRadio Dense="true" *@
@* Size="Size.Small" *@
@* Option="ReceiveType.All"> *@
@* @ReceiveType.All *@
Expand Down Expand Up @@ -194,6 +198,10 @@
MudForm form;
ReceiveMessagesForm _formModel;
ReceiveMessageFormValidator _validator = new ReceiveMessageFormValidator();
DialogOptions _dialogOptions = new DialogOptions
{
CloseOnEscapeKey = true,
};

protected override async Task OnInitializedAsync()
{
Expand Down
93 changes: 93 additions & 0 deletions src/Ui/Website/Shared/Messages/MessagesUploadDialog.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
@using CrossBusExplorer.ServiceBus.Contracts.Types
@using System.IO
@using CrossBusExplorer.Website.Models
<MudDialog>
<TitleContent>
<MudText Typo="Typo.h6">
Upload messages from file
</MudText>
<MudText>Max 1000 at once</MudText>
</TitleContent>
<DialogContent>
<MudPaper Elevation="3">
<MudField Variant="Variant.Outlined" Label="File type">
<MudRadioGroup @bind-SelectedOption="_uploadFileType"
For="@(() => _uploadFileType)">
<MudRadio Dense="true"
Size="Size.Small"
Option="UploadFileType.Body">
Body only
</MudRadio>
<MudRadio Dense="true"
Size="Size.Small"
Disabled="true"
Option="UploadFileType.BodyWithApplicationProperties">
Body with ApplicationProperties (not yet supported)
</MudRadio>
</MudRadioGroup>
</MudField>
</MudPaper>
<MudPaper Elevation="3">
<MudField Variant="Variant.Outlined" Label="Select files">
<MudFileUpload T="IReadOnlyList<IBrowserFile>" FilesChanged="UploadFilesAsync" MaximumFileCount="1000">
<ButtonTemplate>
<MudButton HtmlTag="label"
Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.CloudUpload"
for="@context.Id">
Select multiple files
</MudButton>
</ButtonTemplate>
</MudFileUpload>
</MudField>
</MudPaper>
</DialogContent>
<DialogActions>
<MudButton ButtonType="ButtonType.Reset"
Color="Color.Default"
OnClick="@(CloseDialog)"
Class="px-10">
Close
</MudButton>
<MudButton ButtonType="ButtonType.Button"
Color="Color.Success"
OnClick="@(Submit)"
Disabled="@(!_fileContents.Any())"
Class="px-10">
Upload @_fileContents.Count files
</MudButton>
</DialogActions>
</MudDialog>

@code {
[CascadingParameter]
MudDialogInstance MudDialog { get; set; }

IList<string> _fileContents = new List<string>();

private UploadFileType _uploadFileType;

private void CloseDialog()
{
MudDialog.Close(DialogResult.Cancel());
}

private void Submit()
{
MudDialog.Close(DialogResult.Ok(new MessagesUploadDialogResult(_uploadFileType, _fileContents)));
}

private async Task UploadFilesAsync(IReadOnlyList<IBrowserFile> files)
{
_fileContents.Clear();

foreach (IBrowserFile file in files)
{
using var reader = new StreamReader(file.OpenReadStream());
var fileContent = await reader.ReadToEndAsync(default);

_fileContents.Add(fileContent);
}
}
}
1 change: 1 addition & 0 deletions src/Ui/Website/ViewModels/IMessagesViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ Task OnSubmitReceiveForm(
Task ViewMessageDetails(Message? message, bool editMode);
Task Requeue(string queueOrTopicName, MessageDetailsModel message);
Task Delete(Message message, SubQueue subQueue);
Task ImportMessagesFromFileAsync(CancellationToken cancellationToken);
}
50 changes: 50 additions & 0 deletions src/Ui/Website/ViewModels/MessagesViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using CrossBusExplorer.Website.Models;
using CrossBusExplorer.Website.Shared;
using CrossBusExplorer.Website.Shared.Messages;
using Microsoft.Azure.Amqp.Serialization;
using MudBlazor;
namespace CrossBusExplorer.Website.ViewModels;

Expand Down Expand Up @@ -234,6 +235,55 @@ public async Task Delete(Message message, SubQueue subQueue)
}
}

public async Task ImportMessagesFromFileAsync(CancellationToken cancellationToken)
{
try
{
var parameters = new DialogParameters();
IDialogReference? dialog = await _dialogService.ShowAsync<MessagesUploadDialog>(
"Confirm",
parameters,
new DialogOptions
{
CloseOnEscapeKey = true
});

DialogResult? result = await dialog.Result;

if (result.Data is MessagesUploadDialogResult resultData)
{
if (resultData.FilesContent.Count == 0)
{
_snackbar.Add("No files selected", Severity.Warning);
return;
}

var messages = new List<SendMessage>();

foreach (var fileContent in resultData.FilesContent)
{
messages.Add(SendMessage.CreateFromBody(fileContent));
}

var resultCount = await _messageService.SendMessagesAsync(
_entity!.ConnectionName,
_entity!.QueueOrTopicName,
messages,
cancellationToken);

_snackbar.Add($"Successfully uploaded {resultCount} messages", Severity.Success);
}
else
{
_snackbar.Add("No files were uploaded.", Severity.Warning);
}
}
catch (Exception ex)
{
_snackbar.Add($"Error while sending messages from files. {ex.Message}", Severity.Error);
}
}

private async Task<List<Message>> LoadMessagesAsync(
ReceiveMessagesForm formModel,
CancellationToken cancellationToken)
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Website/Website.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

<ItemGroup>
<PackageReference Include="FluentValidation" Version="11.9.0" />
<PackageReference Include="MudBlazor" Version="6.15.0" />
<PackageReference Include="MudBlazor" Version="6.17.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Nito.AsyncEx" Version="5.1.2" />
</ItemGroup>
Expand Down

0 comments on commit a4220f4

Please sign in to comment.