using GerbilManagerWebAPI.Models; using GerbilManagerWebAPI.Repositories; using GerbilManagerWebAPI.Dtos; using GerbilManagerWebAPI.Converter; using Microsoft.AspNetCore.Mvc; using System.Xml; namespace GerbilManagerWebAPI.Controllers { [ApiController] [Route("litters")] public class LittersController : ControllerBase { private readonly IGerbilRepository gerbilrepository; private readonly IBreederRepository breederRepository; private readonly ILitterRepository repository; public LittersController(ILitterRepository repo) { this.repository = repo; } //GET /gerbils [HttpGet] public IEnumerable GetLitters() { var items = repository.GetLitters().Select( litter => litter.AsDto()); return items; } //GET /gerbils [HttpGet("{id}")] public ActionResult GetLitter(Guid id) { var item = repository.GetLitter(id).AsDto(); if(item is null) { return NotFound(); } return item; } [HttpPost()] public ActionResult CreateLitter(CreateLitterDto dto) { Litter litter = new Litter{ Id = Guid.NewGuid(), Date = dto.Date, Father = gerbilrepository.GetGerbil(dto.Father ?? Guid.Empty), Mother = gerbilrepository.GetGerbil(dto.Mother ?? Guid.Empty), Name = dto.Name, Strength = dto.Strength }; this.repository.CreateLitter(litter); return CreatedAtAction(nameof(GetLitter), new { id = litter.Id}, litter.AsDto()); } [HttpPut("{id}")] public ActionResult UpdateLitter(Guid id, UpdateLitterDto litterDto) { var existingItem = repository.GetLitter(id); if(existingItem is null) { return NotFound(); } Litter updatedLitter = existingItem with{ Date = litterDto.Date ?? DateTime.Now, Strength = litterDto.Strength, Father = gerbilrepository.GetGerbil(litterDto.Father ?? Guid.Empty), Mother = gerbilrepository.GetGerbil(litterDto.Mother ?? Guid.Empty), Name = litterDto.Name }; repository.UpdateLitter(updatedLitter); return NoContent(); } [HttpDelete("{id}")] public ActionResult DeleteLitter(Guid id) { var existingLitter = repository.GetLitter(id); if(existingLitter is null) { return NotFound(); } repository.DeleteLitter(existingLitter); return NoContent(); } } }