public async Task <IActionResult> Save(Guid id, [FromBody] UserDto user) { var ety = new EventStoreEntityDto { ID = user.Id.ToString(), Version = user.Version.Value, Data = user.ToUser() }; var json = JsonConvert.SerializeObject(ety, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var client = _httpClientFactory.CreateClient(); var content = new StringContent(json, Encoding.UTF8, "application/json"); var resp = await client.PutAsync($"{_evtStoreBaseUrl}/{user.Id}", content); if (resp.StatusCode != HttpStatusCode.OK) { var err = await resp.Content.ReadAsStringAsync(); return(StatusCode((int)resp.StatusCode, err)); } var tmp = await resp.Content.ReadAsStringAsync(); var respUser = JsonConvert.DeserializeObject <EventStoreEntityDto>(tmp); var result = new UserDto(); result.FromUser(respUser.Data); result.Version = respUser.Version; await _daprClient.PublishEventAsync(_eventStoreOptions.TopicName, new UserUpdated { Id = respUser.ID, Version = respUser.Version }); return(Ok(result)); }
public async Task <IActionResult> Add([FromBody] UserDto user) { user.Id = Guid.NewGuid(); user.Version = 0; var ety = new EventStoreEntityDto { ID = user.Id.ToString(), Version = 1, Data = user.ToUser() }; var json = JsonConvert.SerializeObject(ety, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var client = _httpClientFactory.CreateClient(); var content = new StringContent(json, Encoding.UTF8, "application/json"); var resp = await client.PostAsync($"{_evtStoreBaseUrl}/{user.Id}", content); if (resp.StatusCode != HttpStatusCode.Created) { var err = await resp.Content.ReadAsStringAsync(); return(StatusCode((int)resp.StatusCode, err)); } var tmp = await resp.Content.ReadAsStringAsync(); var respUser = JsonConvert.DeserializeObject <EventStoreEntityDto>(tmp); user.Version = respUser.Version; // publish events await _daprClient.PublishEventAsync(_eventStoreOptions.TopicName, new UserAdded { Id = user.Id.ToString(), Version = user.Version.Value }); return(Created("QueryUserApi/todo", user)); }