using pet_companion_api.Models; using pet_companion_api.Repositories; namespace pet_companion_api.Services { public class PetService { private readonly PetRepository petRepository; private readonly PetClassService _petClassService; public PetService(PetRepository petRepository, PetClassService petClassService) { this.petRepository = petRepository; _petClassService = petClassService; } public IEnumerable GetAllPets(Guid userId) { return petRepository.GetPetsByUserId(userId.ToString()); } public Pet CreatePet(Guid userId, PetCreationRequest petRequest) { var pet = new Pet { Id = Guid.NewGuid().ToString(), UserId = userId.ToString(), Name = petRequest.Name, Class = petRequest.Class, Level = 1, Stats = PetStats.BuildFromClass(petRequest.Class), Resources = new Resources(), ActionSince = DateTime.UtcNow, PetAction = PetActionGather.IDLE, IsDead = false }; return petRepository.CreatePet(pet); } public Pet UpdatePetAction(string petId, string userId, PetUpdateActionRequest actionRequest) { var pet = petRepository.GetPetById(petId, userId); if (pet == null) { throw new Exception("Pet not found"); } if (actionRequest.Action.HasValue) { // not implemented } else if (actionRequest.PetActionGather.HasValue) { pet.PetAction = actionRequest.PetActionGather.Value; pet.ActionSince = DateTime.UtcNow; return petRepository.UpdatePetAction(pet); } return pet; } public Resources GetGatheredResources(string petId, string userId) { var pet = petRepository.GetPetById(petId, userId); if (pet == null) { throw new Exception("Pet not found"); } return _petClassService.CalculateGatheredResources(pet.Stats, pet.Level, pet.PetAction, pet.ActionSince); } public Pet UpdatePetResources(string petId, string userId) { var pet = petRepository.GetPetById(petId, userId); if (pet == null) { throw new Exception("Pet not found"); } var gatheredResources = _petClassService.CalculateGatheredResources(pet.Stats, pet.Level, pet.PetAction, pet.ActionSince); pet.Resources.Wisdom += gatheredResources.Wisdom; pet.Resources.Gold += gatheredResources.Gold; pet.Resources.Food += gatheredResources.Food; pet.Resources.Junk += gatheredResources.Junk; pet.ActionSince = DateTime.UtcNow; return petRepository.UpdatePetResources(pet); } } }