From fcb60369f09d75694b5d565fed09d5d116323b4d Mon Sep 17 00:00:00 2001 From: "e.karlshtein" Date: Mon, 6 Apr 2026 21:50:53 +0300 Subject: [PATCH] homework-2. Realized CRUD operations --- .../Repositories/InMemoryRepository.cs" | 19 +++++-- .../Controllers/EmployeesController.cs" | 55 +++++++++++++++++-- 2 files changed, 66 insertions(+), 8 deletions(-) diff --git "a/Homeworks/02 \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\277\321\200\320\276\320\265\320\272\321\202\320\276\320\274 \320\270 \321\200\320\265\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 CRUD-\320\276\320\277\320\265\321\200\320\260\321\206\320\270\320\271/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs" "b/Homeworks/02 \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\277\321\200\320\276\320\265\320\272\321\202\320\276\320\274 \320\270 \321\200\320\265\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 CRUD-\320\276\320\277\320\265\321\200\320\260\321\206\320\270\320\271/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs" index 77989cf91..26a6dc23e 100644 --- "a/Homeworks/02 \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\277\321\200\320\276\320\265\320\272\321\202\320\276\320\274 \320\270 \321\200\320\265\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 CRUD-\320\276\320\277\320\265\321\200\320\260\321\206\320\270\320\271/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs" +++ "b/Homeworks/02 \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\277\321\200\320\276\320\265\320\272\321\202\320\276\320\274 \320\270 \321\200\320\265\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 CRUD-\320\276\320\277\320\265\321\200\320\260\321\206\320\270\320\271/src/PromoCodeFactory.DataAccess/Repositories/InMemoryRepository.cs" @@ -1,5 +1,6 @@ using PromoCodeFactory.Core.Abstractions.Repositories; using PromoCodeFactory.Core.Domain; +using PromoCodeFactory.Core.Exceptions; using System.Collections.Concurrent; namespace PromoCodeFactory.DataAccess.Repositories; @@ -19,21 +20,31 @@ public Task> GetAll(CancellationToken ct) public Task GetById(Guid id, CancellationToken ct) { - throw new NotImplementedException(); + _data.TryGetValue(id, out var entity); + return Task.FromResult(entity); } public Task Add(T entity, CancellationToken ct) { - throw new NotImplementedException(); + _data.TryAdd(entity.Id, entity); + return Task.CompletedTask; } public Task Update(T entity, CancellationToken ct) { - throw new NotImplementedException(); + if (!_data.ContainsKey(entity.Id)) + throw new EntityNotFoundException(entity.Id); + + _data[entity.Id] = entity; + return Task.CompletedTask; } public Task Delete(Guid id, CancellationToken ct) { - throw new NotImplementedException(); + if (!_data.ContainsKey(id)) + throw new EntityNotFoundException(id); + + _data.TryRemove(id, out var result); + return Task.CompletedTask; } } diff --git "a/Homeworks/02 \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\277\321\200\320\276\320\265\320\272\321\202\320\276\320\274 \320\270 \321\200\320\265\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 CRUD-\320\276\320\277\320\265\321\200\320\260\321\206\320\270\320\271/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs" "b/Homeworks/02 \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\277\321\200\320\276\320\265\320\272\321\202\320\276\320\274 \320\270 \321\200\320\265\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 CRUD-\320\276\320\277\320\265\321\200\320\260\321\206\320\270\320\271/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs" index 0de8444f1..dbf914edf 100644 --- "a/Homeworks/02 \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\277\321\200\320\276\320\265\320\272\321\202\320\276\320\274 \320\270 \321\200\320\265\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 CRUD-\320\276\320\277\320\265\321\200\320\260\321\206\320\270\320\271/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs" +++ "b/Homeworks/02 \320\227\320\275\320\260\320\272\320\276\320\274\321\201\321\202\320\262\320\276 \321\201 \320\277\321\200\320\276\320\265\320\272\321\202\320\276\320\274 \320\270 \321\200\320\265\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217 CRUD-\320\276\320\277\320\265\321\200\320\260\321\206\320\270\320\271/src/PromoCodeFactory.WebHost/Controllers/EmployeesController.cs" @@ -34,7 +34,11 @@ public async Task>> Get(Cancella [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)] public async Task> GetById([FromRoute] Guid id, CancellationToken ct) { - throw new NotImplementedException(); + var employee = await employeeRepository.GetById(id, ct); + if (employee == null) + return NotFound(); + + return Ok(Mapper.ToEmployeeResponse(employee)); } /// @@ -45,7 +49,17 @@ public async Task> GetById([FromRoute] Guid id, C [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] public async Task> Create([FromBody] EmployeeCreateRequest request, CancellationToken ct) { - throw new NotImplementedException(); + if (!ModelState.IsValid) + return BadRequest(); + + var role = await roleRepository.GetById(request.RoleId, ct); + if (role == null) + return BadRequest(); + + var employee = Mapper.ToEmployee(request, role); + await employeeRepository.Add(employee, ct); + + return CreatedAtAction(nameof(GetById), new { id = employee.Id }, Mapper.ToEmployeeResponse(employee)); } /// @@ -60,7 +74,32 @@ public async Task> Update( [FromBody] EmployeeUpdateRequest request, CancellationToken ct) { - throw new NotImplementedException(); + if (!ModelState.IsValid) + return BadRequest(); + + var role = await roleRepository.GetById(request.RoleId, ct); + if (role == null) + return BadRequest(); + + try + { + var employee = new Employee + { + Id = id, + FirstName = request.FirstName, + LastName = request.LastName, + Email = request.Email, + Role = role, + AppliedPromocodesCount = 0 + }; + await employeeRepository.Update(employee, ct); + + return Ok(Mapper.ToEmployeeResponse(employee)); + } + catch (EntityNotFoundException) + { + return NotFound(); + } } /// @@ -73,6 +112,14 @@ public async Task Delete( [FromRoute] Guid id, CancellationToken ct) { - throw new NotImplementedException(); + try + { + await employeeRepository.Delete(id, ct); + return NoContent(); + } + catch (EntityNotFoundException) + { + return NotFound(); + } } }