< Summary

Information
Class: Services.DataServices.OzonChatOrderDataServices
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/DataServices/OzonChatOrderDataServices.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 70
Coverable lines: 70
Total lines: 203
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 8
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/DataServices/OzonChatOrderDataServices.cs

#LineLine coverage
 1using OzonDomains.Models;
 2using OzonRepositories.Data;
 3
 4namespace Services.DataServices
 5{
 6    public class OzonChatOrderDataServices : IDataServices
 7    {
 8        private readonly OzonChatOrderRepository _repository;
 9
 010        public OzonChatOrderDataServices(OzonChatOrderRepository repository)
 11        {
 012            _repository = repository;
 013        }
 14
 15        public async Task<int> Add(OzonChatOrder value)
 16        {
 017            return await _repository.Add(value);
 018        }
 19
 20        public async Task<int> Delete(OzonChatOrder value)
 21        {
 022            return await _repository.Delete(value);
 023        }
 24
 25        public async Task<List<OzonChatOrder>> Get()
 26        {
 027            return await _repository.Get();
 028        }
 29
 30        public async Task<OzonChatOrder?> GetAsync(int id)
 31        {
 032            return await _repository.GetAsync(id);
 033        }
 34
 35        public async Task<OzonChatOrder?> GetAsync(OzonChatOrder value)
 36        {
 037            return await _repository.GetAsync(value);
 038        }
 39
 40        public async Task<int> Update(OzonChatOrder value)
 41        {
 042            return await _repository.Update(value);
 043        }
 44
 45        public async Task<int> SaveChanges()
 46        {
 047            return await _repository.SaveChanges();
 048        }
 49
 50        /// <summary>
 51        /// Получить запись по ChatId и OrderId
 52        /// </summary>
 53        public async Task<OzonChatOrder?> GetByChatAndOrderAsync(string chatId, int orderId)
 54        {
 055            return await _repository.GetByChatAndOrderAsync(chatId, orderId);
 056        }
 57
 58        /// <summary>
 59        /// Получить все чаты для конкретного заказа
 60        /// </summary>
 61        public async Task<List<OzonChatOrder>> GetByOrderIdAsync(int orderId)
 62        {
 063            return await _repository.GetByOrderIdAsync(orderId);
 064        }
 65
 66        /// <summary>
 67        /// Получить все заказы для конкретного чата
 68        /// </summary>
 69        public async Task<List<OzonChatOrder>> GetByChatIdAsync(string chatId)
 70        {
 071            return await _repository.GetByChatIdAsync(chatId);
 072        }
 73
 74        /// <summary>
 75        /// Получить все чаты клиента с непрочитанными сообщениями
 76        /// </summary>
 77        public async Task<List<OzonChatOrder>> GetUnreadByClientIdAsync(int clientId)
 78        {
 079            return await _repository.GetUnreadByClientIdAsync(clientId);
 080        }
 81
 82        /// <summary>
 83        /// Получить общее количество непрочитанных сообщений по клиенту
 84        /// </summary>
 85        public async Task<int> GetTotalUnreadCountByClientIdAsync(int clientId)
 86        {
 087            return await _repository.GetTotalUnreadCountByClientIdAsync(clientId);
 088        }
 89
 90        /// <summary>
 91        /// Получить все чаты с непрочитанными сообщениями
 92        /// </summary>
 93        public async Task<List<OzonChatOrder>> GetAllUnreadAsync()
 94        {
 095            return await _repository.GetAllUnreadAsync();
 096        }
 97
 98        /// <summary>
 99        /// Получить информацию о чатах для списка заказов
 100        /// </summary>
 101        public async Task<Dictionary<int, (bool HasChat, int UnreadCount, string? ChatId)>> GetChatInfoByOrderIdsAsync(L
 102        {
 0103            return await _repository.GetChatInfoByOrderIdsAsync(orderIds);
 0104        }
 105
 106        /// <summary>
 107        /// Обновить количество непрочитанных сообщений
 108        /// </summary>
 109        public async Task<int> UpdateUnreadCountAsync(string chatId, int orderId, int unreadCount)
 110        {
 0111            return await _repository.UpdateUnreadCountAsync(chatId, orderId, unreadCount);
 0112        }
 113
 114        /// <summary>
 115        /// Обновить информацию о последнем сообщении
 116        /// </summary>
 117        public async Task<int> UpdateLastMessageAsync(string chatId, int orderId, DateTime messageDate,
 118            string messageText, bool fromCustomer)
 119        {
 0120            return await _repository.UpdateLastMessageAsync(chatId, orderId, messageDate, messageText, fromCustomer);
 0121        }
 122
 123        /// <summary>
 124        /// Получить чат по номеру отправления
 125        /// </summary>
 126        public async Task<OzonChatOrder?> GetByPostingNumberAsync(string postingNumber)
 127        {
 0128            return await _repository.GetByPostingNumberAsync(postingNumber);
 0129        }
 130
 131        /// <summary>
 132        /// Мягкое удаление (деактивация)
 133        /// </summary>
 134        public async Task<int> SoftDeleteAsync(long id)
 135        {
 0136            return await _repository.SoftDeleteAsync(id);
 0137        }
 138
 139        /// <summary>
 140        /// Создать или обновить связь чата с заказом
 141        /// </summary>
 142        public async Task<OzonChatOrder> CreateOrUpdateAsync(string chatId, int orderId, int clientId,
 143            string? postingNumber = null, int unreadCount = 0, string? chatStatus = null, string? chatType = null)
 144        {
 0145            var existing = await _repository.GetByChatAndOrderAsync(chatId, orderId);
 146
 0147            if (existing != null)
 148            {
 0149                existing.UnreadMessagesCount = unreadCount;
 0150                existing.ChatStatus = chatStatus ?? existing.ChatStatus;
 0151                existing.ChatType = chatType ?? existing.ChatType;
 0152                existing.PostingNumber = postingNumber ?? existing.PostingNumber;
 0153                existing.UpdatedAt = DateTime.UtcNow;
 154
 0155                await _repository.Update(existing);
 0156                return existing;
 157            }
 158            else
 159            {
 0160                var newChatOrder = new OzonChatOrder
 0161                {
 0162                    ChatId = chatId,
 0163                    OrderId = orderId,
 0164                    ClientId = clientId,
 0165                    PostingNumber = postingNumber,
 0166                    UnreadMessagesCount = unreadCount,
 0167                    ChatStatus = chatStatus,
 0168                    ChatType = chatType,
 0169                    IsActive = true,
 0170                    CreatedAt = DateTime.UtcNow,
 0171                    UpdatedAt = DateTime.UtcNow
 0172                };
 173
 0174                await _repository.Add(newChatOrder);
 0175                return newChatOrder;
 176            }
 0177        }
 178
 179        /// <summary>
 180        /// Поиск чатов по номеру отправления
 181        /// </summary>
 182        public async Task<List<OzonChatOrder>> SearchByPostingNumberAsync(string query, int clientId = 0, int limit = 50
 183        {
 0184            return await _repository.SearchByPostingNumberAsync(query, clientId, limit);
 0185        }
 186
 187        /// <summary>
 188        /// Получить записи чатов по списку ChatId
 189        /// </summary>
 190        public async Task<List<OzonChatOrder>> GetByChatIdsAsync(List<string> chatIds, int clientId = 0)
 191        {
 0192            return await _repository.GetByChatIdsAsync(chatIds, clientId);
 0193        }
 194
 195        /// <summary>
 196        /// Получить уникальные номера отправлений для подсказок
 197        /// </summary>
 198        public async Task<List<string>> GetDistinctPostingNumbersAsync(string query, int clientId = 0, int limit = 20)
 199        {
 0200            return await _repository.GetDistinctPostingNumbersAsync(query, clientId, limit);
 0201        }
 202    }
 203}