public virtual async Task <IActionResult> UpdateObjectInstance( [FromBody][NotNull] TInstanceTransportModelType model, [FromRoute(Name = "id")] int objectId, [FromServices][NotNull] TInstanceRepositoryType instanceObjectRepository, [FromServices][NotNull] ITypeConverterProvider <TInstanceTransportModelType, TInstanceEntryModelType> networkToTableConverter) { if (model == null) { throw new ArgumentNullException(nameof(model)); } if (instanceObjectRepository == null) { throw new ArgumentNullException(nameof(instanceObjectRepository)); } if (networkToTableConverter == null) { throw new ArgumentNullException(nameof(networkToTableConverter)); } //It's TRUE that they should be sending a valid GUID. //But it doesn't matter, it's not this action's responsibility to deal with it. //if(model.Guid.EntryId != creatureId) // return BadRequest(); TInstanceEntryModelType entryModel = await instanceObjectRepository.RetrieveAsync(objectId); //The idea here is we CONVERT the incoming data model to the table model type //and then we tell the table model type it needs to update. entryModel.Update(networkToTableConverter.Convert(model)); //Then we save it. await instanceObjectRepository.UpdateAsync(objectId, entryModel); return(Ok()); }
public async Task <IActionResult> GetObjectTemplate([FromRoute(Name = "id")] int objectTemplateId, [FromServices][NotNull] TInstanceRepositoryType objectTemplateRepository, [FromServices][NotNull] ITypeConverterProvider <TTemplateEntryType, TTemplateTransferType> tableToNetworkModelConverter) { if (objectTemplateRepository == null) { throw new ArgumentNullException(nameof(objectTemplateRepository)); } if (tableToNetworkModelConverter == null) { throw new ArgumentNullException(nameof(tableToNetworkModelConverter)); } //If unknown templateId, then just indicate such. if (!await objectTemplateRepository.ContainsAsync(objectTemplateId)) { return(BuildFailedResponseModel(SceneContentQueryResponseCode.TemplateUnknown)); } //Load the model, convert and send back. TTemplateEntryType entryModel = await objectTemplateRepository.RetrieveAsync(objectTemplateId); TTemplateTransferType templateModel = tableToNetworkModelConverter.Convert(entryModel); return(BuildSuccessfulResponseModel(templateModel)); }
public async Task <IActionResult> GetObjectInstance([FromRoute(Name = "id")] int objectId, [FromServices] TInstanceRepositoryType instanceObjectRepository, [FromServices] ITypeConverterProvider <TInstanceEntryModelType, TInstanceTransportModelType> tableToNetworkModelConverter) { //If unknown templateId, then just indicate such. if (!await instanceObjectRepository.ContainsAsync(objectId)) { return(BuildFailedResponseModel(SceneContentQueryResponseCode.TemplateUnknown)); } //Load the model, convert and send back. TInstanceEntryModelType entryModel = await instanceObjectRepository.RetrieveAsync(objectId); TInstanceTransportModelType instanceModel = tableToNetworkModelConverter.Convert(entryModel); return(BuildSuccessfulResponseModel(instanceModel)); }
public override async Task <IActionResult> UpdateObjectInstance([FromBody][NotNull] TInstanceTransportModelType model, [FromRoute(Name = "id")] int objectId, [FromServices][NotNull] TInstanceRepositoryType instanceObjectRepository, [FromServices][NotNull] ITypeConverterProvider <TInstanceTransportModelType, TInstanceEntryModelType> networkToTableConverter) { //So, this one is abit different since there is no created instance. //The client needs to create it, we don't assign a default behavior. //So it's possible it DOESN'T exist. if (await instanceObjectRepository.ContainsAsync(objectId)) { return(await base.UpdateObjectInstance(model, objectId, instanceObjectRepository, networkToTableConverter)); } else { //it doesn't exist, we need to try to create it. TInstanceEntryModelType entryModel = networkToTableConverter.Convert(model); await instanceObjectRepository.TryCreateAsync(entryModel); } return(Ok()); }