public async Task <GetConcurrentWithoutHostNotPublishedIdsResponse> GetConcurrentWithoutHostNotPublishedIdsAsync(GetConcurrentWithoutHostNotPublishedIdsRequest request, [CallerMemberName] string callerMemberName = null) => await ExecutePostAsync <GetConcurrentWithoutHostNotPublishedIdsResponse, GetConcurrentWithoutHostNotPublishedIdsRequest>( path : "/api/message/get-concurrent-without-host-not-published-ids", request : request, callerMemberName : callerMemberName);
public async Task <GetConcurrentWithoutHostNotPublishedIdsResponse> GetConcurrentWithoutHostNotPublishedIdsAsync([FromBody] GetConcurrentWithoutHostNotPublishedIdsRequest request) { request.RequiredNotNull(nameof(request)); request.RequiredArgumentNotNull(() => request.ApplicationName); request.RequiredArgumnetNotNullAndNotDefaultValue <GetConcurrentWithoutHostNotPublishedIdsRequest, int>(() => request.RowsCount); var concurrentSelectDelayInMilliseconds = request.ConcurrentSelectDelayInMilliseconds ?? MessageGlossary.DefaultConcurrentSelectLockDelayInMilliseconds; var concurrentSelectLockEndDateTime = _dateTimeService.GetDateTimeNow().AddMilliseconds(-concurrentSelectDelayInMilliseconds); var createdDelayInMilliseconds = request.CreatedDelayInMilliseconds ?? MessageGlossary.DefaultCreatedDelayInMilliseconds; var createdDelayEndDateTime = _dateTimeService.GetDateTimeNow().AddMilliseconds(-createdDelayInMilliseconds); var rowsWithConcurrentRowsIds = await _messageRepository.GetNotPublishedIdsAsync( createdDelayEndDateTime : createdDelayEndDateTime, topRowsCount : request.RowsCount, applicationName : request.ApplicationName, host : null, messageTypeFullName : request.MessageTypeFullName, concurrentSelectLockEndDateTime : concurrentSelectLockEndDateTime); var res = new List <Guid>(); foreach (var iConcurrentRowId in rowsWithConcurrentRowsIds) { var dateNow = _dateTimeService.GetDateTimeNow(); var concurrentMessage = await _messageRepository.GetByIdAsync(iConcurrentRowId); if (concurrentMessage.ConcurrentSelectLockDateTime.HasValue == true) { var concurrentSelectLockDateTimePlusDelay = concurrentMessage.ConcurrentSelectLockDateTime.Value.AddMilliseconds(concurrentSelectDelayInMilliseconds); if (concurrentSelectLockDateTimePlusDelay > dateNow) { continue; } } concurrentMessage.ConcurrentSelectLockDateTime = dateNow; try { await _messageRepository.UpdateAsync(concurrentMessage); res.Add(iConcurrentRowId); } catch (Exception exc) { continue; } } return(new GetConcurrentWithoutHostNotPublishedIdsResponse { Ids = res }); }