diff --git a/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs b/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs index 3fe683e5..0574dd11 100644 --- a/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs +++ b/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs @@ -5,10 +5,16 @@ namespace PromoCodeFactory.Core.Abstractions.Repositories { - public interface IRepository where T: BaseEntity + public interface IRepository where T : BaseEntity { Task> GetAllAsync(); Task GetByIdAsync(Guid id); + + Task AddAsync(T entity); + + Task UpdateAsync(T entity); + + Task DeleteAsync(T entity); } } \ No newline at end of file diff --git a/Homeworks/Base/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs b/Homeworks/Base/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs index 0f1e04d7..1d7bc115 100644 --- a/Homeworks/Base/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs +++ b/Homeworks/Base/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs @@ -6,7 +6,7 @@ using PromoCodeFactory.Core.Domain; namespace PromoCodeFactory.DataAccess.Repositories { - public class InMemoryRepository: IRepository where T: BaseEntity + public class InMemoryRepository : IRepository where T : BaseEntity { protected IEnumerable Data { get; set; } @@ -24,5 +24,38 @@ public Task GetByIdAsync(Guid id) { return Task.FromResult(Data.FirstOrDefault(x => x.Id == id)); } + + public Task AddAsync(T entity) + { + var list = Data.ToList(); + entity.Id = Guid.NewGuid(); + list.Add(entity); + Data = list; + return Task.CompletedTask; + } + + public Task UpdateAsync(T entity) + { + var list = Data.ToList(); + var existing = list.FirstOrDefault(x => x.Id == entity.Id); + if (existing != null) + { + var index = list.IndexOf(existing); + list[index] = entity; + Data = list; + } + return Task.CompletedTask; + } + + public Task DeleteAsync(T entity) + { + var list = Data.ToList(); + if (list.Contains(entity)) + { + list.Remove(entity); + Data = list; + } + return Task.CompletedTask; + } } } \ No newline at end of file diff --git a/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs b/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs index df1c41dd..3d4d6e22 100644 --- a/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs +++ b/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs @@ -70,5 +70,60 @@ public async Task> GetEmployeeByIdAsync(Guid id) return employeeModel; } + + /// + /// Создать сотрудника + /// + [HttpPost] + public async Task> CreateEmployeeAsync([FromBody] Employee employee) + { + await _employeeRepository.AddAsync(employee); + + var response = new EmployeeResponse() + { + Id = employee.Id, + Email = employee.Email, + Roles = employee.Roles?.Select(x => new RoleItemResponse() + { + Name = x.Name, + Description = x.Description + }).ToList() ?? new List(), + FullName = employee.FullName, + AppliedPromocodesCount = employee.AppliedPromocodesCount + }; + + return response; + } + + /// + /// Обновить данные сотрудника + /// + [HttpPut("{id:guid}")] + public async Task UpdateEmployeeAsync(Guid id, [FromBody] Employee employee) + { + var existing = await _employeeRepository.GetByIdAsync(id); + if (existing == null) + return NotFound(); + + employee.Id = id; // сохраняем Id + await _employeeRepository.UpdateAsync(employee); + + return Ok(); + } + + /// + /// Удалить сотрудника + /// + [HttpDelete("{id:guid}")] + public async Task DeleteEmployeeAsync(Guid id) + { + var existing = await _employeeRepository.GetByIdAsync(id); + if (existing == null) + return NotFound(); + + await _employeeRepository.DeleteAsync(existing); + + return Ok(); + } } } \ No newline at end of file