diff --git a/src/controllers/categoriesController.ts b/src/controllers/categoriesController.ts index b3a31a61..978da633 100644 --- a/src/controllers/categoriesController.ts +++ b/src/controllers/categoriesController.ts @@ -1,23 +1,40 @@ import { Request, Response } from 'express'; -import { Category, CategoryCreationAttributes } from '../database/models/Category'; +import { Category } from '../database/models/Category'; import logger from '../logs/config'; +import uploadImage from '../helpers/claudinary'; export const createCategory = async (req: Request, res: Response) => { try { - const { name, description } = req.body as CategoryCreationAttributes; - await Category.create({ - name, - description, - }); - res.status(201).json({ ok: true, message: 'New category created successully!' }); - } catch (error) { + const { name, description } = req.body as { name: string; description: string }; + const image = req.file; + + if (image) { + const imageBuffer: Buffer = image.buffer; + try { + const url = await uploadImage(imageBuffer); + + await Category.create({ name, description, image: url }); + + return res.status(201).json({ + ok: true, + message: 'New category created successfully!', + imageUrl: url, + }); + } catch (error: any) { + return res.status(500).json({ message: 'Error uploading image', error: error.message }); + } + } else { + return res.status(400).json({ message: 'Image is required' }); + } + } catch (error: any) { if (error instanceof Error) { logger.error(error.message); } - res.status(500).json({ error: 'Failed to create category' }); + return res.status(500).json({ error: 'Failed to create category', message: error.message }); } }; -export const getAllCategories = async (req: Request, res: Response) => { + +export const getAllCategories: any = async (req: Request, res: Response) => { try { const categories = await Category.findAll(); res.status(200).json({ ok: true, data: categories }); diff --git a/src/database/migrations/20240620145819-add-image-to-categories.js b/src/database/migrations/20240620145819-add-image-to-categories.js new file mode 100644 index 00000000..aacf842c --- /dev/null +++ b/src/database/migrations/20240620145819-add-image-to-categories.js @@ -0,0 +1,15 @@ +'use strict'; + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.addColumn('categories', 'image', { + type: Sequelize.STRING, + allowNull: true, + }); + }, + + async down(queryInterface, Sequelize) { + await queryInterface.removeColumn('categories', 'image'); + }, +}; diff --git a/src/database/models/Category.ts b/src/database/models/Category.ts index 8226ac10..2c49e632 100644 --- a/src/database/models/Category.ts +++ b/src/database/models/Category.ts @@ -5,6 +5,7 @@ interface CategoryAttributes { id: number; name: string; description?: string; + image?: string; } export interface CategoryCreationAttributes extends Optional {} @@ -13,6 +14,7 @@ export class Category extends Model