diff --git a/api/src/db.js b/api/src/db.js index 026d623..28d1377 100644 --- a/api/src/db.js +++ b/api/src/db.js @@ -16,7 +16,8 @@ const defaultDb = () => ({ clients: [], stats: [], blogPosts: [], - media: [] + media: [], + contactRequests: [] }) function ensureDataDir() { diff --git a/api/src/index.js b/api/src/index.js index 519177b..61fddd7 100644 --- a/api/src/index.js +++ b/api/src/index.js @@ -249,6 +249,70 @@ app.put('/api/media/:id', authMiddleware, (req, res) => { res.json(updated) }) +app.post('/api/contact-requests', (req, res) => { + const { name, email, phone, category, message } = req.body || {} + + if (!name?.trim() || !email?.trim() || !category?.trim() || !message?.trim()) { + return res.status(400).json({ error: 'نام، ایمیل، نوع پروژه و توضیحات الزامی است' }) + } + + const request = { + id: randomUUID(), + name: name.trim(), + email: email.trim(), + phone: phone?.trim() || '', + category: category.trim(), + message: message.trim(), + status: 'new', + createdAt: new Date().toISOString(), + } + + updateDb((db) => { + if (!Array.isArray(db.contactRequests)) db.contactRequests = [] + db.contactRequests.unshift(request) + }) + + res.status(201).json({ ok: true, id: request.id }) +}) + +app.get('/api/contact-requests', authMiddleware, (_req, res) => { + const requests = readDb().contactRequests || [] + res.json(requests) +}) + +app.patch('/api/contact-requests/:id', authMiddleware, (req, res) => { + const { status } = req.body || {} + if (!['new', 'read', 'archived'].includes(status)) { + return res.status(400).json({ error: 'وضعیت نامعتبر است' }) + } + + let updated = null + updateDb((db) => { + if (!Array.isArray(db.contactRequests)) db.contactRequests = [] + const i = db.contactRequests.findIndex((r) => r.id === req.params.id) + if (i === -1) return + db.contactRequests[i] = { ...db.contactRequests[i], status } + updated = db.contactRequests[i] + }) + + if (!updated) return res.status(404).json({ error: 'درخواست یافت نشد' }) + res.json(updated) +}) + +app.delete('/api/contact-requests/:id', authMiddleware, (req, res) => { + let found = false + updateDb((db) => { + if (!Array.isArray(db.contactRequests)) db.contactRequests = [] + const i = db.contactRequests.findIndex((r) => r.id === req.params.id) + if (i !== -1) { + db.contactRequests.splice(i, 1) + found = true + } + }) + if (!found) return res.status(404).json({ error: 'درخواست یافت نشد' }) + res.status(204).end() +}) + app.delete('/api/media/:id', authMiddleware, (req, res) => { let removed = null updateDb((db) => {