Feature/ozon-parser-v0.1: правка апишки

This commit is contained in:
danil.markov 2024-11-12 22:40:34 +04:00
parent 171cc650f1
commit fd71513bbf
5 changed files with 44 additions and 13 deletions

View File

@ -9,6 +9,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import ru.pricepulse.parsingservice.enumeration.Category; import ru.pricepulse.parsingservice.enumeration.Category;
import ru.pricepulse.parsingservice.enumeration.Marketplace;
import ru.pricepulse.parsingservice.persistence.entity.ProductEntity; import ru.pricepulse.parsingservice.persistence.entity.ProductEntity;
@Repository @Repository
@ -23,5 +24,5 @@ public interface ProductRepository extends JpaRepository<ProductEntity, Long> {
Optional<ProductEntity> findByUrl(String url); Optional<ProductEntity> findByUrl(String url);
Page<ProductEntity> findAllByCategory(Category category, Pageable pageable); Page<ProductEntity> findAllByMarketplaceAndCategory(Marketplace marketplace, Category category, Pageable pageable);
} }

View File

@ -11,6 +11,7 @@ import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import ru.pricepulse.parsingservice.enumeration.Category; import ru.pricepulse.parsingservice.enumeration.Category;
import ru.pricepulse.parsingservice.enumeration.Marketplace;
import ru.pricepulse.parsingservice.ozon_parser.service.dto.ParsedData; import ru.pricepulse.parsingservice.ozon_parser.service.dto.ParsedData;
import ru.pricepulse.parsingservice.persistence.entity.PriceHistoryEntity; import ru.pricepulse.parsingservice.persistence.entity.PriceHistoryEntity;
import ru.pricepulse.parsingservice.persistence.entity.PriceHistoryId; import ru.pricepulse.parsingservice.persistence.entity.PriceHistoryId;
@ -59,16 +60,19 @@ public class ProductService {
} }
@Transactional(readOnly = true) @Transactional(readOnly = true)
public PriceHistoryDto findPriceHistoryByRange(String productUrl, ZonedDateTime from, ZonedDateTime to) { public PriceHistoryDto findPriceHistoryByRange(String productUrl,
ZonedDateTime from,
ZonedDateTime to) {
var priceHistory = productPriceRepository var priceHistory = productPriceRepository
.findAllById_ProductUrlAndIdDateAfterAndId_DateBeforeOrderById_DateAsc(productUrl, from, to); .findAllById_ProductUrlAndIdDateAfterAndId_DateBeforeOrderById_DateAsc(productUrl, from, to);
return priceHistoryMapper.toPriceHistoryDto(priceHistory); return priceHistoryMapper.toPriceHistoryDto(priceHistory);
} }
@Transactional(readOnly = true) @Transactional(readOnly = true)
public ProductsPageDto findAllProductsByPage(Category category, public ProductsPageDto findAllProductsByPage(Marketplace marketplace,
Category category,
Pageable pageable) { Pageable pageable) {
var page = productRepository.findAllByCategory(category, pageable); var page = productRepository.findAllByMarketplaceAndCategory(marketplace, category, pageable);
return new ProductsPageDto( return new ProductsPageDto(
page.getNumberOfElements(), page.getNumberOfElements(),
page.getTotalPages(), page.getTotalPages(),

View File

@ -5,19 +5,23 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import ru.pricepulse.parsingservice.ozon_parser.enumeration.OzonCategory; import ru.pricepulse.parsingservice.enumeration.Category;
import ru.pricepulse.parsingservice.enumeration.Marketplace;
import ru.pricepulse.parsingservice.ozon_parser.service.OzonService; import ru.pricepulse.parsingservice.ozon_parser.service.OzonService;
@RestController @RestController
@RequestMapping("/api/v1/ozon") @RequestMapping("/api/v1/categories")
@RequiredArgsConstructor @RequiredArgsConstructor
public class OzonRestApi { public class CategoryApi {
private final OzonService ozonService; private final OzonService ozonService;
@GetMapping("/categories") @GetMapping
public ResponseEntity<OzonCategory[]> getOzon() { public ResponseEntity<?> getCategories(Marketplace marketplace) {
return ResponseEntity.ok(ozonService.getCategories()); if (Marketplace.OZON.equals(marketplace)) {
return ResponseEntity.ok(ozonService.getCategories());
}
return ResponseEntity.ok(Category.values());
} }
} }

View File

@ -0,0 +1,20 @@
package ru.pricepulse.parsingservice.web.rest;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ru.pricepulse.parsingservice.enumeration.Marketplace;
@RestController
@RequestMapping("/api/v1/marketplaces")
@RequiredArgsConstructor
public class MarketplaceApi {
@GetMapping
public ResponseEntity<Marketplace[]> getMarketplace() {
return ResponseEntity.ok(Marketplace.values());
}
}

View File

@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import ru.pricepulse.parsingservice.enumeration.Category; import ru.pricepulse.parsingservice.enumeration.Category;
import ru.pricepulse.parsingservice.enumeration.Marketplace;
import ru.pricepulse.parsingservice.service.ProductService; import ru.pricepulse.parsingservice.service.ProductService;
import ru.pricepulse.parsingservice.service.dto.PriceHistoryDto; import ru.pricepulse.parsingservice.service.dto.PriceHistoryDto;
import ru.pricepulse.parsingservice.service.dto.ProductDto; import ru.pricepulse.parsingservice.service.dto.ProductDto;
@ -21,7 +22,7 @@ import ru.pricepulse.parsingservice.service.dto.ProductsPageDto;
@RestController @RestController
@RequestMapping("/api/v1/products") @RequestMapping("/api/v1/products")
@RequiredArgsConstructor @RequiredArgsConstructor
public class MainRestApi { public class ProductApi {
private final ProductService productService; private final ProductService productService;
@ -42,9 +43,10 @@ public class MainRestApi {
} }
@GetMapping @GetMapping
public ResponseEntity<ProductsPageDto> getAllProductsByCategoryAndPage(Category category, public ResponseEntity<ProductsPageDto> getAllProductsByCategoryAndPage(Marketplace marketplace,
Category category,
Pageable pageable) { Pageable pageable) {
return ResponseEntity.ok(productService.findAllProductsByPage(category, pageable)); return ResponseEntity.ok(productService.findAllProductsByPage(marketplace, category, pageable));
} }
} }