Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

RoomService.cs 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using Diligent.WebAPI.Business.MongoServices;
  2. using Diligent.WebAPI.Data;
  3. using Diligent.WebAPI.Data.Entities;
  4. using Diligent.WebAPI.Data.HelperModels;
  5. using Microsoft.Extensions.Options;
  6. using MongoDB.Driver;
  7. namespace Diligent.WebAPI.Business.Services
  8. {
  9. public class RoomService : BaseMongo<Room>
  10. {
  11. public RoomService(IOptions<WebApiDatabaseSettings> webApiDatabaseSettings) :
  12. base(webApiDatabaseSettings, "Room")
  13. { }
  14. public async Task<List<Room>> GetRoomsAsync() =>
  15. await _mongoCollection.Find(_ => true).ToListAsync();
  16. public async Task CreateRoomAsync(Room room) =>
  17. await _mongoCollection.InsertOneAsync(room);
  18. public async Task<bool> AddCustomerToRoom(string customerId,string roomId)
  19. {
  20. var room = await _mongoCollection.Find(k => k.Id == roomId).FirstOrDefaultAsync();
  21. if (room is null)
  22. return false;
  23. room.Customers.Add(new CustomerDTO { CustomerId = customerId, DateOfEnteringRoom = DateTime.Now});
  24. await _mongoCollection.ReplaceOneAsync(x => x.Id == roomId, room);
  25. return true;
  26. }
  27. public async Task<Room> GetRoomAsync(string roomId) =>
  28. await _mongoCollection.Find(r => r.Id == roomId).FirstOrDefaultAsync();
  29. public async Task<bool> AddMessage(string roomId,Message message)
  30. {
  31. var room = await GetRoomAsync(roomId);
  32. if (room is null)
  33. return false;
  34. room.Messages.Add(message);
  35. await _mongoCollection.ReplaceOneAsync(x => x.Id == roomId, room);
  36. return true;
  37. }
  38. public async Task<List<Message>> GetMessagesForSpecificRoom(string roomId)
  39. {
  40. var room = await _mongoCollection.Find(r => r.Id == roomId).FirstOrDefaultAsync();
  41. if (room is null) return new List<Message>();
  42. return room.Messages;
  43. }
  44. public async Task<List<Room>> GetRoomsForSupport(string supportId) =>
  45. await _mongoCollection.Find(k => k.CreatedBy == supportId).ToListAsync();
  46. public async Task<bool> LeaveChatRoom(string roomId, string userId)
  47. {
  48. var room = await GetRoomAsync(roomId);
  49. if (room == null)
  50. {
  51. return false;
  52. }
  53. var userConnection = room.Customers.Where(x => x.CustomerId == userId).FirstOrDefault();
  54. if (userConnection == null)
  55. {
  56. return false;
  57. }
  58. room.Customers.Remove(userConnection);
  59. await _mongoCollection.ReplaceOneAsync(x => x.Id == roomId, room);
  60. return true;
  61. }
  62. public async Task<List<Room>> GetRoomsWhichSupportCreated(string supportId) =>
  63. await _mongoCollection.Find(k => k.CreatedBy == supportId).ToListAsync();
  64. public async Task<List<Room>?> GetRoomsWithFilteredMessages(string customerId)
  65. {
  66. var rooms = await GetRoomsAsync();
  67. foreach (var room in rooms)
  68. {
  69. List<Message> msg = new();
  70. var customer = room.Customers.Where(c => c.CustomerId == customerId).FirstOrDefault();
  71. if (customer is not null)
  72. {
  73. foreach (var message in room.Messages)
  74. {
  75. if (message.CreatedAtUtc >= customer.DateOfEnteringRoom)
  76. msg.Add(message);
  77. }
  78. room.Messages = msg;
  79. }
  80. else
  81. {
  82. room.Messages = new List<Message>();
  83. }
  84. }
  85. return rooms;
  86. }
  87. }
  88. }