Initial commit: SecourIT Gestion
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
import { NextResponse } from 'next/server'
|
||||
import { prisma } from '@/lib/prisma'
|
||||
import { getCurrentUser } from '@/lib/auth'
|
||||
|
||||
export async function GET(request: Request, { params }: { params: { id: string } }) {
|
||||
try {
|
||||
const user = await getCurrentUser()
|
||||
if (!user) return NextResponse.json({ error: 'Non authentifié' }, { status: 401 })
|
||||
|
||||
const tickets: any[] = await prisma.$queryRawUnsafe(`
|
||||
SELECT t.*, c.name as client_name, c.name as client_company, c.email as client_email,
|
||||
s.name as server_name, s.ip as server_ip
|
||||
FROM "Ticket" t
|
||||
LEFT JOIN "Client" c ON c.id = t."clientId"
|
||||
LEFT JOIN "Server" s ON s.id = t."serverId"
|
||||
WHERE t.id = $1 AND t."userId" = $2
|
||||
`, params.id, user.id)
|
||||
|
||||
if (!tickets.length) {
|
||||
return NextResponse.json({ error: 'Ticket introuvable' }, { status: 404 })
|
||||
}
|
||||
|
||||
const results = await Promise.all([
|
||||
prisma.$queryRawUnsafe(`
|
||||
SELECT * FROM "TicketMessage"
|
||||
WHERE "ticketId" = $1
|
||||
ORDER BY "createdAt" ASC
|
||||
`, params.id),
|
||||
prisma.$queryRawUnsafe(`
|
||||
SELECT id, filename, "contentType", "contentId", "messageId", "createdAt"
|
||||
FROM "TicketAttachment"
|
||||
WHERE "ticketId" = $1
|
||||
ORDER BY "createdAt" ASC
|
||||
`, params.id),
|
||||
])
|
||||
const messages = results[0] as any[]
|
||||
const attachments = results[1] as any[]
|
||||
|
||||
return NextResponse.json({ ...tickets[0], messages, attachments })
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
return NextResponse.json({ error: 'Erreur serveur' }, { status: 500 })
|
||||
}
|
||||
}
|
||||
|
||||
export async function PATCH(request: Request, { params }: { params: { id: string } }) {
|
||||
try {
|
||||
const user = await getCurrentUser()
|
||||
if (!user) return NextResponse.json({ error: 'Non authentifié' }, { status: 401 })
|
||||
|
||||
const body = await request.json()
|
||||
const now = new Date()
|
||||
|
||||
const check: any[] = await prisma.$queryRawUnsafe(`SELECT id FROM "Ticket" WHERE id = $1 AND "userId" = $2`, params.id, user.id)
|
||||
if (!check.length) return NextResponse.json({ error: 'Ticket introuvable' }, { status: 404 })
|
||||
|
||||
const allowed = ['status', 'priority', 'clientId', 'serverId', 'subject', 'description', 'assignedTo']
|
||||
const fields: string[] = []
|
||||
const values: any[] = []
|
||||
let idx = 1
|
||||
|
||||
for (const key of allowed) {
|
||||
if (body[key] !== undefined) {
|
||||
fields.push(`"${key}" = $${idx++}`)
|
||||
values.push(body[key])
|
||||
}
|
||||
}
|
||||
|
||||
if (fields.length === 0) {
|
||||
return NextResponse.json({ error: 'Aucun champ à mettre à jour' }, { status: 400 })
|
||||
}
|
||||
|
||||
fields.push(`"updatedAt" = $${idx++}`)
|
||||
values.push(now)
|
||||
values.push(params.id)
|
||||
values.push(user.id)
|
||||
|
||||
await prisma.$executeRawUnsafe(`
|
||||
UPDATE "Ticket" SET ${fields.join(', ')}
|
||||
WHERE id = $${idx} AND "userId" = $${idx + 1}
|
||||
`, ...values)
|
||||
|
||||
const updated: any[] = await prisma.$queryRawUnsafe(`SELECT * FROM "Ticket" WHERE id = $1`, params.id)
|
||||
return NextResponse.json(updated[0])
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
return NextResponse.json({ error: 'Erreur serveur' }, { status: 500 })
|
||||
}
|
||||
}
|
||||
|
||||
export async function DELETE(request: Request, { params }: { params: { id: string } }) {
|
||||
try {
|
||||
const user = await getCurrentUser()
|
||||
if (!user) return NextResponse.json({ error: 'Non authentifié' }, { status: 401 })
|
||||
|
||||
const check: any[] = await prisma.$queryRawUnsafe(`SELECT id FROM "Ticket" WHERE id = $1 AND "userId" = $2`, params.id, user.id)
|
||||
if (!check.length) return NextResponse.json({ error: 'Ticket introuvable' }, { status: 404 })
|
||||
|
||||
await prisma.$executeRawUnsafe(`DELETE FROM "TicketAttachment" WHERE "ticketId" = $1`, params.id)
|
||||
await prisma.$executeRawUnsafe(`DELETE FROM "TicketMessage" WHERE "ticketId" = $1`, params.id)
|
||||
await prisma.$executeRawUnsafe(`DELETE FROM "Ticket" WHERE id = $1`, params.id)
|
||||
|
||||
return NextResponse.json({ success: true })
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
return NextResponse.json({ error: 'Erreur serveur' }, { status: 500 })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user