harmadik gyakorlat

This commit is contained in:
magdo
2026-02-25 20:16:03 +01:00
parent a837f5ecba
commit ffca701b84
34 changed files with 3397 additions and 0 deletions
@@ -0,0 +1,179 @@
import { CreateBlogCommand } from '../../application/commands/CreateBlogCommand.js';
import { UpdateBlogCommand } from '../../application/commands/UpdateBlogCommand.js';
import { DeleteBlogCommand } from '../../application/commands/DeleteBlogCommand.js';
import { GetBlogQuery, GetAllBlogsQuery, GetUserBlogsQuery } from '../../application/queries/BlogQueries.js';
/**
* BlogController
* Blog műveletek kezelése
*/
export class BlogController {
constructor(createHandler, updateHandler, deleteHandler, queryHandler) {
this.createHandler = createHandler;
this.updateHandler = updateHandler;
this.deleteHandler = deleteHandler;
this.queryHandler = queryHandler;
}
/**
* Blog létrehozása
* POST /api/blogs
*/
async createBlog(req, res) {
try {
// FIGYELEM: req.user-t az auth middleware-nek kell beállítania
// Ez a feladat része - implementálandó!
const authorId = req.user?.id;
if (!authorId) {
return res.status(401).json({ error: 'Authentication required' });
}
const command = new CreateBlogCommand({
...req.body,
authorId
});
const blog = await this.createHandler.handle(command);
res.status(201).json({
success: true,
data: blog.toObject()
});
} catch (error) {
res.status(400).json({
success: false,
error: error.message
});
}
}
/**
* Blog módosítása
* PUT /api/blogs/:id
*/
async updateBlog(req, res) {
try {
const userId = req.user?.id;
if (!userId) {
return res.status(401).json({ error: 'Authentication required' });
}
const command = new UpdateBlogCommand(req.params.id, req.body);
// FIGYELEM: Authorization ellenőrzés szükséges!
// Csak a szerző vagy admin módosíthatja
// Ez a feladat része - implementálandó!
const blog = await this.updateHandler.handle(command);
res.json({
success: true,
data: blog.toObject()
});
} catch (error) {
res.status(400).json({
success: false,
error: error.message
});
}
}
/**
* Blog törlése
* DELETE /api/blogs/:id
*/
async deleteBlog(req, res) {
try {
const userId = req.user?.id;
if (!userId) {
return res.status(401).json({ error: 'Authentication required' });
}
const command = new DeleteBlogCommand(req.params.id, userId);
const result = await this.deleteHandler.handle(command);
res.json({
success: true,
message: result.message
});
} catch (error) {
res.status(400).json({
success: false,
error: error.message
});
}
}
/**
* Egy blog lekérése
* GET /api/blogs/:id
*/
async getBlog(req, res) {
try {
const query = new GetBlogQuery(req.params.id);
const blog = await this.queryHandler.handleGetBlog(query);
res.json({
success: true,
data: blog.toObject()
});
} catch (error) {
res.status(404).json({
success: false,
error: error.message
});
}
}
/**
* Összes blog lekérése
* GET /api/blogs
*/
async getAllBlogs(req, res) {
try {
const query = new GetAllBlogsQuery({
publishedOnly: req.query.published === 'true',
limit: req.query.limit ? parseInt(req.query.limit) : undefined,
offset: req.query.offset ? parseInt(req.query.offset) : 0
});
const blogs = await this.queryHandler.handleGetAllBlogs(query);
res.json({
success: true,
data: blogs.map(blog => blog.toObject()),
count: blogs.length
});
} catch (error) {
res.status(400).json({
success: false,
error: error.message
});
}
}
/**
* User blogjai
* GET /api/users/:userId/blogs
*/
async getUserBlogs(req, res) {
try {
const query = new GetUserBlogsQuery(req.params.userId);
const blogs = await this.queryHandler.handleGetUserBlogs(query);
res.json({
success: true,
data: blogs.map(blog => blog.toObject()),
count: blogs.length
});
} catch (error) {
res.status(400).json({
success: false,
error: error.message
});
}
}
}