93 lines
2.0 KiB
TypeScript
93 lines
2.0 KiB
TypeScript
import { Request, Response } from 'express';
|
|
import { prisma } from '../../../src/lib/prisma';
|
|
|
|
export async function getArticle(req: Request, res: Response) {
|
|
try {
|
|
const article = await prisma.article.findUnique({
|
|
where: { id: req.params.id },
|
|
include: {
|
|
author: {
|
|
select: {
|
|
id: true,
|
|
displayName: true,
|
|
email: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
if (!article) {
|
|
return res.status(404).json({ error: 'Article not found' });
|
|
}
|
|
|
|
res.json(article);
|
|
} catch {
|
|
res.status(500).json({ error: 'Server error' });
|
|
}
|
|
}
|
|
|
|
export async function createArticle(req: Request, res: Response) {
|
|
try {
|
|
const { title, excerpt, content, category, city, coverImage, readTime } = req.body;
|
|
|
|
const article = await prisma.article.create({
|
|
data: {
|
|
title,
|
|
excerpt,
|
|
content,
|
|
category,
|
|
city,
|
|
coverImage,
|
|
readTime,
|
|
authorId: req.user!.id
|
|
},
|
|
include: {
|
|
author: {
|
|
select: {
|
|
id: true,
|
|
displayName: true,
|
|
email: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
res.status(201).json(article);
|
|
} catch {
|
|
res.status(500).json({ error: 'Server error' });
|
|
}
|
|
}
|
|
|
|
export async function updateArticle(req: Request, res: Response) {
|
|
try {
|
|
const article = await prisma.article.update({
|
|
where: { id: req.params.id },
|
|
data: req.body,
|
|
include: {
|
|
author: {
|
|
select: {
|
|
id: true,
|
|
displayName: true,
|
|
email: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
res.json(article);
|
|
} catch {
|
|
res.status(500).json({ error: 'Server error' });
|
|
}
|
|
}
|
|
|
|
export async function deleteArticle(req: Request, res: Response) {
|
|
try {
|
|
await prisma.article.delete({
|
|
where: { id: req.params.id }
|
|
});
|
|
|
|
res.json({ message: 'Article deleted successfully' });
|
|
} catch {
|
|
res.status(500).json({ error: 'Server error' });
|
|
}
|
|
} |