public async Task <UserPreferenceV1Result> CreateUserPreference([FromBody] UpsertUserPreferenceRequest request, [FromQuery] bool allowUpdate = false) { var methodName = $"{nameof(CreateUserPreference)}"; Logger.LogInformation($"{methodName} request: {0}", JsonConvert.SerializeObject(request)); request.TargetUserUID = ValidateUserUid(request.TargetUserUID); UserPreferenceV1Result result = null; var existing = await PreferenceRepo.GetUserPreference(request.TargetUserUID.Value, request.PreferenceKeyName); if (existing == null) { result = await WithServiceExceptionTryExecuteAsync(() => RequestExecutorContainerFactory .Build <CreateUserPreferenceExecutor>(LoggerFactory, ServiceExceptionHandler, PreferenceRepo) .ProcessAsync(AutoMapperUtility.Automapper.Map <CreateUserPreferenceEvent>(request)) ) as UserPreferenceV1Result; } else if (allowUpdate) { result = await WithServiceExceptionTryExecuteAsync(() => RequestExecutorContainerFactory .Build <UpdateUserPreferenceExecutor>(LoggerFactory, ServiceExceptionHandler, PreferenceRepo) .ProcessAsync(AutoMapperUtility.Automapper.Map <UpdateUserPreferenceEvent>(request)) ) as UserPreferenceV1Result; } else { ServiceExceptionHandler.ThrowServiceException(HttpStatusCode.BadRequest, 13); } Logger.LogResult(methodName, JsonConvert.SerializeObject(request), result); return(result); }
public async Task ValidateCreate_ExistingNoUpdate() { const string keyName = "some key"; var userUid = Guid.NewGuid(); var prefKeyUid = Guid.NewGuid(); var userPrefDatabase = new UserPrefKeyDataModel { KeyName = keyName, PreferenceKeyUID = prefKeyUid.ToString(), PreferenceJson = "some json", SchemaVersion = "1.0" }; mockPrefRepo.Setup(p => p.GetUserPreference(userUid, keyName)) .ReturnsAsync(userPrefDatabase); var request = new UpsertUserPreferenceRequest { PreferenceJson = "some new json", PreferenceKeyUID = prefKeyUid, PreferenceKeyName = userPrefDatabase.KeyName, SchemaVersion = userPrefDatabase.SchemaVersion, TargetUserUID = userUid }; var controller = CreatePreferencesController(userUid.ToString(), false); var ex = await Assert.ThrowsAsync <ServiceException>(async() => await controller.CreateUserPreference(request)) as ServiceException; Assert.Equal(HttpStatusCode.BadRequest, ex.Code); var result = ex.GetResult; Assert.Equal(2013, result.Code); Assert.Equal("User preference already exists. ", result.Message); }
/// <summary> /// Use the request to construct the expected result /// </summary> private UserPreferenceV1Result ConstructExpectedResult(UpsertUserPreferenceRequest request) { var expectedUserPref = new UserPreferenceV1Result(); expectedUserPref.PreferenceKeyName = request.PreferenceKeyName; expectedUserPref.PreferenceKeyUID = request.PreferenceKeyUID.Value; expectedUserPref.SchemaVersion = request.SchemaVersion; expectedUserPref.PreferenceJson = request.PreferenceJson; return(expectedUserPref); }
public async Task <UserPreferenceV1Result> UpdateUserPreference([FromBody] UpsertUserPreferenceRequest request) { var methodName = $"{nameof(UpdateUserPreference)}"; Logger.LogInformation($"{methodName} request: {0}", JsonConvert.SerializeObject(request)); request.TargetUserUID = ValidateUserUid(request.TargetUserUID); var result = await WithServiceExceptionTryExecuteAsync(() => RequestExecutorContainerFactory .Build <UpdateUserPreferenceExecutor>(LoggerFactory, ServiceExceptionHandler, PreferenceRepo) .ProcessAsync(AutoMapperUtility.Automapper.Map <UpdateUserPreferenceEvent>(request)) ) as UserPreferenceV1Result; Logger.LogResult(methodName, JsonConvert.SerializeObject(request), result); return(result); }
public void MapUserPrefRequestToUpdateUserPrefEvent() { var request = new UpsertUserPreferenceRequest { TargetUserUID = Guid.NewGuid(), PreferenceKeyUID = Guid.NewGuid(), PreferenceKeyName = "some preference key", PreferenceJson = "some json string here", SchemaVersion = "1.0" }; var result = AutoMapperUtility.Automapper.Map <UpdateUserPreferenceEvent>(request); Assert.Equal(request.TargetUserUID, result.UserUID); Assert.Equal(request.PreferenceKeyUID, result.PreferenceKeyUID); Assert.Equal(request.PreferenceKeyName, result.PreferenceKeyName); Assert.Equal(request.PreferenceJson, result.PreferenceJson); Assert.Equal(request.SchemaVersion, result.SchemaVersion); }
/// <summary> /// Create an instance of the master data events. Convert to JSON. /// </summary> /// <param name="eventObject">event to be published</param> /// <returns>json string with event serialized</returns> private string BuildEventIntoObject(dynamic eventObject) { var jsonString = string.Empty; string eventType = eventObject.EventType; switch (eventType) { case "CreateUserPreferenceRequest": case "UpdateUserPreferenceRequest": var request = new UpsertUserPreferenceRequest(); if (HasProperty(eventObject, "TargetUserUID")) { request.TargetUserUID = Guid.Parse(eventObject.TargetUserUID); } if (HasProperty(eventObject, "SchemaVersion")) { request.SchemaVersion = eventObject.SchemaVersion; } if (HasProperty(eventObject, "PreferenceJson")) { request.PreferenceJson = eventObject.PreferenceJson; } if (HasProperty(eventObject, "PreferenceKeyName")) { request.PreferenceKeyName = eventObject.PreferenceKeyName; } if (HasProperty(eventObject, "PreferenceKeyUID")) { request.PreferenceKeyUID = Guid.Parse(eventObject.PreferenceKeyUID); } jsonString = JsonConvert.SerializeObject(request, JsonSettings); break; case "CreatePreferenceKeyEvent": var createPrefKeyEvent = new CreatePreferenceKeyEvent { PreferenceKeyName = eventObject.PreferenceKeyName, PreferenceKeyUID = Guid.Parse(eventObject.PreferenceKeyUID) }; jsonString = JsonConvert.SerializeObject(createPrefKeyEvent, JsonSettings); break; case "UpdatePreferenceKeyEvent": var updatePrefKeyEvent = new UpdatePreferenceKeyEvent { PreferenceKeyName = eventObject.PreferenceKeyName, PreferenceKeyUID = Guid.Parse(eventObject.PreferenceKeyUID) }; jsonString = JsonConvert.SerializeObject(updatePrefKeyEvent, JsonSettings); break; case "DeletePreferenceKeyEvent": var deletePrefKeyEvent = new DeletePreferenceKeyEvent { PreferenceKeyUID = Guid.Parse(eventObject.PreferenceKeyUID) }; jsonString = JsonConvert.SerializeObject(deletePrefKeyEvent, JsonSettings); break; } return(jsonString); }