public async Task<ServiceResult> SubmitReview(ReviewDto review) { var result = new ServiceResult(); try { var provider = await DbContext.GetProviderByProviderIdAsync(review.ProviderId); var member = await DbContext.GetMemberByMemberIdAsync(review.MemberId); var rev = new Review { Id = review.ReviewId, Member = member, Provider = provider, CreateDt = review.CreateDt, Feedback = review.Feedback, Mark = review.Mark, MemberId = member.Id, ProviderId = provider.Id }; await DbContext.SaveReview(rev); result.Success = true; result.Messages = new List<string> { "Your review is successfully submited." }; } catch (Exception ex) { result.Success = false; result.Messages = new List<string> { "Internal server error.", $"Exception is: {ex.ToString()}" }; } return result; }
public async Task<ServiceResult> SubmitRequest(RequestDto model, MemberDto requestor) { var result = new ServiceResult(); try { model.CreatedByMember = requestor.MemberId; if (model.DueEndDt <= model.DueStartDt) { result.Success = false; result.Messages = new List<string> { "End date is bigger than start date. Please change." }; return result; } var activeStatuses = new[] { RequestStatus.Locked, RequestStatus.Started, RequestStatus.Pending }; var memberRequests = (await DbContext.GetRequestsByMemberIdAsync(requestor.MemberId)).Where(c => c.Status != RequestStatus.Closed).ToList(); if (memberRequests.Any(memberRequest => (model.DueStartDt >= memberRequest.DueStartDt && model.DueStartDt <= memberRequest.DueEndDt || model.DueEndDt > memberRequest.DueStartDt && model.DueEndDt <= memberRequest.DueEndDt) && activeStatuses.Contains(memberRequest.Status))) { result.Success = false; result.Messages = new List<string> { "You have another request with crossing time interval please change time intervals." }; return result; } var member = await DbContext.GetMemberByMemberIdAsync(model.CreatedByMember); var assignedToProvider = await DbContext.GetProviderByProviderIdAsync(model.AssignedProviderId); var request = new Request { Comment = model.Comment, AssignedToProviderId = model.AssignedProviderId, AssignedToProvider = assignedToProvider, CreatedByMember = model.CreatedByMember, CreatedDt = DateTime.Now, DueEndDt = model.DueEndDt, DueStartDt = model.DueStartDt, MemberCreator = member, Status = model.Status, ModifiedDt = DateTime.Now, RequestDescription = model.RequestDescription, }; await DbContext.SaveRequest(request); result.Success = true; result.Messages = new List<string> { "Your request is successfully submited." }; } catch (Exception ex) { result.Success = false; result.Messages = new List<string> { "Internal server error.", $"Exception is: {ex.ToString()}" }; } return result; }
public async Task<ServiceResult> LockRequestByIdAsync(int reqId, string userId) { var result = new ServiceResult(); try { var provider = await DbContext.GetProviderByUserIdAsync(userId); var request = await DbContext.GetRequestByIdAsync(reqId); var providerRequests = await GetRequestsByProviderIdAsync(provider.Id); foreach (var providerRequest in providerRequests) { if (providerRequest.Status == RequestStatus.Locked && providerRequest.DueEndDt <= DateTime.Now) { // Colse this request and report an error. providerRequest.Status = RequestStatus.CanceledByMember; await SaveRequest(providerRequest); result.Success = false; result.Messages = new List<string> { "You cannot start an outdated consultation." }; } if (providerRequest.Status == RequestStatus.Locked && providerRequest.DueEndDt > DateTime.Now && providerRequest.DueStartDt <= DateTime.Now) { result.Success = false; result.Messages = new List<string> { "You cannot lock this request you have ongoing locked requests." }; } } if (request.DueEndDt <= DateTime.Now) { request.Status = RequestStatus.Closed; await DbContext.SaveRequest(request); result.Success = false; result.Messages = new List<string> { "You cannot start an outdated consultation. Please create new request. This request will be automatically closed." }; } request.Status = RequestStatus.Locked; request.LockedByProvider = provider.Id; request.LockeDt = DateTime.Now; request.RequestProvider = provider; await DbContext.SaveRequest(request); result.Success = true; result.Messages = new List<string> { "The request is successfully locked." }; } catch (Exception ex) { result.Success = false; result.Messages = new List<string> { "Internal server error.", $"Exception is: {ex.ToString()}" }; } return result; }