Добавлено новое поле типа товара в модель Product и соответствующие изменения в компонентах, формах и GraphQL запросах. Реализована логика выбора типа товара в интерфейсе, обновлены резолверы и типы для поддержки нового поля. Улучшена обработка данных и интерфейс для отображения типа товара.
This commit is contained in:
@ -202,6 +202,10 @@ export const resolvers = {
|
||||
JSON: JSONScalar,
|
||||
DateTime: DateTimeScalar,
|
||||
|
||||
Product: {
|
||||
type: (parent: any) => parent.type || "PRODUCT",
|
||||
},
|
||||
|
||||
Query: {
|
||||
me: async (_: unknown, __: unknown, context: Context) => {
|
||||
if (!context.user) {
|
||||
@ -1248,13 +1252,13 @@ export const resolvers = {
|
||||
try {
|
||||
const categories = await prisma.category.findMany({
|
||||
orderBy: {
|
||||
name: 'asc'
|
||||
}
|
||||
name: "asc",
|
||||
},
|
||||
});
|
||||
return categories;
|
||||
} catch (error) {
|
||||
console.error('Ошибка получения категорий:', error);
|
||||
throw new GraphQLError('Не удалось получить категории');
|
||||
console.error("Ошибка получения категорий:", error);
|
||||
throw new GraphQLError("Не удалось получить категории");
|
||||
}
|
||||
},
|
||||
},
|
||||
@ -1652,8 +1656,8 @@ export const resolvers = {
|
||||
|
||||
console.log(`🔍 Validating ${marketplace} API key:`, {
|
||||
keyLength: apiKey.length,
|
||||
keyPreview: apiKey.substring(0, 20) + '...',
|
||||
validateOnly
|
||||
keyPreview: apiKey.substring(0, 20) + "...",
|
||||
validateOnly,
|
||||
});
|
||||
|
||||
// Валидируем API ключ
|
||||
@ -1666,7 +1670,10 @@ export const resolvers = {
|
||||
console.log(`✅ Validation result for ${marketplace}:`, validationResult);
|
||||
|
||||
if (!validationResult.isValid) {
|
||||
console.log(`❌ Validation failed for ${marketplace}:`, validationResult.message);
|
||||
console.log(
|
||||
`❌ Validation failed for ${marketplace}:`,
|
||||
validationResult.message
|
||||
);
|
||||
return {
|
||||
success: false,
|
||||
message: validationResult.message,
|
||||
@ -3396,6 +3403,7 @@ export const resolvers = {
|
||||
description?: string;
|
||||
price: number;
|
||||
quantity: number;
|
||||
type?: "PRODUCT" | "CONSUMABLE";
|
||||
categoryId?: string;
|
||||
brand?: string;
|
||||
color?: string;
|
||||
@ -3453,6 +3461,7 @@ export const resolvers = {
|
||||
description: args.input.description,
|
||||
price: args.input.price,
|
||||
quantity: args.input.quantity,
|
||||
type: args.input.type || "PRODUCT",
|
||||
categoryId: args.input.categoryId,
|
||||
brand: args.input.brand,
|
||||
color: args.input.color,
|
||||
@ -3496,6 +3505,7 @@ export const resolvers = {
|
||||
description?: string;
|
||||
price: number;
|
||||
quantity: number;
|
||||
type?: "PRODUCT" | "CONSUMABLE";
|
||||
categoryId?: string;
|
||||
brand?: string;
|
||||
color?: string;
|
||||
@ -3564,6 +3574,7 @@ export const resolvers = {
|
||||
description: args.input.description,
|
||||
price: args.input.price,
|
||||
quantity: args.input.quantity,
|
||||
...(args.input.type && { type: args.input.type }),
|
||||
categoryId: args.input.categoryId,
|
||||
brand: args.input.brand,
|
||||
color: args.input.color,
|
||||
@ -5049,39 +5060,36 @@ export const resolvers = {
|
||||
// Мутации для категорий
|
||||
const categoriesMutations = {
|
||||
// Создать категорию
|
||||
createCategory: async (
|
||||
_: unknown,
|
||||
args: { input: { name: string } }
|
||||
) => {
|
||||
createCategory: async (_: unknown, args: { input: { name: string } }) => {
|
||||
try {
|
||||
// Проверяем есть ли уже категория с таким именем
|
||||
const existingCategory = await prisma.category.findUnique({
|
||||
where: { name: args.input.name }
|
||||
where: { name: args.input.name },
|
||||
});
|
||||
|
||||
if (existingCategory) {
|
||||
return {
|
||||
success: false,
|
||||
message: 'Категория с таким названием уже существует'
|
||||
message: "Категория с таким названием уже существует",
|
||||
};
|
||||
}
|
||||
|
||||
const category = await prisma.category.create({
|
||||
data: {
|
||||
name: args.input.name
|
||||
}
|
||||
name: args.input.name,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'Категория успешно создана',
|
||||
category
|
||||
message: "Категория успешно создана",
|
||||
category,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Ошибка создания категории:', error);
|
||||
console.error("Ошибка создания категории:", error);
|
||||
return {
|
||||
success: false,
|
||||
message: 'Ошибка при создании категории'
|
||||
message: "Ошибка при создании категории",
|
||||
};
|
||||
}
|
||||
},
|
||||
@ -5089,94 +5097,93 @@ const categoriesMutations = {
|
||||
// Обновить категорию
|
||||
updateCategory: async (
|
||||
_: unknown,
|
||||
args: { id: string, input: { name: string } }
|
||||
args: { id: string; input: { name: string } }
|
||||
) => {
|
||||
try {
|
||||
// Проверяем существует ли категория
|
||||
const existingCategory = await prisma.category.findUnique({
|
||||
where: { id: args.id }
|
||||
where: { id: args.id },
|
||||
});
|
||||
|
||||
if (!existingCategory) {
|
||||
return {
|
||||
success: false,
|
||||
message: 'Категория не найдена'
|
||||
message: "Категория не найдена",
|
||||
};
|
||||
}
|
||||
|
||||
// Проверяем не занято ли имя другой категорией
|
||||
const duplicateCategory = await prisma.category.findFirst({
|
||||
where: {
|
||||
where: {
|
||||
name: args.input.name,
|
||||
id: { not: args.id }
|
||||
}
|
||||
id: { not: args.id },
|
||||
},
|
||||
});
|
||||
|
||||
if (duplicateCategory) {
|
||||
return {
|
||||
success: false,
|
||||
message: 'Категория с таким названием уже существует'
|
||||
message: "Категория с таким названием уже существует",
|
||||
};
|
||||
}
|
||||
|
||||
const category = await prisma.category.update({
|
||||
where: { id: args.id },
|
||||
data: {
|
||||
name: args.input.name
|
||||
}
|
||||
name: args.input.name,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'Категория успешно обновлена',
|
||||
category
|
||||
message: "Категория успешно обновлена",
|
||||
category,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Ошибка обновления категории:', error);
|
||||
console.error("Ошибка обновления категории:", error);
|
||||
return {
|
||||
success: false,
|
||||
message: 'Ошибка при обновлении категории'
|
||||
message: "Ошибка при обновлении категории",
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
// Удалить категорию
|
||||
deleteCategory: async (
|
||||
_: unknown,
|
||||
args: { id: string }
|
||||
) => {
|
||||
deleteCategory: async (_: unknown, args: { id: string }) => {
|
||||
try {
|
||||
// Проверяем существует ли категория
|
||||
const existingCategory = await prisma.category.findUnique({
|
||||
where: { id: args.id }
|
||||
where: { id: args.id },
|
||||
});
|
||||
|
||||
if (!existingCategory) {
|
||||
throw new GraphQLError('Категория не найдена');
|
||||
throw new GraphQLError("Категория не найдена");
|
||||
}
|
||||
|
||||
// Проверяем есть ли товары в этой категории
|
||||
const productsCount = await prisma.product.count({
|
||||
where: { categoryId: args.id }
|
||||
where: { categoryId: args.id },
|
||||
});
|
||||
|
||||
if (productsCount > 0) {
|
||||
throw new GraphQLError('Нельзя удалить категорию, в которой есть товары');
|
||||
throw new GraphQLError(
|
||||
"Нельзя удалить категорию, в которой есть товары"
|
||||
);
|
||||
}
|
||||
|
||||
await prisma.category.delete({
|
||||
where: { id: args.id }
|
||||
where: { id: args.id },
|
||||
});
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('Ошибка удаления категории:', error);
|
||||
console.error("Ошибка удаления категории:", error);
|
||||
if (error instanceof GraphQLError) {
|
||||
throw error;
|
||||
}
|
||||
throw new GraphQLError('Ошибка при удалении категории');
|
||||
throw new GraphQLError("Ошибка при удалении категории");
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// Логистические мутации
|
||||
|
Reference in New Issue
Block a user