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 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]

View File

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

View File

@ -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<Message>? Replies { get; set; }
}

View File

@ -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<Model.Message>();
// 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,