add system message support

This commit is contained in:
Alan Moon 2025-03-06 12:01:37 -08:00
parent c8c70b220e
commit 7e29d5cd4a

View File

@ -16,19 +16,17 @@ public class MessagingService
this.ctx = ctx; this.ctx = ctx;
} }
public Model.Message AddMessageToViking(Viking viking, Viking? toViking, MessageType messageType, MessageTypeID messageTypeID, MessageLevel messageLevel, string data, string memberMessage = "", string nonMemberMessage = "", bool IsNew = true, bool IsDeleted = false, bool isReply = false, bool isPrivate = false, int parentMessageId = 0) public Model.Message AddMessageToViking(Viking? viking, Viking toViking, MessageType messageType, MessageTypeID messageTypeID, MessageLevel messageLevel, string data, string memberMessage = "", string nonMemberMessage = "", bool IsNew = true, bool IsDeleted = false, bool isReply = false, bool isPrivate = false, int parentMessageId = 0)
{ {
// get execution UTC timestamp // get execution UTC timestamp
DateTime now = DateTime.UtcNow; DateTime now = DateTime.UtcNow;
// for generating ConversationId and QueueId // for generating ConversationId and QueueId
Random rnd = new Random(); Random rnd = new Random();
// construct message // construct message
Model.Message message = new Model.Message Model.Message message = new Model.Message
{ {
Viking = viking,
VikingId = viking.Id,
ToViking = toViking, ToViking = toViking,
ToVikingId = toViking.Id, ToVikingId = toViking.Id,
QueueID = rnd.Next(1000, 9999), QueueID = rnd.Next(1000, 9999),
@ -46,6 +44,16 @@ public class MessagingService
IsPrivate = isPrivate IsPrivate = isPrivate
}; };
if (viking == null)
{
message.Viking = null;
message.VikingId = -1; // -1 = System Message
} else
{
message.Viking = viking;
message.VikingId = viking.Id;
}
if (isReply && parentMessageId > 0) if (isReply && parentMessageId > 0)
{ {
// get message this is in reply to // get message this is in reply to
@ -139,7 +147,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 = msgAuthor.Uid.ToString() ?? "Ghost", Creator = msgAuthor.Uid.ToString() ?? new Guid().ToString(),
CreateTime = message.CreatedAt, CreateTime = message.CreatedAt,
UpdateDate = message.LastUpdatedAt, UpdateDate = message.LastUpdatedAt,
MessageType = message.MessageType.Value, MessageType = message.MessageType.Value,
@ -169,7 +177,7 @@ public class MessagingService
UserMessageQueueID = message.QueueID, UserMessageQueueID = message.QueueID,
MessageID = message.Id, MessageID = message.Id,
MessageTypeID = (int?)message.MessageTypeID, MessageTypeID = (int?)message.MessageTypeID,
FromUserID = msgAuthor.Uid.ToString() ?? "NotFound", FromUserID = msgAuthor.Uid.ToString() ?? new Guid().ToString(),
MemberMessage = message.MemberMessage ?? "NoData", MemberMessage = message.MemberMessage ?? "NoData",
NonMemberMessage = message.NonMemberMessage ?? "NoData", NonMemberMessage = message.NonMemberMessage ?? "NoData",
Data = data Data = data
@ -182,7 +190,7 @@ public class MessagingService
UserMessageQueueID = message.QueueID, UserMessageQueueID = message.QueueID,
MessageID = message.Id, MessageID = message.Id,
MessageTypeID = (int?)message.MessageTypeID, MessageTypeID = (int?)message.MessageTypeID,
FromUserID = msgAuthor.Uid.ToString() ?? "NotFound", FromUserID = msgAuthor.Uid.ToString() ?? new Guid().ToString(),
MemberMessage = message.MemberMessage ?? "NoData", MemberMessage = message.MemberMessage ?? "NoData",
NonMemberMessage = message.NonMemberMessage ?? "NoData", NonMemberMessage = message.NonMemberMessage ?? "NoData",
Data = message.Data Data = message.Data
@ -205,7 +213,7 @@ public class MessagingService
MessageID = reply.Id, MessageID = reply.Id,
ConversationID = reply.ConversationID ?? 0, ConversationID = reply.ConversationID ?? 0,
ReplyToMessageID = reply.ParentMessageId, ReplyToMessageID = reply.ParentMessageId,
Creator = replyAuthor.Uid.ToString() ?? "Ghost", Creator = replyAuthor.Uid.ToString() ?? new Guid().ToString(),
CreateTime = reply.CreatedAt, CreateTime = reply.CreatedAt,
UpdateDate = reply.LastUpdatedAt, UpdateDate = reply.LastUpdatedAt,
MessageType = reply.MessageType.Value, MessageType = reply.MessageType.Value,
@ -252,13 +260,13 @@ public class MessagingService
Viking? msgAuthor = ctx.Vikings.FirstOrDefault(e => e.Id == message.VikingId) ?? new Viking(); Viking? msgAuthor = ctx.Vikings.FirstOrDefault(e => e.Id == message.VikingId) ?? new Viking();
if(message.IsDeleted) { ctx.Messages.Remove(message); continue; } if(message.IsDeleted) { ctx.Messages.Remove(message); continue; }
if(DateTime.Compare(now, message.CreatedAt.AddMinutes(30)) > 0) { message.IsNew = false; continue; } // sometimes clients won't set IsNew flag when updating messages, so do not add messages more than 30 minutes old to response if(DateTime.Compare(now, message.CreatedAt.AddMinutes(30)) > 0 && !showOldMessages) { message.IsNew = false; continue; } // sometimes clients won't set IsNew flag when updating messages, so do not add messages more than 30 minutes old to response
if(!message.IsNew && !showOldMessages) continue; if(!message.IsNew && !showOldMessages) continue;
messageInfos.Add(new MessageInfo messageInfos.Add(new MessageInfo
{ {
MessageID = message.Id, MessageID = message.Id,
UserMessageQueueID = message.QueueID, UserMessageQueueID = message.QueueID,
FromUserID = msgAuthor.Uid.ToString() ?? "NotFound", FromUserID = msgAuthor.Uid.ToString() ?? new Guid().ToString(),
MessageTypeID = (int?)message.MessageTypeID, MessageTypeID = (int?)message.MessageTypeID,
Data = message.Data ?? "NoData", Data = message.Data ?? "NoData",
MemberMessage = message.MemberMessage ?? "NoMessage", MemberMessage = message.MemberMessage ?? "NoMessage",