Skip to content

Commit ae073dd

Browse files
committed
work in progress
1 parent 9bc7b69 commit ae073dd

13 files changed

Lines changed: 3411 additions & 235 deletions

File tree

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
using System;
22
using MangoAPI.BusinessLogic.Responses;
33
using MediatR;
4+
using Microsoft.AspNetCore.Http;
45

56
namespace MangoAPI.BusinessLogic.ApiCommands.Messages;
67

78
public record SendMessageCommand(
89
string MessageText,
910
Guid UserId,
1011
Guid ChatId,
11-
string AttachmentUrl,
1212
string InReplayToAuthor,
1313
string InReplayToText,
1414
DateTime? CreatedAt,
15-
Guid? MessageId)
16-
: IRequest<Result<SendMessageResponse>>;
15+
Guid? MessageId,
16+
IFormFile Attachment)
17+
: IRequest<Result<SendMessageResponse>>;

MangoAPI.BusinessLogic/ApiCommands/Messages/SendMessageCommandHandler.cs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Threading;
44
using System.Threading.Tasks;
55
using MangoAPI.Application.Interfaces;
6+
using MangoAPI.Application.Services;
67
using MangoAPI.BusinessLogic.HubConfig;
78
using MangoAPI.BusinessLogic.Models;
89
using MangoAPI.BusinessLogic.Responses;
@@ -22,17 +23,20 @@ public class SendMessageCommandHandler
2223
private readonly IHubContext<ChatHub, IHubClient> hubContext;
2324
private readonly ResponseFactory<SendMessageResponse> responseFactory;
2425
private readonly IBlobServiceSettings blobServiceSettings;
26+
private readonly IBlobService blobService;
2527

2628
public SendMessageCommandHandler(
2729
MangoDbContext dbContext,
2830
IHubContext<ChatHub, IHubClient> hubContext,
2931
ResponseFactory<SendMessageResponse> responseFactory,
30-
IBlobServiceSettings blobServiceSettings)
32+
IBlobServiceSettings blobServiceSettings,
33+
IBlobService blobService)
3134
{
3235
this.dbContext = dbContext;
3336
this.hubContext = hubContext;
3437
this.responseFactory = responseFactory;
3538
this.blobServiceSettings = blobServiceSettings;
39+
this.blobService = blobService;
3640
}
3741

3842
public async Task<Result<SendMessageResponse>> Handle(
@@ -44,8 +48,7 @@ public async Task<Result<SendMessageResponse>> Handle(
4448
{
4549
x.DisplayName, x.DisplayNameColour, x.Image, x.Id,
4650
}).FirstOrDefaultAsync(
47-
x => x.Id == request.UserId,
48-
cancellationToken);
51+
x => x.Id == request.UserId, cancellationToken);
4952

5053
if (user == null)
5154
{
@@ -68,14 +71,16 @@ public async Task<Result<SendMessageResponse>> Handle(
6871
return responseFactory.ConflictResponse(errorMessage, errorDescription);
6972
}
7073

74+
var attachmentUniqueFileName = await UploadAttachmentIfExistsAsync(request);
75+
7176
var messageEntity = new MessageEntity
7277
{
7378
Id = request.MessageId ?? Guid.NewGuid(),
7479
ChatId = request.ChatId,
7580
UserId = request.UserId,
7681
Content = request.MessageText,
7782
CreatedAt = request.CreatedAt ?? DateTime.UtcNow,
78-
Attachment = request.AttachmentUrl,
83+
AttachmentFileName = attachmentUniqueFileName,
7984
InReplayToAuthor = request.InReplayToAuthor,
8085
InReplayToText = request.InReplayToText,
8186
};
@@ -102,4 +107,19 @@ public async Task<Result<SendMessageResponse>> Handle(
102107

103108
return responseFactory.SuccessResponse(SendMessageResponse.FromSuccess(messageEntity.Id));
104109
}
110+
111+
private async Task<string> UploadAttachmentIfExistsAsync(SendMessageCommand request)
112+
{
113+
if (request.Attachment == null)
114+
{
115+
return null;
116+
}
117+
118+
var file = request.Attachment;
119+
var uniqueFileName = FileNameHelper.CreateUniqueFileName(file.FileName);
120+
121+
await blobService.UploadFileBlobAsync(file.OpenReadStream(), file.ContentType, uniqueFileName);
122+
123+
return uniqueFileName;
124+
}
105125
}

MangoAPI.BusinessLogic/ApiCommands/Messages/SendMessageCommandValidator.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ public SendMessageCommandValidator()
1919
.Cascade(CascadeMode.Stop)
2020
.Length(1, 300);
2121

22-
RuleFor(x => x.AttachmentUrl)
23-
.Cascade(CascadeMode.Stop);
24-
2522
RuleFor(x => x.ChatId).NotEmpty();
2623
RuleFor(x => x.UserId).NotEmpty();
2724
}
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System;
1+
using Microsoft.AspNetCore.Http;
2+
using System;
23
using System.ComponentModel;
34
using System.Text.Json.Serialization;
45

@@ -10,19 +11,19 @@ public record SendMessageRequest
1011
public SendMessageRequest(
1112
string messageText,
1213
Guid chatId,
13-
string attachmentUrl,
1414
string inReplayToAuthor,
1515
string inReplayToText,
1616
DateTime? createdAt,
17-
Guid? messageId)
17+
Guid? messageId,
18+
IFormFile attachment)
1819
{
1920
MessageText = messageText;
2021
ChatId = chatId;
21-
AttachmentUrl = attachmentUrl;
2222
InReplayToAuthor = inReplayToAuthor;
2323
InReplayToText = inReplayToText;
2424
CreatedAt = createdAt;
2525
MessageId = messageId;
26+
Attachment = attachment;
2627
}
2728

2829
[DefaultValue("hello world")]
@@ -31,16 +32,17 @@ public SendMessageRequest(
3132
[DefaultValue("a8747c37-c5ef-4a87-943c-3ee3ae0a2871")]
3233
public Guid ChatId { get; }
3334

34-
[DefaultValue("https://localhost:5001/Uploads/khachatur_picture.jpg")]
35-
public string AttachmentUrl { get; }
36-
3735
[DefaultValue("John Doe")]
3836
public string InReplayToAuthor { get; }
3937

4038
[DefaultValue("Hello world!")]
4139
public string InReplayToText { get; }
4240

41+
[DefaultValue("2021-08-01T00:00:00.0000000")]
4342
public DateTime? CreatedAt { get; }
4443

44+
[DefaultValue("f56ac722-a57b-411c-8306-c2e05fb1a8df")]
4545
public Guid? MessageId { get; }
46+
47+
public IFormFile Attachment { get; }
4648
}

MangoAPI.BusinessLogic/ApiQueries/Messages/GetMessagesQueryHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ public async Task<Result<GetMessagesResponse>> Handle(GetMessagesQuery request,
5151
? $"{blobServiceSettings.MangoBlobAccess}/{messageEntity.User.Image}"
5252
: null,
5353

54-
MessageAttachmentUrl = messageEntity.Attachment != null
55-
? $"{blobServiceSettings.MangoBlobAccess}/{messageEntity.Attachment}"
54+
MessageAttachmentUrl = messageEntity.AttachmentFileName != null
55+
? $"{blobServiceSettings.MangoBlobAccess}/{messageEntity.AttachmentFileName}"
5656
: null,
5757
}).Take(200).ToListAsync(cancellationToken);
5858

MangoAPI.BusinessLogic/ApiQueries/Messages/SearchChatMessageQueryHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ public async Task<Result<SearchChatMessagesResponse>> Handle(
6767
? $"{blobServiceSettings.MangoBlobAccess}/{x.User.Image}"
6868
: null,
6969

70-
MessageAttachmentUrl = x.Attachment != null
71-
? $"{blobServiceSettings.MangoBlobAccess}/{x.Attachment}"
70+
MessageAttachmentUrl = x.AttachmentFileName != null
71+
? $"{blobServiceSettings.MangoBlobAccess}/{x.AttachmentFileName}"
7272
: null,
7373
}).Take(200);
7474

MangoAPI.BusinessLogic/Models/Message.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ public static Message ToMessage(
7878
? $"{mangoBlobAccess}/{image}"
7979
: null,
8080

81-
MessageAttachmentUrl = message.Attachment != null
82-
? $"{mangoBlobAccess}/{message.Attachment}"
81+
MessageAttachmentUrl = message.AttachmentFileName != null
82+
? $"{mangoBlobAccess}/{message.AttachmentFileName}"
8383
: null,
8484
};
8585

MangoAPI.Domain/Entities/MessageEntity.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public sealed class MessageEntity
1616

1717
public string InReplayToText { get; set; }
1818

19-
public string Attachment { get; set; }
19+
public string AttachmentFileName { get; set; }
2020

2121
public DateTime CreatedAt { get; set; }
2222

0 commit comments

Comments
 (0)