Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,16 @@

namespace PromoCodeFactory.Core.Abstractions.Repositories
{
public interface IRepository<T> where T: BaseEntity
public interface IRepository<T> where T : BaseEntity
{
Task<IEnumerable<T>> GetAllAsync();

Task<T> GetByIdAsync(Guid id);

Task AddAsync(T entity);

Task UpdateAsync(T entity);

Task DeleteAsync(T entity);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
using PromoCodeFactory.Core.Domain;
namespace PromoCodeFactory.DataAccess.Repositories
{
public class InMemoryRepository<T>: IRepository<T> where T: BaseEntity
public class InMemoryRepository<T> : IRepository<T> where T : BaseEntity
{
protected IEnumerable<T> Data { get; set; }

Expand All @@ -24,5 +24,38 @@ public Task<T> 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;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,60 @@ public async Task<ActionResult<EmployeeResponse>> GetEmployeeByIdAsync(Guid id)

return employeeModel;
}

/// <summary>
/// Создать сотрудника
/// </summary>
[HttpPost]
public async Task<ActionResult<EmployeeResponse>> 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<RoleItemResponse>(),
FullName = employee.FullName,
AppliedPromocodesCount = employee.AppliedPromocodesCount
};

return response;
}

/// <summary>
/// Обновить данные сотрудника
/// </summary>
[HttpPut("{id:guid}")]
public async Task<IActionResult> 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();
}

/// <summary>
/// Удалить сотрудника
/// </summary>
[HttpDelete("{id:guid}")]
public async Task<IActionResult> DeleteEmployeeAsync(Guid id)
{
var existing = await _employeeRepository.GetByIdAsync(id);
if (existing == null)
return NotFound();

await _employeeRepository.DeleteAsync(existing);

return Ok();
}
}
}