forked from SoDOff-Project/sodoff
implement `RemoveBuddy
`
modify ``SendMessage`` add message of typeid 21 when reply is made reworks some things in ``BuddyService``
This commit is contained in:
parent
684e8691d8
commit
5bd62186f0
@ -1159,6 +1159,20 @@ public class ContentController : Controller {
|
|||||||
else return Ok(new BuddyActionResult{ Result = BuddyActionResultType.InvalidFriendCode });
|
else return Ok(new BuddyActionResult{ Result = BuddyActionResultType.InvalidFriendCode });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Produces("application/xml")]
|
||||||
|
[Route("ContentWebService.asmx/RemoveBuddy")]
|
||||||
|
[VikingSession]
|
||||||
|
public IActionResult RemoveBuddy(Viking viking, [FromForm] Guid buddyUserId)
|
||||||
|
{
|
||||||
|
// find buddy viking
|
||||||
|
Viking? buddyViking = ctx.Vikings.FirstOrDefault(e => e.Uid == buddyUserId);
|
||||||
|
|
||||||
|
if (buddyViking != null)
|
||||||
|
return Ok(buddyService.RemoveBuddy(viking, buddyViking));
|
||||||
|
else return Ok(false);
|
||||||
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[Produces("application/xml")]
|
[Produces("application/xml")]
|
||||||
[Route("ContentWebService.asmx/ApproveBuddy")]
|
[Route("ContentWebService.asmx/ApproveBuddy")]
|
||||||
@ -1170,7 +1184,7 @@ public class ContentController : Controller {
|
|||||||
|
|
||||||
if (buddyViking != null)
|
if (buddyViking != null)
|
||||||
return Ok(buddyService.UpdateBuddyRelation(viking, buddyViking, BuddyStatus.Approved, BuddyStatus.Approved));
|
return Ok(buddyService.UpdateBuddyRelation(viking, buddyViking, BuddyStatus.Approved, BuddyStatus.Approved));
|
||||||
else return Ok(new BuddyActionResult{ Result = BuddyActionResultType.InvalidFriendCode });
|
else return Ok(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
@ -35,9 +35,22 @@ public class MessagingController : Controller {
|
|||||||
|
|
||||||
// clients (at least older ones) don't send what typeID the message is, its encoded in data
|
// clients (at least older ones) don't send what typeID the message is, its encoded in data
|
||||||
ArrayOfKeyValuePairOfStringString arrayOfKeyValuePairOfStringString = XmlUtil.DeserializeXml<ArrayOfKeyValuePairOfStringString>(data);
|
ArrayOfKeyValuePairOfStringString arrayOfKeyValuePairOfStringString = XmlUtil.DeserializeXml<ArrayOfKeyValuePairOfStringString>(data);
|
||||||
MessageTypeID typeID = (MessageTypeID)int.Parse(arrayOfKeyValuePairOfStringString.KeyValuePairOfStringString![0].Value ?? "0");
|
MessageTypeID typeID = MessageTypeID.Unknown;
|
||||||
|
string typeText = "";
|
||||||
|
|
||||||
var msg = messagingService.AddMessageToViking(viking, toViking, MessageType.Data, typeID, MessageLevel.WhiteList, data, "[[Line1]]=[[{{BuddyUserName}}]] has sent you a {{MessageType}}!", "[[Line1]]=[[{{BuddyUserName}}]] has sent you a {{MessageType}}!");
|
switch(arrayOfKeyValuePairOfStringString.KeyValuePairOfStringString![0].Value)
|
||||||
|
{
|
||||||
|
case "Photo":
|
||||||
|
typeID = MessageTypeID.Photo;
|
||||||
|
typeText = "Photo";
|
||||||
|
break;
|
||||||
|
case "Drawing":
|
||||||
|
typeID = MessageTypeID.GreetingCard;
|
||||||
|
typeText = "Card";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var msg = messagingService.AddMessageToViking(viking, toViking, MessageType.Data, typeID, MessageLevel.WhiteList, data, "[[Line1]]=[[{{BuddyUserName}} has sent you a " + typeText + "!]]", "[[Line1]]=[[{{BuddyUserName}} has sent you a " + typeText + "!]]");
|
||||||
if (msg != null) return Ok(true);
|
if (msg != null) return Ok(true);
|
||||||
else return Ok(false);
|
else return Ok(false);
|
||||||
}
|
}
|
||||||
@ -71,4 +84,25 @@ public class MessagingController : Controller {
|
|||||||
messagingService.RemoveMessage(messageID);
|
messagingService.RemoveMessage(messageID);
|
||||||
return Ok(true);
|
return Ok(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("Messaging/PostTextMessage")]
|
||||||
|
public IActionResult PostTextMessage([FromForm] Guid token, [FromForm] Guid userId, [FromForm] string data, [FromForm] int messageLevel, [FromForm] int replyMessageId)
|
||||||
|
{
|
||||||
|
// check if session is valid
|
||||||
|
Session? session = ctx.Sessions.FirstOrDefault(e => e.ApiToken == token);
|
||||||
|
|
||||||
|
// find viking
|
||||||
|
Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Uid == userId);
|
||||||
|
|
||||||
|
if (session != null && viking != null)
|
||||||
|
{
|
||||||
|
// post text message
|
||||||
|
var message = messagingService.AddMessageToViking(session.Viking, viking, MessageType.Post, MessageTypeID.Messaging, (MessageLevel)messageLevel, data, isReply: replyMessageId > 0, parentMessageId: replyMessageId);
|
||||||
|
|
||||||
|
if (message != null) return Ok(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ok(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,11 +59,11 @@ public class BuddyService
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public BuddyActionResult UpdateBuddyRelation(Viking viking, Viking buddyViking, BuddyStatus buddyStatus1, BuddyStatus buddyStatus2)
|
public bool UpdateBuddyRelation(Viking viking, Viking buddyViking, BuddyStatus buddyStatus1, BuddyStatus buddyStatus2)
|
||||||
{
|
{
|
||||||
// find relation
|
// find relation
|
||||||
Model.Buddy? buddy = ctx.Buddies.Where(e => e.VikingId == viking.Id)
|
Model.Buddy? buddy = ctx.Buddies.Where(e => e.VikingId == viking.Id || e.BuddyVikingId == viking.Id)
|
||||||
.FirstOrDefault(e => e.BuddyVikingId == buddyViking.Id);
|
.FirstOrDefault(e => e.BuddyVikingId == buddyViking.Id || e.VikingId == buddyViking.Id);
|
||||||
|
|
||||||
if (buddy != null)
|
if (buddy != null)
|
||||||
{
|
{
|
||||||
@ -73,39 +73,32 @@ public class BuddyService
|
|||||||
ctx.SaveChanges();
|
ctx.SaveChanges();
|
||||||
|
|
||||||
// return result
|
// return result
|
||||||
return new BuddyActionResult
|
return true;
|
||||||
{
|
} else return false;
|
||||||
Status = buddy.BuddyStatus1,
|
|
||||||
Result = BuddyActionResultType.Success,
|
|
||||||
BuddyUserID = buddyViking.Uid.ToString()
|
|
||||||
};
|
|
||||||
} else return new BuddyActionResult { Result = BuddyActionResultType.Unknown };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveBuddy(Viking viking, Guid buddyUid)
|
public bool RemoveBuddy(Viking viking, Viking buddyViking)
|
||||||
{
|
{
|
||||||
// find buddy viking
|
// find relation
|
||||||
Viking? buddyViking = ctx.Vikings.FirstOrDefault(e => e.Uid == buddyUid);
|
Model.Buddy? buddy = ctx.Buddies.Where(e => e.VikingId == viking.Id || e.BuddyVikingId == viking.Id)
|
||||||
|
.FirstOrDefault(e => e.BuddyVikingId == buddyViking.Id || e.VikingId == buddyViking.Id);
|
||||||
if (buddyViking != null)
|
|
||||||
{
|
|
||||||
// find buddy relationship
|
|
||||||
Model.Buddy? buddy = ctx.Buddies.Where(e => e.VikingId == viking.Id)
|
|
||||||
.FirstOrDefault(e => e.BuddyVikingId == buddyViking.Id);
|
|
||||||
|
|
||||||
if (buddy != null)
|
if (buddy != null)
|
||||||
|
{
|
||||||
// remove it
|
// remove it
|
||||||
ctx.Buddies.Remove(buddy);
|
ctx.Buddies.Remove(buddy);
|
||||||
else throw new InvalidOperationException("Cannot Remove A Buddy That Doesn't Exist");
|
|
||||||
|
|
||||||
ctx.SaveChanges();
|
ctx.SaveChanges();
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BuddyList ConstructBuddyList(Viking viking)
|
public BuddyList ConstructBuddyList(Viking viking)
|
||||||
{
|
{
|
||||||
// get all relationships viking has made
|
// get all relationships viking has made
|
||||||
List<Model.Buddy> buddies = ctx.Buddies.Where(e => e.BuddyVikingId == viking.Id).ToList();
|
List<Model.Buddy> buddies = ctx.Buddies.Where(e => e.VikingId == viking.Id || e.BuddyVikingId == viking.Id)
|
||||||
|
.ToList();
|
||||||
List<Schema.Buddy> schemaBuddies = new();
|
List<Schema.Buddy> schemaBuddies = new();
|
||||||
foreach (var buddy in buddies)
|
foreach (var buddy in buddies)
|
||||||
{
|
{
|
||||||
|
@ -44,7 +44,7 @@ public class MessagingService
|
|||||||
IsNew = IsNew
|
IsNew = IsNew
|
||||||
};
|
};
|
||||||
|
|
||||||
if (isReply)
|
if (isReply && parentMessageId > 0)
|
||||||
{
|
{
|
||||||
// get message this is in reply to
|
// get message this is in reply to
|
||||||
Model.Message? messageToReplyTo = ctx.Messages.FirstOrDefault(e => e.Id == parentMessageId);
|
Model.Message? messageToReplyTo = ctx.Messages.FirstOrDefault(e => e.Id == parentMessageId);
|
||||||
@ -54,6 +54,9 @@ public class MessagingService
|
|||||||
message.ParentMessage = messageToReplyTo;
|
message.ParentMessage = messageToReplyTo;
|
||||||
message.ParentMessageId = messageToReplyTo.Id;
|
message.ParentMessageId = messageToReplyTo.Id;
|
||||||
message.ConversationID = messageToReplyTo.ConversationID;
|
message.ConversationID = messageToReplyTo.ConversationID;
|
||||||
|
|
||||||
|
// add a message to the replier's board saying a thread update has occured (if reply isn't to self)
|
||||||
|
if (message.VikingId != message.ToVikingId) AddMessageToViking(message.Viking, message.ToViking, MessageType.Data, MessageTypeID.ThreadUpdate, MessageLevel.WhiteList, "[[Line1]]=[[{{BuddyUserName}} Replied To Your Message In {{BuddyUserName}}'s Message Board!]]", "[[Line1]]=[[{{BuddyUserName}} Replied To Your Message In {{BuddyUserName}}'s Message Board!]]", "[[Line1]]=[[{{BuddyUserName}} Replied To Your Message In {{BuddyUserName}}'s Message Board!]]");
|
||||||
} else throw new InvalidOperationException("Tried To Reply To A Message That Doesn't Exist");
|
} else throw new InvalidOperationException("Tried To Reply To A Message That Doesn't Exist");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,6 +96,8 @@ public class MessagingService
|
|||||||
message.IsDeleted = IsDeleted;
|
message.IsDeleted = IsDeleted;
|
||||||
message.LastUpdatedAt = now;
|
message.LastUpdatedAt = now;
|
||||||
|
|
||||||
|
ctx.SaveChanges();
|
||||||
|
|
||||||
return message;
|
return message;
|
||||||
} else return null;
|
} else return null;
|
||||||
}
|
}
|
||||||
@ -242,7 +247,8 @@ 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(!showOldMessages && message.IsNew && DateTime.Compare(message.CreatedAt.AddMinutes(30), now) > 0 || message.IsDeleted) 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.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(!message.IsNew && !showOldMessages) continue;
|
if(!message.IsNew && !showOldMessages) continue;
|
||||||
messageInfos.Add(new MessageInfo
|
messageInfos.Add(new MessageInfo
|
||||||
{
|
{
|
||||||
@ -256,6 +262,9 @@ public class MessagingService
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// save any database changes
|
||||||
|
ctx.SaveChanges();
|
||||||
|
|
||||||
// add list as array to response
|
// add list as array to response
|
||||||
response.MessageInfo = messageInfos.ToArray();
|
response.MessageInfo = messageInfos.ToArray();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user