using DamageAssesment.Api.Employees.Interfaces; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace DamageAssesment.Api.Employees.Controllers { [ApiController] public class EmployeesController : ControllerBase { private IEmployeesProvider EmployeeProvider; public EmployeesController(IEmployeesProvider EmployeesProvider) { this.EmployeeProvider = EmployeesProvider; } /// /// GET request for retrieving employees. /// [HttpGet("employees")] public async Task GetEmployeesAsync() { var result = await EmployeeProvider.GetEmployeesAsync(); if (result.IsSuccess) { return Ok(result.Employees); } return NoContent(); } /// /// GET request for retrieving an employee by ID. /// [HttpGet("employees/{id}")] public async Task GetEmployeeByIdAsync(int id) { var result = await EmployeeProvider.GetEmployeeByIdAsync(id); if (result.IsSuccess) { return Ok(result.Employee); } return NotFound(); } /// /// PUT request for updating an existing employee. /// /// The updated employee object. [HttpPut("employees/{id}")] public async Task UpdateEmployee(int id, Models.Employee Employee) { if (Employee != null) { var result = await this.EmployeeProvider.UpdateEmployeeAsync(id,Employee); if (result.IsSuccess) { return Ok(result.Employee); } if (result.ErrorMessage == "Not Found") return NotFound(result.ErrorMessage); return BadRequest(result.ErrorMessage); } return NotFound(); } /// /// POST request for creating a new employee. /// /// The employee information for creating a new employee. [HttpPost("employees")] public async Task CreateEmployee(Models.Employee Employee) { if (Employee != null) { var result = await this.EmployeeProvider.PostEmployeeAsync(Employee); if (result.IsSuccess) { return Ok(result.Employee); } return BadRequest(result.ErrorMessage); } return CreatedAtRoute("DefaultApi", new { Id = Employee.Id }, Employee); } /// /// DELETE request for deleting an existing employee. /// /// The ID of the employee to be deleted. [HttpDelete("employees/{id}")] public async Task DeleteEmployee(int id) { var result = await this.EmployeeProvider.DeleteEmployeeAsync(id); if (result.IsSuccess) { return Ok(result.Employee); } return NotFound(); } } }