diff --git a/.vs/ASP.NET/v17/.wsuo b/.vs/ASP.NET/v17/.wsuo new file mode 100644 index 00000000..13ca5c80 Binary files /dev/null and b/.vs/ASP.NET/v17/.wsuo differ diff --git a/.vs/ASP.NET/v17/DocumentLayout.backup.json b/.vs/ASP.NET/v17/DocumentLayout.backup.json new file mode 100644 index 00000000..dbba239d --- /dev/null +++ b/.vs/ASP.NET/v17/DocumentLayout.backup.json @@ -0,0 +1,27 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\psizh\\source\\repos\\ASP.NET\\", + "Documents": [], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 249, + "SelectedChildIndex": -1, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c64b9c2-e352-428e-a56d-0ace190b99a6}" + }, + { + "$type": "Bookmark", + "Name": "ST:128:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.vs/ASP.NET/v17/DocumentLayout.json b/.vs/ASP.NET/v17/DocumentLayout.json new file mode 100644 index 00000000..f0bfee41 --- /dev/null +++ b/.vs/ASP.NET/v17/DocumentLayout.json @@ -0,0 +1,23 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\Sharpey\\source\\repos\\ASP.NET\\", + "Documents": [], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 249, + "SelectedChildIndex": -1, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c64b9c2-e352-428e-a56d-0ace190b99a6}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 00000000..7187de56 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\AspApiBasic.sln", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs b/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs index 3fe683e5..f9b36c7e 100644 --- a/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs +++ b/Homeworks/Base/src/PromoCodeFactory.Core/Abstractions/Repositories/IRepository.cs @@ -10,5 +10,8 @@ public interface IRepository where T: BaseEntity Task> GetAllAsync(); Task GetByIdAsync(Guid id); + Task AddAsync(T entity); + Task UpdateAsync(T entity); + Task DeleteAsync(Guid id); } } \ 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..d22cec54 100644 --- a/Homeworks/Base/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs +++ b/Homeworks/Base/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs @@ -6,23 +6,55 @@ 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; } + protected static List Data = new(); public InMemoryRepository(IEnumerable data) { - Data = data; + if(!Data.Any() && data != null) + { + Data = data.ToList(); + } } public Task> GetAllAsync() { - return Task.FromResult(Data); + return Task.FromResult(Data.AsEnumerable()); } public Task GetByIdAsync(Guid id) { return Task.FromResult(Data.FirstOrDefault(x => x.Id == id)); } + + public Task AddAsync(T entity) + { + if(entity == null) + throw new ArgumentNullException(nameof(entity)); + entity.Id = Guid.NewGuid(); + Data.Add(entity); + return Task.FromResult(entity); + } + + public Task UpdateAsync(T entity) + { + if (entity == null) + throw new ArgumentNullException(nameof(entity)); + var index = Data.FindIndex(x => x.Id == entity.Id); + if (index == -1) + throw new KeyNotFoundException($"Сущность с таким {entity.Id} не найдена"); + Data[index] = entity; + return Task.FromResult(entity); + } + + public Task DeleteAsync(Guid id) + { + var entity = Data.FirstOrDefault(x => x.Id == id); + if (entity == null) + throw new KeyNotFoundException($"Сущность с таким {id} не найдена"); + Data.Remove(entity); + 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..51903666 100644 --- a/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs +++ b/Homeworks/Base/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs @@ -70,5 +70,69 @@ public async Task> GetEmployeeByIdAsync(Guid id) return employeeModel; } + + /// + /// Создать нового сотрудника + /// + [HttpPost] + public async Task> CreateEmployeeAsync([FromBody] EmployeeResponse employeeModel) + { + + string[] name = employeeModel.FullName.Split(' '); + var employee = new Employee() + { + Id = employeeModel.Id, + Email = employeeModel.Email, + Roles = employeeModel.Roles.Select(x => new Role() + { + Name = x.Name, + Description = x.Description + }).ToList(), + FirstName = name[0], + LastName = name[1], + AppliedPromocodesCount = employeeModel.AppliedPromocodesCount + }; + + await _employeeRepository.AddAsync(employee); + + return employeeModel; + } + + /// + /// Обновить данные сотрудника + /// + [HttpPut("{id:guid}")] + public async Task UpdateEmployeeAsync(Guid id, [FromBody] Employee newEmployee) + { + + var employee = await _employeeRepository.GetByIdAsync(id); + if (employee == null) + return NotFound(); + + employee.FirstName = newEmployee.FirstName; + employee.LastName = newEmployee.LastName; + employee.Email = newEmployee.Email; + employee.Roles = newEmployee.Roles; + employee.AppliedPromocodesCount = newEmployee.AppliedPromocodesCount; + + await _employeeRepository.UpdateAsync(newEmployee); + return Ok(); + + } + + /// + /// Удалить сотрудника + /// + [HttpDelete("{id:guid}")] + public async Task DeleteEmployeeAsync(Guid id) + { + + var employee = await _employeeRepository.GetByIdAsync(id); + if (employee == null) + return NotFound(); + await _employeeRepository.DeleteAsync(id); + return Ok(); + + } } } \ No newline at end of file