/
IvanRyabchenko
/
random-coffee-backend
Обзор
Документация
Войти
/
IvanRyabchenko
/
random-coffee-backend
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/controllers/product.controller.ts
46 строк
2 KB
Ivan Ryabchenko
feat(categories,products): implement CRUD endpoints with pagination
14 май 2026, 21:01
14 май 2026, 21:01
e356224
Код
Авторство
О чём код?
import type { Context } from 'hono' import { paginationSchema } from '../dto/pagination.dto' import { createProductSchema } from '../dto/product.dto' import { addProduct, getProductById, listProducts, removeProduct } from '../services/product.service' import { handleServiceError } from '../utils/http-error' export async function listProductsController(c: Context): Promise<Response> { const parsed = paginationSchema.safeParse(c.req.query()) if (!parsed.success) { return c.json({ message: 'Invalid query params', statusCode: 400, error: parsed.error.flatten() }, 400) } const result = await listProducts(parsed.data.page, parsed.data.limit) return c.json(result, 200) } export async function getProductController(c: Context): Promise<Response> { try { const product = await getProductById(c.req.param('id') as string) return c.json(product, 200) } catch (err) { return handleServiceError(c, err) } } export async function createProductController(c: Context): Promise<Response> { const body = await c.req.json().catch(() => null) const parsed = createProductSchema.safeParse(body) if (!parsed.success) { return c.json({ message: 'Validation failed', statusCode: 400, error: parsed.error.flatten() }, 400) } try { const product = await addProduct(parsed.data) return c.json(product, 201) } catch (err) { return handleServiceError(c, err) } } export async function deleteProductController(c: Context): Promise<Response> { try { await removeProduct(c.req.param('id') as string) return c.json({ message: 'Product deleted' }, 200) } catch (err) { return handleServiceError(c, err) } }