public async Task <bool> Add(FavoriteRepositoryVM vm) { vm.nameRepository = vm.nameRepository?.ToLowerInvariant(); vm.loginOwner = vm.loginOwner?.ToLowerInvariant(); if (!vm.IsNull() && !vm.loginOwner.IsNullOrEmpty() && !vm.nameRepository.IsNullOrEmpty()) { var pathFile = _repositoryFavoritePath + "favorites.json"; var fileExists = await Task.FromResult(File.Exists(pathFile)).ConfigureAwait(false); IList <FavoriteRepositoryVM> favorites = await Task.FromResult(fileExists ?new List <FavoriteRepositoryVM>(JsonSerializer.Deserialize <FavoriteRepositoryVM[]>(File.ReadAllText(pathFile))) : new List <FavoriteRepositoryVM>(1) { vm }).ConfigureAwait(false); // Valida se o favorito já está contido no json local if (!favorites.Any(f => f.loginOwner.Equals(vm.loginOwner) && f.nameRepository.Equals(vm.nameRepository))) { favorites.Add(vm); } else if (fileExists && favorites.Count() == 1) // Favorito já registrado { return(true); } if (!fileExists || !Directory.Exists(_repositoryFavoritePath)) // Caso o diretório não exista, cria. { await Task.FromResult(Directory.CreateDirectory(_repositoryFavoritePath)).ConfigureAwait(false); } string favoritesStr = await Task.FromResult(JsonSerializer.Serialize(favorites)).ConfigureAwait(false); await Task.Factory.StartNew(() => File.WriteAllText(pathFile, favoritesStr)).ConfigureAwait(false); return(File.Exists(pathFile)); } else { throw new ArgumentNullException("Informe a entidade Favorita corretamente"); } }
public async Task <IActionResult> Post([FromBody] FavoriteRepositoryVM favoriteVM) { try { var result = await _service.Add(favoriteVM).ConfigureAwait(false); if (result) { return(Ok(result)); } else { return(BadRequest("Impossível salvar arquivo")); } } catch (Exception ex) { return(BadRequest(ex.Message)); } }