implement `GetCombinedListMessage and GetUserMessageQueue`

change ``Message.FromViking`` to ``Message.ToViking``
set ``OnDelete`` behaviour on replies to ``DeleteBehaviour.SetNull``
This commit is contained in:
Alan Moon 2025-02-14 14:51:12 -08:00
parent 6cfe8b7ba6
commit 5295ff7d8e
4 changed files with 29 additions and 19 deletions

View File

@ -8,20 +8,22 @@ namespace sodoff.Controllers.Common;
public class MessagingController : Controller { public class MessagingController : Controller {
public readonly ModerationService moderationService; public readonly ModerationService moderationService;
public readonly MessagingService messagingService;
public readonly DBContext ctx; public readonly DBContext ctx;
public MessagingController(ModerationService moderationService, DBContext ctx) public MessagingController(ModerationService moderationService, MessagingService messagingService, DBContext ctx)
{ {
this.moderationService = moderationService; this.moderationService = moderationService;
this.messagingService = messagingService;
this.ctx = ctx; this.ctx = ctx;
} }
[HttpPost] [HttpPost]
[Produces("application/xml")] [Produces("application/xml")]
[Route("MessagingWebService.asmx/GetUserMessageQueue")] [Route("MessagingWebService.asmx/GetUserMessageQueue")]
public ArrayOfMessageInfo? GetUserMessageQueue() { [VikingSession]
// TODO: this is a placeholder public ArrayOfMessageInfo? GetUserMessageQueue(Viking viking) {
return null; return new ArrayOfMessageInfo { MessageInfo = messagingService.ConstructUserMessageInfoArray(viking, false, false) };
} }
[HttpPost] [HttpPost]
@ -43,10 +45,13 @@ public class MessagingController : Controller {
[HttpPost] [HttpPost]
[Produces("application/xml")] [Produces("application/xml")]
[Route("MessageWebService.asmx/GetCombinedListMessage")] [Route("MessageWebService.asmx/GetCombinedListMessage")]
public IActionResult GetCombinedListMessage() public ArrayOfCombinedListMessage? GetCombinedListMessage([FromForm] Guid userId)
{ {
// TODO - placeholder Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Uid == userId);
return Ok(new ArrayOfMessageInfo());
if (viking == null) return new ArrayOfCombinedListMessage();
return new ArrayOfCombinedListMessage { CombinedListMessage = messagingService.ConstructCombinedMessageArray(viking) };
} }
[HttpPost] [HttpPost]

View File

@ -304,11 +304,12 @@ public class DBContext : DbContext {
builder.Entity<Message>().HasOne(r => r.FromViking) builder.Entity<Message>().HasOne(r => r.FromViking)
.WithMany(e => e.MessageBoard) .WithMany(e => e.MessageBoard)
.HasForeignKey(e => e.FromVikingId); .HasForeignKey(e => e.ToVikingId);
builder.Entity<Message>().HasOne(r => r.ParentMessage) builder.Entity<Message>().HasOne(r => r.ParentMessage)
.WithMany(e => e.Replies) .WithMany(e => e.Replies)
.HasForeignKey(e => e.ParentMessageId); .HasForeignKey(e => e.ParentMessageId)
.OnDelete(DeleteBehavior.SetNull);
// Groups // Groups
builder.Entity<Group>().HasMany(r => r.Vikings) builder.Entity<Group>().HasMany(r => r.Vikings)

View File

@ -10,7 +10,7 @@ public class Message
[Key] [Key]
public int Id { get; set; } public int Id { get; set; }
public int VikingId { get; set; } public int VikingId { get; set; }
public int FromVikingId { get; set; } public int ToVikingId { get; set; }
public int? ParentMessageId { get; set; } public int? ParentMessageId { get; set; }
@ -32,7 +32,7 @@ public class Message
public bool IsNew { get; set; } public bool IsNew { get; set; }
public virtual Viking? Viking { 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 Message? ParentMessage { get; set; }
public virtual ICollection<Message>? Replies { get; set; } public virtual ICollection<Message>? Replies { get; set; }
} }

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Net.Mime;
using sodoff.Model; using sodoff.Model;
using sodoff.Schema; using sodoff.Schema;
using sodoff.Util; using sodoff.Util;
@ -18,18 +19,24 @@ public class MessagingService
{ {
Random rnd = new Random(); // 'ConversationId' and 'QueueId' Random rnd = new Random(); // 'ConversationId' and 'QueueId'
// get current DateTime
DateTime now = DateTime.UtcNow;
// create a new message // create a new message
Model.Message message = new Model.Message Model.Message message = new Model.Message
{ {
ConversationID = rnd.Next(1000, 9999), ConversationID = rnd.Next(1000, 9999),
QueueID = rnd.Next(1000, 9999), QueueID = rnd.Next(1000, 9999),
CreatedAt = DateTime.UtcNow, CreatedAt = now,
LastUpdatedAt = DateTime.UtcNow, LastUpdatedAt = now,
MessageType = type, MessageType = type,
MessageLevel = level, MessageLevel = level,
MessageTypeID = typeID, MessageTypeID = typeID,
Data = content, Data = content,
IsNew = true // immediately mark as new MemberMessage = content,
NonMemberMessage = content,
IsNew = true,
IsDeleted = false
}; };
if (isReply == true && replyMessageID != 0) if (isReply == true && replyMessageID != 0)
@ -47,10 +54,7 @@ public class MessagingService
if(messageToReplyTo.Replies == null) messageToReplyTo.Replies = new List<Model.Message>(); if(messageToReplyTo.Replies == null) messageToReplyTo.Replies = new List<Model.Message>();
// add to list of replies // add to list of replies
messageToReplyTo.Replies.Add(messageToReplyTo); // EF Core should do the rest (hopefully) messageToReplyTo.Replies.Add(messageToReplyTo);
// return message here, do not add another parent message to message board
return message;
} }
} }
@ -105,7 +109,7 @@ public class MessagingService
MessageID = message.Id, MessageID = message.Id,
ConversationID = message.ConversationID ?? 0, ConversationID = message.ConversationID ?? 0,
ReplyToMessageID = message.ParentMessageId, ReplyToMessageID = message.ParentMessageId,
Creator = message.FromViking!.Uid.ToString() ?? "NotFound", Creator = message.Viking!.Uid.ToString() ?? "NotFound",
CreateTime = message.CreatedAt, CreateTime = message.CreatedAt,
UpdateDate = message.LastUpdatedAt, UpdateDate = message.LastUpdatedAt,
MessageType = message.MessageType, MessageType = message.MessageType,