using API.BusinessLogic; using API.Models.RecipeModels; using API.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace API.Controllers { [ApiController] [Route("api/[controller]")] public class RecipeController : Controller { private readonly RecipeLogic _recipeLogic; private readonly OpenAiRecipes _openAiRecipes; public RecipeController(RecipeLogic recipeLogic, OpenAiRecipes openAiRecipes) { _recipeLogic = recipeLogic; _openAiRecipes = openAiRecipes; } [Authorize] [HttpGet("getall")] public async Task ReadRecipes() { var claims = HttpContext.User.Claims; string userIdString = claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value; int userId = Convert.ToInt32(userIdString); return await _recipeLogic.GetRecipes(userId); } [Authorize] [HttpGet("get/{recipeId}")] public async Task ReadRecipe(int recipeId) { return await _recipeLogic.GetRecipe(recipeId); } [Authorize] [HttpPost("create/{RecipesId}")] public async Task CreateRecipe([FromBody] RecipeDTO recipe, int RecipesId) { return await _recipeLogic.CreateRecipe(recipe, RecipesId); } [Authorize] [HttpPut("edit/{recipeId}")] public async Task EditRecipe([FromBody] RecipeDTO recipe, int recipeId) { var claims = HttpContext.User.Claims; string userIdString = claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value; int userId = Convert.ToInt32(userIdString); return await _recipeLogic.EditRecipe(recipe, recipeId, userId); } [Authorize] [HttpDelete("delete/{recipeId}")] public async Task DeleteRecipe(int recipeId) { return await _recipeLogic.DeleteRecipe(recipeId); } [Authorize] [HttpGet("chatbot/{dish}")] public async Task GenerateRecipe(string dish, string language, int numberOfRecipes = 5) { var recipes = await _openAiRecipes.ChatGPT(dish, language, numberOfRecipes); if (recipes.Content[0].Text == null || recipes.Content[0].Text == "") { return new ConflictObjectResult(new { message = "Could not connect to chatGPT" }); } return new OkObjectResult(recipes.Content[0].Text); } } }