diff --git a/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs b/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs index 3fe683e5..5bad89bc 100644 --- a/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs +++ b/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs @@ -10,5 +10,9 @@ public interface IRepository where T: BaseEntity Task> GetAllAsync(); Task GetByIdAsync(Guid id); + + Task RemoveAsync(Guid id); + Task AddAsync(T data); + Task UpdateAsync(T data); } } \ 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..49dc4905 100644 --- a/Homeworks/Base/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs +++ b/Homeworks/Base/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs @@ -24,5 +24,41 @@ public Task GetByIdAsync(Guid id) { return Task.FromResult(Data.FirstOrDefault(x => x.Id == id)); } + + public Task RemoveAsync(Guid id) + { + var list = Data.ToList(); + var removeCount = list.RemoveAll(x => x.Id == id); + Data = list; + return Task.FromResult(removeCount > 0); + } + + public Task AddAsync(T data) + { + if(data == null) + throw new ArgumentNullException(nameof(data)); + + data.Id = Guid.NewGuid(); + Data = Data.Append(data); + + return Task.FromResult(data.Id); + } + + public Task UpdateAsync(T data) + { + if(data == null) + throw new ArgumentNullException(nameof(data)); + + var list = Data.ToList(); + var index = list.FindIndex(x => x.Id == data.Id); + + if(index < 0) + throw new KeyNotFoundException(data.Id.ToString()); + + list[index] = data; + Data = list; + + return Task.FromResult(data); + } } } \ 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..ee29c6bd 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] EmployeeAddRequest request) + { + var newEmployee = new Employee + { + Email = request.Email, + FirstName = request.FirstName, + LastName = request.LastName, + Roles = new() + }; + + var guid = await _employeeRepository.AddAsync(newEmployee); + + return Ok(guid); + } + + /// + /// Обновить данные переданного сотрудника + /// + /// + [HttpPut] + public async Task> UpdateEmployeeAsync([FromBody] EmployeeUpdateRequest request) + { + var employee = await _employeeRepository.GetByIdAsync(request.Id); + + if (employee == null) + return NotFound(); + + if (request.Email != null) + employee.Email = request.Email; + + if (request.FirstName != null) + employee.FirstName = request.FirstName; + + if (request.LastName != null) + employee.LastName = request.LastName; + + await _employeeRepository.UpdateAsync(employee); + return await GetEmployeeByIdAsync(employee.Id); + } + + /// + /// Удалить данные сотрудника по Id + /// + /// + [HttpDelete("{id:guid}")] + public async Task> DeleteEmployeeAsync(Guid id) + { + return Ok(await _employeeRepository.RemoveAsync(id)); + } } } \ No newline at end of file diff --git a/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/RolesController.cs b/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/RolesController.cs index 7ccecda2..b664b5cd 100644 --- a/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/RolesController.cs +++ b/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/RolesController.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; @@ -13,7 +14,7 @@ namespace PromoCodeFactory.WebHost.Controllers /// [ApiController] [Route("api/v1/[controller]")] - public class RolesController + public class RolesController : ControllerBase { private readonly IRepository _rolesRepository; @@ -22,6 +23,28 @@ public RolesController(IRepository rolesRepository) _rolesRepository = rolesRepository; } + /// + /// Получить данные роли по Id + /// + /// + [HttpGet("{id:guid}")] + public async Task> GetRoleByIdAsync(Guid id) + { + var role = await _rolesRepository.GetByIdAsync(id); + + if (role == null) + return NotFound(); + + var roleModel = new RoleItemResponse + { + Id = role.Id, + Name = role.Name, + Description = role.Description, + }; + + return Ok(roleModel); + } + /// /// Получить все доступные роли сотрудников /// diff --git a/Homeworks/Base/src/PromoCodeFactory.WebHost/Models/EmployeeAddRequest.cs b/Homeworks/Base/src/PromoCodeFactory.WebHost/Models/EmployeeAddRequest.cs new file mode 100644 index 00000000..c5adc9a3 --- /dev/null +++ b/Homeworks/Base/src/PromoCodeFactory.WebHost/Models/EmployeeAddRequest.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace PromoCodeFactory.WebHost.Models; + +public class EmployeeAddRequest +{ + public string FirstName { get; set; } + + public string LastName { get; set; } + + public string Email { get; set; } +} \ No newline at end of file diff --git a/Homeworks/Base/src/PromoCodeFactory.WebHost/Models/EmployeeUpdateRequest.cs b/Homeworks/Base/src/PromoCodeFactory.WebHost/Models/EmployeeUpdateRequest.cs new file mode 100644 index 00000000..1f47cffc --- /dev/null +++ b/Homeworks/Base/src/PromoCodeFactory.WebHost/Models/EmployeeUpdateRequest.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using PromoCodeFactory.Core.Domain.Administration; + +namespace PromoCodeFactory.WebHost.Models; + +public class EmployeeUpdateRequest +{ + public Guid Id { get; set; } + + public string? FirstName { get; set; } + + public string? LastName { get; set; } + + public string? Email { get; set; } +} \ No newline at end of file