Add endpoint for creating ai recipe draft.

This commit is contained in:
Jesse Brault 2026-01-16 21:08:31 -06:00
parent 7f985f3434
commit b19dc42094
4 changed files with 49 additions and 4 deletions

View File

@ -42,7 +42,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
@SpringBootTest @SpringBootTest
@AutoConfigureMockMvc @AutoConfigureMockMvc
@ExtendWith(IntegrationTestsExtension.class) @ExtendWith(IntegrationTestsExtension.class)
public class RecipeControllerTests { public class RecipesControllerTests {
@Container @Container
private static final MinIOContainer container = new MinIOContainer( private static final MinIOContainer container = new MinIOContainer(

View File

@ -0,0 +1,45 @@
package app.mealsmadeeasy.api.recipe;
import app.mealsmadeeasy.api.file.File;
import app.mealsmadeeasy.api.file.FileService;
import app.mealsmadeeasy.api.user.User;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@RestController
@RequestMapping("/recipe-drafts")
@RequiredArgsConstructor
public class RecipeDraftsController {
private final RecipeService recipeService;
private final FileService fileService;
@PutMapping("/ai")
public ResponseEntity<RecipeDraft> createRecipeDraft(
@AuthenticationPrincipal User owner,
@RequestParam MultipartFile sourceFile,
@RequestParam String sourceFileName
) throws IOException {
if (owner == null) {
throw new IllegalArgumentException("Must be logged in to create a RecipeDraft.");
}
final File file = this.fileService.create(
sourceFile.getInputStream(),
sourceFileName,
sourceFile.getSize(),
owner
);
final RecipeDraft recipeDraft = this.recipeService.createAiDraft(file, owner);
return ResponseEntity.status(HttpStatus.CREATED).body(recipeDraft);
}
}

View File

@ -32,7 +32,7 @@ import java.util.Map;
@RestController @RestController
@RequestMapping("/recipes") @RequestMapping("/recipes")
public class RecipeController { public class RecipesController {
private final RecipeService recipeService; private final RecipeService recipeService;
private final RecipeStarService recipeStarService; private final RecipeStarService recipeStarService;
@ -40,7 +40,7 @@ public class RecipeController {
private final SliceViewService sliceViewService; private final SliceViewService sliceViewService;
private final ObjectMapper objectMapper; private final ObjectMapper objectMapper;
public RecipeController( public RecipesController(
RecipeService recipeService, RecipeService recipeService,
RecipeStarService recipeStarService, RecipeStarService recipeStarService,
RecipeCommentService recipeCommentService, RecipeCommentService recipeCommentService,

View File

@ -10,7 +10,7 @@ spring.datasource.password=${POSTGRES_PASSWORD}
spring.datasource.hikari.auto-commit=false spring.datasource.hikari.auto-commit=false
app.mealsmadeeasy.api.baseUrl=http://localhost:8080 app.mealsmadeeasy.api.baseUrl=http://localhost:8080
app.mealsmadeeasy.api.security.access-token-lifetime=60 app.mealsmadeeasy.api.security.access-token-lifetime=300
app.mealsmadeeasy.api.security.refresh-token-lifetime=3600 app.mealsmadeeasy.api.security.refresh-token-lifetime=3600
app.mealsmadeeasy.api.minio.endpoint=http://${MINIO_HOST:localhost}:${MINIO_PORT:9000} app.mealsmadeeasy.api.minio.endpoint=http://${MINIO_HOST:localhost}:${MINIO_PORT:9000}
app.mealsmadeeasy.api.minio.accessKey=${MINIO_ROOT_USER} app.mealsmadeeasy.api.minio.accessKey=${MINIO_ROOT_USER}