Files
bewell-in-ua/actions/admin/category.ts
2025-02-05 08:01:14 +02:00

60 lines
1.5 KiB
TypeScript

'use server'
import {CategoryLocale} from '@prisma/client'
import {z} from 'zod'
import {getCategoryBySlug} from '@/actions/model/category'
import {i18nLocalesCodes} from '@/i18n-config'
import {STORE_ID} from '@/lib/config/constants'
import {db} from '@/lib/db/prisma/client'
import {createCategoryFormSchema} from '@/lib/schemas/admin/category'
import {cleanEmptyParams, dbErrorHandling, slug as slugger} from '@/lib/utils'
export const onCategoryCreateAction = async (
formData: z.infer<typeof createCategoryFormSchema>
) => {
const validatedData = createCategoryFormSchema.parse(formData)
if (!validatedData) {
return {error: 'Недійсні вхідні дані'}
}
if (validatedData.locales.length < i18nLocalesCodes.length) {
return {error: 'Заповніть всі мови'}
}
const locales: CategoryLocale[] = []
for (const i in validatedData.locales) {
const locale = validatedData.locales[i]
const {title, lang} = locale
const slug = slugger(title, lang)
const result = await getCategoryBySlug({slug, lang})
if (!result) {
const normalized: any = cleanEmptyParams({slug, ...locale})
locales.push(normalized)
} else {
return {error: `Категорія ${title} вже існує`}
}
}
try {
const newCategory = await db.category.create({
data: {
storeId: STORE_ID,
status: true,
// position: 0,
locales: {
create: locales
}
}
})
return {success: JSON.stringify(newCategory, null, 2)}
} catch (error) {
return dbErrorHandling(error)
}
}