Добавлен новый компонент для компактного выбора кампаний в AdvertisingTab, обновлены интерфейсы для типизации данных API. Реализован GraphQL запрос для получения списка кампаний Wildberries. Оптимизирована логика отображения статистики кампаний и добавлены новые поля для обработки данных. Обновлены резолверы и типы для поддержки новых данных.

This commit is contained in:
Bivekich
2025-07-28 13:19:27 +03:00
parent 17c929b507
commit 6fbb570282
4 changed files with 966 additions and 257 deletions

View File

@ -5836,6 +5836,73 @@ const wildberriesQueries = {
};
}
},
getWildberriesCampaignsList: async (
_: unknown,
__: unknown,
context: Context
) => {
if (!context.user) {
throw new GraphQLError("Требуется авторизация", {
extensions: { code: "UNAUTHENTICATED" },
});
}
try {
// Получаем организацию пользователя и её WB API ключ
const user = await prisma.user.findUnique({
where: { id: context.user.id },
include: {
organization: {
include: {
apiKeys: true,
},
},
},
});
if (!user?.organization) {
throw new GraphQLError("Организация не найдена");
}
if (user.organization.type !== "SELLER") {
throw new GraphQLError("Доступно только для продавцов");
}
const wbApiKeyRecord = user.organization.apiKeys?.find(
(key) => key.marketplace === "WILDBERRIES" && key.isActive
);
if (!wbApiKeyRecord) {
throw new GraphQLError("WB API ключ не настроен");
}
// Создаем экземпляр сервиса
const wbService = new WildberriesService(wbApiKeyRecord.apiKey);
// Получаем список кампаний
const campaignsList = await wbService.getCampaignsList();
return {
success: true,
data: campaignsList,
message: null,
};
} catch (error) {
console.error("Error fetching WB campaigns list:", error);
return {
success: false,
message:
error instanceof Error
? error.message
: "Ошибка получения списка кампаний",
data: {
adverts: [],
all: 0,
},
};
}
},
};
// Добавляем админ запросы и мутации к основным резолверам