AIApi.kt

/**
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.22.0).
 * https://openapi-generator.tech
 * Do not edit the class manually.
*/
package org.openapitools.api

import org.openapitools.model.ErrorResponse
import org.openapitools.model.HelpRequest
import org.openapitools.model.HelpResponse
import org.openapitools.model.NutrientRequest
import org.openapitools.model.RecipeInput
import org.openapitools.model.RecipeNutrients
import org.openapitools.model.RecipeRequest
import io.swagger.v3.oas.annotations.*
import io.swagger.v3.oas.annotations.enums.*
import io.swagger.v3.oas.annotations.media.*
import io.swagger.v3.oas.annotations.responses.*
import io.swagger.v3.oas.annotations.security.*
import org.springframework.http.HttpStatus
import org.springframework.http.MediaType
import org.springframework.http.ResponseEntity

import org.springframework.web.bind.annotation.*
import org.springframework.validation.annotation.Validated
import org.springframework.web.context.request.NativeWebRequest
import org.springframework.beans.factory.annotation.Autowired

import jakarta.validation.constraints.DecimalMax
import jakarta.validation.constraints.DecimalMin
import jakarta.validation.constraints.Email
import jakarta.validation.constraints.Max
import jakarta.validation.constraints.Min
import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Pattern
import jakarta.validation.constraints.Size
import jakarta.validation.Valid

import kotlin.collections.List
import kotlin.collections.Map

@RestController
@Validated
interface AIApi {

    @Operation(
        tags = ["AI",],
        summary = "Ask the LLM a question about a recipe",
        operationId = "aiHelpPost",
        description = """""",
        responses = [
            ApiResponse(responseCode = "200", description = "AI-generated help text", content = [Content(schema = Schema(implementation = HelpResponse::class))]),
            ApiResponse(responseCode = "400", description = "Invalid request body", content = [Content(schema = Schema(implementation = ErrorResponse::class))]),
            ApiResponse(responseCode = "401", description = "Missing or invalid token", content = [Content(schema = Schema(implementation = ErrorResponse::class))]),
            ApiResponse(responseCode = "502", description = "GenAI service unavailable or returned an unparseable response", content = [Content(schema = Schema(implementation = ErrorResponse::class))]),
            ApiResponse(responseCode = "504", description = "GenAI service timed out", content = [Content(schema = Schema(implementation = ErrorResponse::class))])
        ],
        security = [ SecurityRequirement(name = "bearerAuth") ]
    )
    @RequestMapping(
        method = [RequestMethod.POST],
        // "/ai/help"
        value = [PATH_AI_HELP_POST],
        produces = ["application/json"],
        consumes = ["application/json"]
    )
    fun aiHelpPost(
        @Parameter(description = "", required = true) @Valid @RequestBody helpRequest: HelpRequest
    ): ResponseEntity<HelpResponse> {
        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
    }

    @Operation(
        tags = ["AI",],
        summary = "Generate nutritional information for a recipe using an LLM",
        operationId = "aiNutrientsPost",
        description = """""",
        responses = [
            ApiResponse(responseCode = "200", description = "AI-generated nutritional breakdown completed successfully", content = [Content(schema = Schema(implementation = RecipeNutrients::class))]),
            ApiResponse(responseCode = "400", description = "Invalid request body or recipe structure", content = [Content(schema = Schema(implementation = ErrorResponse::class))]),
            ApiResponse(responseCode = "401", description = "Missing or invalid token", content = [Content(schema = Schema(implementation = ErrorResponse::class))]),
            ApiResponse(responseCode = "502", description = "GenAI service unavailable or returned an unparseable response", content = [Content(schema = Schema(implementation = ErrorResponse::class))]),
            ApiResponse(responseCode = "504", description = "GenAI service timed out", content = [Content(schema = Schema(implementation = ErrorResponse::class))])
        ],
        security = [ SecurityRequirement(name = "bearerAuth") ]
    )
    @RequestMapping(
        method = [RequestMethod.POST],
        // "/ai/nutrients"
        value = [PATH_AI_NUTRIENTS_POST],
        produces = ["application/json"],
        consumes = ["application/json"]
    )
    fun aiNutrientsPost(
        @Parameter(description = "", required = true) @Valid @RequestBody nutrientRequest: NutrientRequest
    ): ResponseEntity<RecipeNutrients> {
        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
    }

    @Operation(
        tags = ["AI",],
        summary = "Generate recipes using an LLM based on a prompt",
        operationId = "aiRecipesPost",
        description = """""",
        responses = [
            ApiResponse(responseCode = "200", description = "AI-generated recipes without IDs", content = [Content(array = ArraySchema(schema = Schema(implementation = RecipeInput::class)))]),
            ApiResponse(responseCode = "400", description = "Invalid request body", content = [Content(schema = Schema(implementation = ErrorResponse::class))]),
            ApiResponse(responseCode = "401", description = "Missing or invalid token", content = [Content(schema = Schema(implementation = ErrorResponse::class))]),
            ApiResponse(responseCode = "502", description = "GenAI service unavailable or returned an unparseable response", content = [Content(schema = Schema(implementation = ErrorResponse::class))]),
            ApiResponse(responseCode = "504", description = "GenAI service timed out", content = [Content(schema = Schema(implementation = ErrorResponse::class))])
        ],
        security = [ SecurityRequirement(name = "bearerAuth") ]
    )
    @RequestMapping(
        method = [RequestMethod.POST],
        // "/ai/recipes"
        value = [PATH_AI_RECIPES_POST],
        produces = ["application/json"],
        consumes = ["application/json"]
    )
    fun aiRecipesPost(
        @Parameter(description = "", required = true) @Valid @RequestBody recipeRequest: RecipeRequest
    ): ResponseEntity<List<RecipeInput>> {
        return ResponseEntity(HttpStatus.NOT_IMPLEMENTED)
    }

    companion object {
        //for your own safety never directly reuse these path definitions in tests
        const val PATH_AI_HELP_POST: String = "/ai/help"
        const val PATH_AI_NUTRIENTS_POST: String = "/ai/nutrients"
        const val PATH_AI_RECIPES_POST: String = "/ai/recipes"
    }
}