using Microsoft.AspNetCore.Mvc; using pet_companion_api.Models; using pet_companion_api.Services; namespace pet_companion_api.Controllers { [ApiController] [Route("api/v1/[controller]")] public class PetController : ControllerBase { private readonly PetService petService; private readonly PetClassService petClassService; private readonly ILogger logger; private Guid userId = Guid.Parse("f5f4b3b3-3b7b-4b7b-8b7b-7b7b7b7b7b7b"); public PetController( ILogger logger, PetService petService, PetClassService petClassService) { this.logger = logger; this.petService = petService; this.petClassService = petClassService; } [HttpGet("")] public IActionResult GetAllPets() { return Ok(petService.GetAllPets(userId)); } [HttpPost("")] public IActionResult CreatePet([FromBody] PetCreationRequest petRequest) { var createdPet = petService.CreatePet(userId, petRequest); return CreatedAtAction(nameof(GetAllPets), new { id = createdPet.Id }, createdPet); } /// /// /// /// /// One of `feed`, `play`, `sleep` /// [HttpPut("{petId}/action/{action}")] public IActionResult UpdatePetAction(string petId, string action) { try { PetAction petAction; switch (action.ToLower()) { case "feed": petAction = PetAction.FEED; break; case "play": petAction = PetAction.PLAY; break; case "sleep": petAction = PetAction.SLEEP; break; default: return BadRequest("Invalid action. Valid actions are: feed, play, sleep"); } var actionRequest = new PetUpdateActionRequest { Action = petAction }; var updatedPet = petService.UpdatePetAction(petId, userId.ToString(), actionRequest); return Ok(updatedPet); } catch (Exception ex) { return NotFound(ex.Message); } } [HttpPut("{petId}/action/gather")] public IActionResult UpdatePetActionGather(string petId, [FromBody] PetUpdateActionRequest actionRequest) { try { var updatedPet = petService.UpdatePetAction(petId, userId.ToString(), actionRequest); return Ok(updatedPet); } catch (Exception ex) { return NotFound(ex.Message); } } [HttpGet("{petId}/resources/gathered")] public IActionResult GetGatheredResources(string petId) { try { var resources = petService.GetGatheredResources(petId, userId.ToString()); return Ok(resources); } catch (Exception ex) { return NotFound(ex.Message); } } [HttpPut("{petId}/resources/collect")] public IActionResult CollectGatheredResources(string petId) { try { var updatedPet = petService.UpdatePetResources(petId, userId.ToString()); return Ok(updatedPet); } catch (Exception ex) { return NotFound(ex.Message); } } [HttpGet("classes")] public IActionResult GetAllPetClasses() { return Ok(petClassService.GetAllPetClasses()); } } }