File size: 1,689 Bytes
a126dda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { prisma } from '../../config/database.js'
import { AppError } from '../../lib/AppError.js'

export async function getFields(templateId) {
  return prisma.templateField.findMany({
    where: { templateId },
    orderBy: { sortOrder: 'asc' },
  })
}

export async function createField(templateId, data) {
  const existing = await prisma.templateField.findUnique({
    where: { templateId_key: { templateId, key: data.key } },
  })
  if (existing) throw new AppError('الحقل موجود بالفعل', 409, 'FIELD_EXISTS')

  return prisma.templateField.create({
    data: { ...data, templateId },
  })
}

export async function updateField(id, data) {
  const field = await prisma.templateField.findUnique({ where: { id } })
  if (!field) throw new AppError('الحقل غير موجود', 404, 'FIELD_NOT_FOUND')

  return prisma.templateField.update({ where: { id }, data })
}

export async function deleteField(id) {
  const field = await prisma.templateField.findUnique({ where: { id } })
  if (!field) throw new AppError('الحقل غير موجود', 404, 'FIELD_NOT_FOUND')

  await prisma.templateField.delete({ where: { id } })
}

export async function reorderFields(templateId, orderedIds) {
  const fields = await prisma.templateField.findMany({ where: { templateId }, select: { id: true } })
  const validIds = new Set(fields.map(f => f.id))
  const unknown = orderedIds.filter(id => !validIds.has(id))
  if (unknown.length > 0) throw new AppError('بعض الحقول غير موجودة', 400, 'INVALID_IDS')

  await prisma.$transaction(
    orderedIds.map((id, index) =>
      prisma.templateField.update({ where: { id }, data: { sortOrder: index } })
    )
  )
}