FavoriteController.java
package com.oliwier.listmebackend.api;
import com.oliwier.listmebackend.api.dto.CreateFavoriteRequest;
import com.oliwier.listmebackend.api.dto.FavoriteResponse;
import com.oliwier.listmebackend.domain.model.Device;
import com.oliwier.listmebackend.domain.service.FavoriteService;
import com.oliwier.listmebackend.identity.CurrentDevice;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.UUID;
@RestController
@RequestMapping("/api/favorites")
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class FavoriteController {
private final FavoriteService favoriteService;
@GetMapping
public List<FavoriteResponse> getMyFavorites(@CurrentDevice Device device) {
return favoriteService.getMyFavorites(device).stream().map(FavoriteResponse::from).toList();
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
@Transactional
public FavoriteResponse create(@CurrentDevice Device device,
@Valid @RequestBody CreateFavoriteRequest req) {
return FavoriteResponse.from(favoriteService.create(device, req));
}
@DeleteMapping("/{favoriteId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
@Transactional
public void delete(@PathVariable UUID favoriteId, @CurrentDevice Device device) {
favoriteService.delete(favoriteId, device);
}
}