mirror of
https://github.com/SoDOff-Project/sodoff.git
synced 2025-10-11 16:28:50 -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 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]
|
||||||
|
@ -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)
|
||||||
|
@ -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; }
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user