public bool ProcessRequest(IUserSessionRequest <IUserSessionData> request, out IResponse response) { ErrorMessage error; if (!_validator.IsValid(request, out error)) { response = new UserSessionResponse().SetErrorResponse(error); return(false); } if (!_sessionRequestProcessor.TryProcess(request, out response) && response != null) { return(false); } var requestType = request.RequestType; if (request.RequestType == RequestType.Read || request.RequestType == RequestType.ReadAll) { response = ReadFromState(request.Payload ?? (IUserSessionData)Activator.CreateInstance(request.PayloadType)); } else { ApplyToState(requestType, response); } return(true); }
public bool TryProcess(IUserSessionRequest <IUserSessionData> request, out IResponse response) { switch (request.RequestType) { case RequestType.Create: return(TryPersistRecord(request.Payload, out response)); case RequestType.Update: return(TryUpdateRecord(request.Payload, out response)); case RequestType.Delete: return(TryDeleteRecord(request.Payload, out response)); case RequestType.Read: case RequestType.ReadAll: { //There's no real processing to do here response = null; return(true); } default: { var errorMessage = new ErrorMessage(ErrorCode.RequestTypeNotSupported); response = new UserSessionResponse().SetErrorResponse(errorMessage); return(false); } } }
public bool IsValid(IUserSessionRequest <IUserSessionData> request, out ErrorMessage errorMessage) { errorMessage = null; var requestData = request.Payload; var requestUserId = request.UserId; if (!requestUserId.HasValue || requestUserId != _user.UserId) { errorMessage = new ErrorMessage(ErrorCode.UserSessionNotFound); return(false); } if (requestData == null && request.RequestType == RequestType.ReadAll) { //This is a request for all data of a particular kind and requires no validation return(true); } if (requestData is NopePet) { return(_petRegistrationValidator.IsValid(_user, (NopePet)request.Payload, out errorMessage)); } if (requestData is UserPetCareAction) { var petCareActionData = (UserPetCareAction)requestData; return(IsUsersPet(petCareActionData.PetId, requestUserId.Value, out errorMessage) && _petCareActionValidator.IsValid(_user, petCareActionData, out errorMessage)); } errorMessage = new ErrorMessage(ErrorCode.RequestTypeNotSupported); return(false); }