From 5295ff7d8e2a1ff7d8407d3bb20b95378aed1b51 Mon Sep 17 00:00:00 2001 From: AlanMoonbase Date: Fri, 14 Feb 2025 14:51:12 -0800 Subject: [PATCH] implement ``GetCombinedListMessage`` and ``GetUserMessageQueue`` change ``Message.FromViking`` to ``Message.ToViking`` set ``OnDelete`` behaviour on replies to ``DeleteBehaviour.SetNull`` --- src/Controllers/Common/MessagingController.cs | 19 +++++++++++------- src/Model/DBContext.cs | 5 +++-- src/Model/Message.cs | 4 ++-- src/Services/MessagingService.cs | 20 +++++++++++-------- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/Controllers/Common/MessagingController.cs b/src/Controllers/Common/MessagingController.cs index 888ef31..1da6572 100644 --- a/src/Controllers/Common/MessagingController.cs +++ b/src/Controllers/Common/MessagingController.cs @@ -8,20 +8,22 @@ namespace sodoff.Controllers.Common; public class MessagingController : Controller { public readonly ModerationService moderationService; + public readonly MessagingService messagingService; public readonly DBContext ctx; - public MessagingController(ModerationService moderationService, DBContext ctx) + public MessagingController(ModerationService moderationService, MessagingService messagingService, DBContext ctx) { this.moderationService = moderationService; + this.messagingService = messagingService; this.ctx = ctx; } [HttpPost] [Produces("application/xml")] [Route("MessagingWebService.asmx/GetUserMessageQueue")] - public ArrayOfMessageInfo? GetUserMessageQueue() { - // TODO: this is a placeholder - return null; + [VikingSession] + public ArrayOfMessageInfo? GetUserMessageQueue(Viking viking) { + return new ArrayOfMessageInfo { MessageInfo = messagingService.ConstructUserMessageInfoArray(viking, false, false) }; } [HttpPost] @@ -43,10 +45,13 @@ public class MessagingController : Controller { [HttpPost] [Produces("application/xml")] [Route("MessageWebService.asmx/GetCombinedListMessage")] - public IActionResult GetCombinedListMessage() + public ArrayOfCombinedListMessage? GetCombinedListMessage([FromForm] Guid userId) { - // TODO - placeholder - return Ok(new ArrayOfMessageInfo()); + Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Uid == userId); + + if (viking == null) return new ArrayOfCombinedListMessage(); + + return new ArrayOfCombinedListMessage { CombinedListMessage = messagingService.ConstructCombinedMessageArray(viking) }; } [HttpPost] diff --git a/src/Model/DBContext.cs b/src/Model/DBContext.cs index 3ac5659..3bd948a 100644 --- a/src/Model/DBContext.cs +++ b/src/Model/DBContext.cs @@ -304,11 +304,12 @@ public class DBContext : DbContext { builder.Entity().HasOne(r => r.FromViking) .WithMany(e => e.MessageBoard) - .HasForeignKey(e => e.FromVikingId); + .HasForeignKey(e => e.ToVikingId); builder.Entity().HasOne(r => r.ParentMessage) .WithMany(e => e.Replies) - .HasForeignKey(e => e.ParentMessageId); + .HasForeignKey(e => e.ParentMessageId) + .OnDelete(DeleteBehavior.SetNull); // Groups builder.Entity().HasMany(r => r.Vikings) diff --git a/src/Model/Message.cs b/src/Model/Message.cs index 3501a46..4593cfb 100644 --- a/src/Model/Message.cs +++ b/src/Model/Message.cs @@ -10,7 +10,7 @@ public class Message [Key] public int Id { get; set; } public int VikingId { get; set; } - public int FromVikingId { get; set; } + public int ToVikingId { get; set; } public int? ParentMessageId { get; set; } @@ -32,7 +32,7 @@ public class Message public bool IsNew { get; set; } public virtual Viking? Viking { get; set; } - public virtual Viking? FromViking { get; set; } + public virtual Viking? ToViking { get; set; } public virtual Message? ParentMessage { get; set; } public virtual ICollection? Replies { get; set; } } diff --git a/src/Services/MessagingService.cs b/src/Services/MessagingService.cs index 351a659..ddc0d7e 100644 --- a/src/Services/MessagingService.cs +++ b/src/Services/MessagingService.cs @@ -1,4 +1,5 @@ using System; +using System.Net.Mime; using sodoff.Model; using sodoff.Schema; using sodoff.Util; @@ -18,18 +19,24 @@ public class MessagingService { Random rnd = new Random(); // 'ConversationId' and 'QueueId' + // get current DateTime + DateTime now = DateTime.UtcNow; + // create a new message Model.Message message = new Model.Message { ConversationID = rnd.Next(1000, 9999), QueueID = rnd.Next(1000, 9999), - CreatedAt = DateTime.UtcNow, - LastUpdatedAt = DateTime.UtcNow, + CreatedAt = now, + LastUpdatedAt = now, MessageType = type, MessageLevel = level, MessageTypeID = typeID, Data = content, - IsNew = true // immediately mark as new + MemberMessage = content, + NonMemberMessage = content, + IsNew = true, + IsDeleted = false }; if (isReply == true && replyMessageID != 0) @@ -47,10 +54,7 @@ public class MessagingService if(messageToReplyTo.Replies == null) messageToReplyTo.Replies = new List(); // add to list of replies - messageToReplyTo.Replies.Add(messageToReplyTo); // EF Core should do the rest (hopefully) - - // return message here, do not add another parent message to message board - return message; + messageToReplyTo.Replies.Add(messageToReplyTo); } } @@ -105,7 +109,7 @@ public class MessagingService MessageID = message.Id, ConversationID = message.ConversationID ?? 0, ReplyToMessageID = message.ParentMessageId, - Creator = message.FromViking!.Uid.ToString() ?? "NotFound", + Creator = message.Viking!.Uid.ToString() ?? "NotFound", CreateTime = message.CreatedAt, UpdateDate = message.LastUpdatedAt, MessageType = message.MessageType,