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;
}
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
DateTime now = DateTime.UtcNow;
// for generating ConversationId and QueueId
Random rnd = new Random();
// construct message
Model.Message message = new Model.Message
{
Viking = viking,
VikingId = viking.Id,
ToViking = toViking,
ToVikingId = toViking.Id,
QueueID = rnd.Next(1000, 9999),
@ -46,6 +44,16 @@ public class MessagingService
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)
{
// get message this is in reply to
@ -139,7 +147,7 @@ public class MessagingService
MessageID = message.Id,
ConversationID = message.ConversationID ?? 0,
ReplyToMessageID = message.ParentMessageId,
Creator = msgAuthor.Uid.ToString() ?? "Ghost",
Creator = msgAuthor.Uid.ToString() ?? new Guid().ToString(),
CreateTime = message.CreatedAt,
UpdateDate = message.LastUpdatedAt,
MessageType = message.MessageType.Value,
@ -169,7 +177,7 @@ public class MessagingService
UserMessageQueueID = message.QueueID,
MessageID = message.Id,
MessageTypeID = (int?)message.MessageTypeID,
FromUserID = msgAuthor.Uid.ToString() ?? "NotFound",
FromUserID = msgAuthor.Uid.ToString() ?? new Guid().ToString(),
MemberMessage = message.MemberMessage ?? "NoData",
NonMemberMessage = message.NonMemberMessage ?? "NoData",
Data = data
@ -182,7 +190,7 @@ public class MessagingService
UserMessageQueueID = message.QueueID,
MessageID = message.Id,
MessageTypeID = (int?)message.MessageTypeID,
FromUserID = msgAuthor.Uid.ToString() ?? "NotFound",
FromUserID = msgAuthor.Uid.ToString() ?? new Guid().ToString(),
MemberMessage = message.MemberMessage ?? "NoData",
NonMemberMessage = message.NonMemberMessage ?? "NoData",
Data = message.Data
@ -205,7 +213,7 @@ public class MessagingService
MessageID = reply.Id,
ConversationID = reply.ConversationID ?? 0,
ReplyToMessageID = reply.ParentMessageId,
Creator = replyAuthor.Uid.ToString() ?? "Ghost",
Creator = replyAuthor.Uid.ToString() ?? new Guid().ToString(),
CreateTime = reply.CreatedAt,
UpdateDate = reply.LastUpdatedAt,
MessageType = reply.MessageType.Value,
@ -252,13 +260,13 @@ public class MessagingService
Viking? msgAuthor = ctx.Vikings.FirstOrDefault(e => e.Id == message.VikingId) ?? new Viking();
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;
messageInfos.Add(new MessageInfo
{
MessageID = message.Id,
UserMessageQueueID = message.QueueID,
FromUserID = msgAuthor.Uid.ToString() ?? "NotFound",
FromUserID = msgAuthor.Uid.ToString() ?? new Guid().ToString(),
MessageTypeID = (int?)message.MessageTypeID,
Data = message.Data ?? "NoData",
MemberMessage = message.MemberMessage ?? "NoMessage",