import { baseAPI } from "@/shared/api/baseAPI";
import { ProductCardDTO } from "@/entities/product/api/types";
import { ProductCard } from "@/entities/product/model/types";
import { mapProductCardDTO } from "@/entities/product/lib/tomap";
export const productAPI = baseAPI.injectEndpoints({
endpoints: build => ({
getProductCards: build.query<ProductCard[], number>({
query: (limit: number = 5) => ({
url: "/products",
method: "GET",
params: {
_limit: limit
}
}),
transformResponse: (response: ProductCardDTO[]) => response.map(mapProductCardDTO),
})
})
});
import { ProductCardDTO } from "@/entities/product/api";
import { ProductCard } from "@/entities/product/model/types";
export function mapProductCardDTO(dto: ProductCardDTO): ProductCard {
return {
id: dto.id,
title: dto.title,
currentPrice: dto.price,
oldPrice: dto.oldPrice,
isNew: dto.isNew,
isTop: dto.isTop,
discount: dto.discount,
sizes: dto.sizes,
imagesSrc: dto.imageSrc,
};
}
export type ProductCardDTO = {
id: number;
title: string;
price: number;
oldPrice: number;
isTop: boolean;
isNew: boolean;
discount: number;
sizes: string[];
imageSrc: string[];
}
export type ProductCard = {
id: number;
title: string;
currentPrice: number;
oldPrice: number;
isNew: boolean;
isTop: boolean;
discount: number;
sizes: string[];
imagesSrc: string[];
}
{
"title": "Боди с драпировкой",
"price": "3 100 ₽",
"old_price": "1",
"is_top": true,
"is_new": false,
"sizes": [
"s",
"m"
],
"image_src": [
"/public/assets/images/categories/sale.png"
]
}
oldPrice: dto.oldPrice
ProductCardDTO
, вовсе не означает, что RTK магически вам все поля, полученные в ответ на запрос, переименует. Если сервер отдаёт old_price
, то так и должно поле в интерфейсе называться. Интерфейс подстраивается под реальность, а не наоборот.