mirror of
https://github.com/SoDOff-Project/sodoff.git
synced 2025-10-11 08:18:49 -07:00
implement `GetCombinedListMessage
and
GetUserMessageQueue
`
change ``Message.FromViking`` to ``Message.ToViking`` set ``OnDelete`` behaviour on replies to ``DeleteBehaviour.SetNull``
This commit is contained in:
parent
6cfe8b7ba6
commit
5295ff7d8e
@ -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]
|
||||
|
@ -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)
|
||||
|
@ -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; }
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user