From b80493698a8489c00945f16311fa16d10390746a Mon Sep 17 00:00:00 2001 From: romai Date: Thu, 12 Dec 2024 00:44:42 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B8=D1=81=D0=BA=20Done?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Domain/Repository/ICityRepository.cs | 2 ++ .../Domain/Repository/IStreetRepository.cs | 3 +++ .../Persistence/Repositories/StreetRepository.cs | 8 ++++++++ .../Services.Abstractions/IStreetService.cs | 4 ++++ Address Directory/Services/StreetService.cs | 10 ++++++++++ .../Web/Controllers/StreetController.cs | 12 ++++++++++-- 6 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Address Directory/Domain/Repository/ICityRepository.cs b/Address Directory/Domain/Repository/ICityRepository.cs index 9f7452a..5c6ab99 100644 --- a/Address Directory/Domain/Repository/ICityRepository.cs +++ b/Address Directory/Domain/Repository/ICityRepository.cs @@ -9,5 +9,7 @@ namespace Domain.Repository Task AddAsync(City city); Task UpdateAsync(City city); Task DeleteAsync(City city); + + } } diff --git a/Address Directory/Domain/Repository/IStreetRepository.cs b/Address Directory/Domain/Repository/IStreetRepository.cs index 4b20f5c..d0d81e4 100644 --- a/Address Directory/Domain/Repository/IStreetRepository.cs +++ b/Address Directory/Domain/Repository/IStreetRepository.cs @@ -9,5 +9,8 @@ namespace Domain.Repository Task AddAsync(Street street); Task UpdateAsync(Street street); Task DeleteAsync(Street street); + + //Фичи + Task> SearchAsync(string query); } } diff --git a/Address Directory/Persistence/Repositories/StreetRepository.cs b/Address Directory/Persistence/Repositories/StreetRepository.cs index 27e38e2..86c4ef6 100644 --- a/Address Directory/Persistence/Repositories/StreetRepository.cs +++ b/Address Directory/Persistence/Repositories/StreetRepository.cs @@ -37,6 +37,14 @@ namespace Persistence.Repositories .FirstOrDefaultAsync(s => s.Id == id); } + public async Task> SearchAsync(string query) + { + return await _dbContext.Streets + .Where(s => s.Name.Contains(query)) + .OrderBy(s => s.Name) + .ToListAsync(); + } + public async Task UpdateAsync(Street street) { _dbContext.Streets.Update(street); diff --git a/Address Directory/Services.Abstractions/IStreetService.cs b/Address Directory/Services.Abstractions/IStreetService.cs index 2246740..ddd5bf5 100644 --- a/Address Directory/Services.Abstractions/IStreetService.cs +++ b/Address Directory/Services.Abstractions/IStreetService.cs @@ -1,4 +1,5 @@ using Contracts; +using Domain.Entities; namespace Services.Abstractions { @@ -9,5 +10,8 @@ namespace Services.Abstractions Task CreateAsync(StreetDtoForCreate streetDto); Task UpdateAsync(Guid streetId, StreetDtoForUpdate street); Task DeleteAsync(Guid streetId); + + //Фичи + Task> SearchAsync(string query); } } diff --git a/Address Directory/Services/StreetService.cs b/Address Directory/Services/StreetService.cs index f7c1b6d..59268e5 100644 --- a/Address Directory/Services/StreetService.cs +++ b/Address Directory/Services/StreetService.cs @@ -53,6 +53,16 @@ namespace Services return _mapper.Map(street); } + public async Task> SearchAsync(string query) + { + if (query == null) + { + throw new KeyNotFoundException("Query cannot be empty"); + } + var streets = await _streetRepository.SearchAsync(query); + return _mapper.Map>(streets); + } + public async Task UpdateAsync(Guid streetId, StreetDtoForUpdate streetDto) { var street = await _streetRepository.GetByIdAsync(streetId); diff --git a/Address Directory/Web/Controllers/StreetController.cs b/Address Directory/Web/Controllers/StreetController.cs index 26052c3..f1cd40f 100644 --- a/Address Directory/Web/Controllers/StreetController.cs +++ b/Address Directory/Web/Controllers/StreetController.cs @@ -16,8 +16,8 @@ namespace Web.Controllers [HttpGet] public async Task GetAllAsync() { - var cities = await _streetService.GetAllAsync(); - return Ok(cities); + var steets = await _streetService.GetAllAsync(); + return Ok(steets); } [HttpGet("{id:guid}")] public async Task GetByIdAsync(Guid id) @@ -73,5 +73,13 @@ namespace Web.Controllers return NoContent(); } + + //Фичи + [HttpGet("search")] + public async Task SearchStreet([FromQuery] string query) + { + var streets = await _streetService.SearchAsync(query); + return Ok(streets); + } } }