using Microsoft.AspNetCore.Mvc; using Diligent.WebAPI.Business.MongoServices; using Diligent.WebAPI.Data.Entities; using AutoMapper; using Diligent.WebAPI.Host.Exceptions; using Diligent.WebAPI.Host.MongoDTOs.InsuranceCompanyMongo; namespace Diligent.WebAPI.Host.MongoControllers { [ApiVersion("1.0")] [ApiController] [Route("v{version:apiVersion}/[controller]")] public class InsuranceCompanyController:ControllerBase { private readonly InsuranceCompanyService _insuranceCompanyService; private readonly IMapper _mapper; public InsuranceCompanyController(InsuranceCompanyService insuranceCompanyService,IMapper mapper) { _insuranceCompanyService = insuranceCompanyService; _mapper = mapper; } [HttpGet] public async Task> Get() { var insuranceCompanies = await _insuranceCompanyService.GetAllAsync(); return _mapper.Map>(insuranceCompanies); } [HttpGet("{id:length(24)}")] public async Task> Get(string id) { var insuranceCompany = await _insuranceCompanyService.GetByIdAsync(id); if (insuranceCompany is null) { throw new NotFoundException("Company not found"); } return _mapper.Map(insuranceCompany); } [HttpPost] public async Task Post(InsuranceCompanyCreateDTO insuranceCompanyCreateDTO) { var insuranceCompany = _mapper.Map(insuranceCompanyCreateDTO); await _insuranceCompanyService.CreateInsuranceCompany(insuranceCompany); return CreatedAtAction(nameof(Get), new { id = insuranceCompany.Id }, insuranceCompany); } [HttpPut("{id:length(24)}")] public async Task Update(string id, InsuranceCompanyMongo updatedBook) { var insuranceCompany = await _insuranceCompanyService.GetByIdAsync(id); if (insuranceCompany is null) { throw new NotFoundException("Company not found"); } updatedBook.Id = insuranceCompany.Id; await _insuranceCompanyService.UpdateInsuranceCompany(id, updatedBook); return Ok(); } [HttpDelete("{id:length(24)}")] public async Task Delete(string id) { var insuranceCompany = await _insuranceCompanyService.GetByIdAsync(id); if (insuranceCompany is null) { throw new NotFoundException("Company not found"); } await _insuranceCompanyService.DeleteInsuranceCompany(id); return Ok(); } } }