| updateSku(Long, Long, CatalogModels.UpdateSkuCommand) |  | 0% |  | 0% | 3 | 3 | 21 | 21 | 1 | 1 |
| lambda$updateProduct$14(Long, CatalogModels.UpdateProductCommand, TransactionStatus) |  | 0% | | n/a | 1 | 1 | 15 | 15 | 1 | 1 |
| createNewProduct(CatalogModels.CreateProductCommand, long) |  | 0% | | n/a | 1 | 1 | 5 | 5 | 1 | 1 |
| lambda$confirmMedia$17(Long, Long, String, int, String, ObjectStorage.StoredObject, TransactionStatus) |   | 72% |   | 50% | 2 | 4 | 6 | 24 | 0 | 1 |
| listBrands() |  | 0% | | n/a | 1 | 1 | 6 | 6 | 1 | 1 |
| requireMediaOwner(Long, Long) |   | 26% |   | 16% | 3 | 4 | 4 | 7 | 0 | 1 |
| updateProduct(Long, CatalogModels.UpdateProductCommand) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| lambda$publishProduct$15(Long, int, TransactionStatus) |   | 87% |   | 50% | 2 | 3 | 2 | 16 | 0 | 1 |
| validateSkuCommands(List) |   | 70% |   | 66% | 2 | 4 | 2 | 8 | 0 | 1 |
| extensionFor(String) |   | 55% |   | 25% | 3 | 4 | 3 | 5 | 0 | 1 |
| normalizeProductStatus(String) |   | 55% |   | 50% | 1 | 2 | 3 | 5 | 0 | 1 |
| normalizeMediaType(String) |   | 68% |   | 50% | 2 | 3 | 1 | 5 | 0 | 1 |
| lambda$createNewProduct$2(CatalogModels.CreateSkuCommand) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| confirmMedia(Long, Long, String, int) |   | 91% |   | 50% | 1 | 2 | 1 | 9 | 0 | 1 |
| lambda$unpublishProduct$16(Long, int, TransactionStatus) |   | 90% |   | 50% | 1 | 2 | 1 | 11 | 0 | 1 |
| categoryView(CategoryEntity) |   | 77% |   | 50% | 1 | 2 | 1 | 4 | 0 | 1 |
| requireSameMediaConfirmation(ProductMediaEntity, Long, Long, int) |   | 76% |   | 50% | 3 | 4 | 1 | 5 | 0 | 1 |
| requireActiveCategory(Long) |   | 76% |   | 50% | 2 | 3 | 1 | 4 | 0 | 1 |
| requireActiveBrand(Long) |   | 76% |   | 50% | 2 | 3 | 1 | 4 | 0 | 1 |
| validateMedia(String, long) |   | 76% |   | 50% | 3 | 4 | 1 | 4 | 0 | 1 |
| lambda$findCreatedProduct$13(long, String, TransactionStatus) |   | 76% |   | 50% | 1 | 2 | 1 | 5 | 0 | 1 |
| brandView(BrandEntity) |   | 70% |   | 50% | 1 | 2 | 1 | 3 | 0 | 1 |
| requireProduct(Long) |   | 66% |   | 50% | 1 | 2 | 1 | 4 | 0 | 1 |
| requireUpdated(int) |   | 44% |   | 50% | 1 | 2 | 1 | 3 | 0 | 1 |
| createProduct(CatalogModels.CreateProductCommand) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| lambda$signAdminProductSummaries$19(CatalogService.ProductSummarySnapshot) |   | 86% |   | 50% | 1 | 2 | 0 | 12 | 0 | 1 |
| lambda$listProductsByCursor$5(String, String, Long, int, TransactionStatus) |   | 96% |   | 91% | 1 | 7 | 0 | 15 | 0 | 1 |
| lambda$listAdminProducts$4(String, Long, String, long, long, TransactionStatus) |   | 94% |   | 50% | 2 | 3 | 0 | 10 | 0 | 1 |
| lambda$listProducts$3(Long, String, long, long, TransactionStatus) |   | 96% |   | 50% | 1 | 2 | 0 | 10 | 0 | 1 |
| listActiveProductSummaries(List) |   | 89% |   | 50% | 1 | 2 | 1 | 5 | 0 | 1 |
| hasMoreThanTwoFractionDigits(BigDecimal) |   | 77% |   | 50% | 1 | 2 | 0 | 1 | 0 | 1 |
| createNewProduct(CatalogModels.CreateProductCommand, long, CategoryEntity, BrandEntity, Instant) |  | 100% |  | 100% | 0 | 2 | 0 | 30 | 0 | 1 |
| productSummarySnapshots(List) |  | 100% |  | 100% | 0 | 2 | 0 | 17 | 0 | 1 |
| productCreateFingerprint(CatalogModels.CreateProductCommand) |  | 100% |  | 100% | 0 | 2 | 0 | 15 | 0 | 1 |
| lambda$createProduct$1(CatalogModels.CreateProductCommand, long, String, TransactionStatus) |  | 100% |   | 83% | 1 | 4 | 0 | 15 | 0 | 1 |
| lambda$productSummarySnapshots$6(Map, Map, Map, Map, ProductSpuEntity) |  | 100% | | n/a | 0 | 1 | 0 | 17 | 0 | 1 |
| loadProductDetail(ProductSpuEntity) |  | 100% | | n/a | 0 | 1 | 0 | 9 | 0 | 1 |
| createUploadIntent(Long, String, long) |  | 100% | | n/a | 0 | 1 | 0 | 9 | 0 | 1 |
| createCategory(Long, String, String, int) |  | 100% |  | 100% | 0 | 2 | 0 | 14 | 0 | 1 |
| CatalogService(CategoryMapper, BrandMapper, ProductSpuMapper, ProductSkuMapper, ProductMediaMapper, CatalogProductCreateCommandRepository, ObjectStorage, CatalogReadRequirement, ProductDetailCache, CatalogSearchOutboxService, MediaStorageProperties, TransactionTemplate) |  | 100% | | n/a | 0 | 1 | 0 | 14 | 0 | 1 |
| createBrand(String, String) |  | 100% | | n/a | 0 | 1 | 0 | 10 | 0 | 1 |
| productDetail(ProductSpuEntity, CategoryEntity, BrandEntity, List, List) |  | 100% | | n/a | 0 | 1 | 0 | 11 | 0 | 1 |
| listAdminProducts(long, long, String, Long, String) |  | 100% | | n/a | 0 | 1 | 0 | 8 | 0 | 1 |
| getProduct(Long) |  | 100% |  | 100% | 0 | 2 | 0 | 6 | 0 | 1 |
| signMediaUrls(CatalogModels.ProductDetail) |  | 100% | | n/a | 0 | 1 | 0 | 11 | 0 | 1 |
| lambda$listActiveProductSummaries$8(List, TransactionStatus) |  | 100% | | n/a | 0 | 1 | 0 | 8 | 0 | 1 |
| validatePrices(BigDecimal, BigDecimal) |  | 100% |   | 64% | 5 | 8 | 0 | 7 | 0 | 1 |
| listProducts(long, long, Long, String) |  | 100% | | n/a | 0 | 1 | 0 | 7 | 0 | 1 |
| listCategories() |  | 100% | | n/a | 0 | 1 | 0 | 6 | 0 | 1 |
| listProductsByCursor(int, Long, String, String) |  | 100% | | n/a | 0 | 1 | 0 | 6 | 0 | 1 |
| lambda$signProductSummaries$18(CatalogService.ProductSummarySnapshot) |  | 100% |  | 100% | 0 | 2 | 0 | 10 | 0 | 1 |
| entitiesById(List, Function) |  | 100% |  | 100% | 0 | 2 | 0 | 5 | 0 | 1 |
| loadActiveProductDetail(Long) |  | 100% |   | 75% | 1 | 3 | 0 | 4 | 0 | 1 |
| skuView(ProductSkuEntity) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| signMediaUrl(CatalogModels.MediaView) |  | 100% | | n/a | 0 | 1 | 0 | 8 | 0 | 1 |
| mediaView(ProductMediaEntity) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| safeDownloadUrl(String) |  | 100% | | n/a | 0 | 1 | 0 | 5 | 0 | 1 |
| createProduct(long, String, CatalogModels.CreateProductCommand) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| decodeCursor(String) |  | 100% |  | 100% | 0 | 2 | 0 | 5 | 0 | 1 |
| findCreatedProduct(long, String) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| publishProduct(Long, int) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| unpublishProduct(Long, int) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| getAdminProduct(Long) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| requireVersion(Integer, int) |  | 100% |   | 75% | 1 | 3 | 0 | 3 | 0 | 1 |
| static {...} |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| canonicalMoney(BigDecimal) |  | 100% |  | 100% | 0 | 2 | 0 | 1 | 0 | 1 |
| ids(List, Function) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| signProductSummaries(List) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| signAdminProductSummaries(List) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| lambda$createProduct$0(CatalogModels.CreateSkuCommand) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| lambda$getAdminProduct$12(Long, TransactionStatus) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| lambda$listActiveProductSummaries$7(ProductSpuEntity) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| lambda$getProduct$11() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| lambda$getProduct$10(Long) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| lambda$getProduct$9(Long, TransactionStatus) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |