From 68b90277fb5c6e2c55efe6becc9af50a0eab80df Mon Sep 17 00:00:00 2001 From: elitikka Date: Thu, 19 Feb 2026 11:53:17 +0200 Subject: [PATCH 1/3] Implement avatar management feature with upload, retrieval, and deletion endpoints --- backend/package-lock.json | 121 +++++++++ backend/package.json | 1 + backend/src/controllers/avatarController.js | 280 ++++++++++++++++++++ backend/src/index.js | 2 + backend/src/middleware/avatarUpload.js | 97 +++++++ backend/src/models/Avatar.js | 166 ++++++++++++ backend/src/routes/avatarRoutes.js | 56 ++++ 7 files changed, 723 insertions(+) create mode 100644 backend/src/controllers/avatarController.js create mode 100644 backend/src/middleware/avatarUpload.js create mode 100644 backend/src/models/Avatar.js create mode 100644 backend/src/routes/avatarRoutes.js diff --git a/backend/package-lock.json b/backend/package-lock.json index 8e0b00a..547f38b 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -16,6 +16,7 @@ "express-rate-limit": "^8.2.1", "helmet": "^8.1.0", "jsonwebtoken": "^9.0.2", + "multer": "^2.0.2", "pg": "^8.11.3", "validator": "^13.11.0" }, @@ -50,6 +51,12 @@ "node": ">= 8" } }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -144,6 +151,23 @@ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "license": "BSD-3-Clause" }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -214,6 +238,21 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -914,12 +953,51 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/multer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", + "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", + "object-assign": "^4.1.1", + "type-is": "^1.6.18", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -1261,6 +1339,20 @@ "node": ">= 0.8" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1466,6 +1558,23 @@ "node": ">= 0.8" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1524,6 +1633,12 @@ "node": ">= 0.6" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -1540,6 +1655,12 @@ "node": ">= 0.8" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", diff --git a/backend/package.json b/backend/package.json index eb56908..023668e 100644 --- a/backend/package.json +++ b/backend/package.json @@ -18,6 +18,7 @@ "express-rate-limit": "^8.2.1", "helmet": "^8.1.0", "jsonwebtoken": "^9.0.2", + "multer": "^2.0.2", "pg": "^8.11.3", "validator": "^13.11.0" }, diff --git a/backend/src/controllers/avatarController.js b/backend/src/controllers/avatarController.js new file mode 100644 index 0000000..ec59c08 --- /dev/null +++ b/backend/src/controllers/avatarController.js @@ -0,0 +1,280 @@ +const Avatar = require('../models/Avatar'); +const Pet = require('../models/Pet'); +const path = require('path'); +const fs = require('fs'); + +/** + * Upload a new avatar/image for a pet or user (replaces existing) + * Only pet owner can upload/edit pet avatars + * @route POST /api/avatars + */ +const uploadAvatar = async (req, res) => { + try { + const userId = req.user.userId; + const { pet_id } = req.body; + + // File from multer middleware + if (!req.file) { + return res.status(400).json({ + success: false, + message: 'No file uploaded' + }); + } + + // If pet_id is provided, verify pet ownership (OWNER ONLY) + if (pet_id) { + const petBelongsToUser = await Pet.belongsToUser(pet_id, userId); + if (!petBelongsToUser) { + return res.status(403).json({ + success: false, + message: 'Not authorized to add avatar to this pet' + }); + } + + // Delete existing pet avatar + await Avatar.deleteByPetId(pet_id); + } else { + // If no pet_id, this is a user profile avatar + // Delete existing user avatar + await Avatar.deleteByUserId(userId); + } + + // Create new avatar with safe random filename from multer + const newAvatar = await Avatar.create({ + user_id: userId, + pet_id: pet_id || null, + filename: req.file.filename // Random name from multer (e.g., a3f9c2e1b4d7...jpg) + }); + + res.status(201).json({ + success: true, + message: 'Avatar uploaded successfully', + data: newAvatar + }); + } catch (error) { + console.error('Upload avatar error:', error); + res.status(500).json({ + success: false, + message: 'Failed to upload avatar' + }); + } +}; + +/** + * Get avatar by ID + * @route GET /api/avatars/:id + */ +const getAvatarById = async (req, res) => { + try { + const { id } = req.params; + + const avatar = await Avatar.getById(id); + + if (!avatar) { + return res.status(404).json({ + success: false, + message: 'Avatar not found' + }); + } + + res.status(200).json({ + success: true, + message: 'Avatar retrieved successfully', + data: avatar + }); + } catch (error) { + console.error('Get avatar error:', error); + res.status(500).json({ + success: false, + message: 'Failed to retrieve avatar' + }); + } +}; + +/** + * Download/Get avatar file + * @route GET /api/avatars/:id/download + */ +const downloadAvatar = async (req, res) => { + try { + const { id } = req.params; + + const avatar = await Avatar.getById(id); + + if (!avatar) { + return res.status(404).json({ + success: false, + message: 'Avatar not found' + }); + } + + // Build full file path + const uploadDir = 'uploads/avatars'; + const filepath = path.join(uploadDir, avatar.filename); + + // Check if file exists on disk + if (!fs.existsSync(filepath)) { + return res.status(404).json({ + success: false, + message: 'Image file not found on server' + }); + } + + // Send file to client + // sendFile serves inline (displays in browser/app) + res.sendFile(path.resolve(filepath)); + } catch (error) { + console.error('Download avatar error:', error); + res.status(500).json({ + success: false, + message: 'Failed to download avatar' + }); + } +}; + +/** + * Delete avatar by ID (only pet owner can delete pet avatars) + * @route DELETE /api/avatars/:id + */ +const deleteAvatar = async (req, res) => { + try { + const userId = req.user.userId; + const { id } = req.params; + + // Get avatar to check permissions + const avatar = await Avatar.getById(id); + if (!avatar) { + return res.status(404).json({ + success: false, + message: 'Avatar not found' + }); + } + + // Check if user owns this avatar + const belongsToUser = await Avatar.belongsToUser(id, userId); + if (!belongsToUser) { + return res.status(403).json({ + success: false, + message: 'Not authorized to delete this avatar' + }); + } + + // For pet avatars, only pet owner can delete + if (avatar.pet_id) { + const petBelongsToUser = await Pet.belongsToUser(avatar.pet_id, userId); + if (!petBelongsToUser) { + return res.status(403).json({ + success: false, + message: 'Only pet owner can delete pet avatars' + }); + } + } + + const deleted = await Avatar.deleteById(id); + if (!deleted) { + return res.status(500).json({ + success: false, + message: 'Failed to delete avatar' + }); + } + + res.status(200).json({ + success: true, + message: 'Avatar deleted successfully' + }); + } catch (error) { + console.error('Delete avatar error:', error); + res.status(500).json({ + success: false, + message: 'Failed to delete avatar' + }); + } +}; + +/** + * Get current avatar for a specific pet (only one avatar per pet) + * @route GET /api/avatars/pet/:petId + */ +const getAvatarByPet = async (req, res) => { + try { + const userId = req.user.userId; + const { petId } = req.params; + + if (!petId) { + return res.status(400).json({ + success: false, + message: 'Pet ID required' + }); + } + + // Verify user has access to pet + const hasAccess = await Pet.userHasAccess(petId, userId); + if (!hasAccess) { + return res.status(403).json({ + success: false, + message: 'Not authorized to view this pet' + }); + } + + const avatar = await Avatar.getByPetId(petId); + + if (!avatar) { + return res.status(404).json({ + success: false, + message: 'No avatar found for this pet' + }); + } + + res.status(200).json({ + success: true, + message: 'Pet avatar retrieved successfully', + data: avatar + }); + } catch (error) { + console.error('Get pet avatar error:', error); + res.status(500).json({ + success: false, + message: 'Failed to retrieve pet avatar' + }); + } +}; + +/** + * Get current avatar for authenticated user (only one avatar per user) + * @route GET /api/avatars/user/current + */ +const getAvatarByUser = async (req, res) => { + try { + const userId = req.user.userId; + + const avatar = await Avatar.getByUserId(userId); + + if (!avatar) { + return res.status(404).json({ + success: false, + message: 'No profile avatar found' + }); + } + + res.status(200).json({ + success: true, + message: 'User avatar retrieved successfully', + data: avatar + }); + } catch (error) { + console.error('Get user avatar error:', error); + res.status(500).json({ + success: false, + message: 'Failed to retrieve user avatar' + }); + } +}; + +module.exports = { + uploadAvatar, + getAvatarById, + downloadAvatar, + deleteAvatar, + getAvatarByPet, + getAvatarByUser +}; diff --git a/backend/src/index.js b/backend/src/index.js index fec2230..68ca25b 100644 --- a/backend/src/index.js +++ b/backend/src/index.js @@ -7,6 +7,7 @@ require('dotenv').config(); // Import routes const userRoutes = require('./routes/userRoutes'); const petRoutes = require('./routes/petRoutes'); +const avatarRoutes = require('./routes/avatarRoutes'); const medicationRoutes = require('./routes/medicationRoutes'); const vaccinationRoutes = require('./routes/vaccinationRoutes'); const vetVisitRoutes = require('./routes/vetVisitRoutes'); @@ -70,6 +71,7 @@ app.get('/health', (req, res) => { // API Routes app.use('/api/auth', authLimiter, userRoutes); app.use('/api/pets', authLimiter, petRoutes); +app.use('/api/avatars', authLimiter, avatarRoutes); app.use('/api/medications', authLimiter, medicationRoutes); app.use('/api/vaccinations', authLimiter, vaccinationRoutes); app.use('/api/vet-visits', authLimiter, vetVisitRoutes); diff --git a/backend/src/middleware/avatarUpload.js b/backend/src/middleware/avatarUpload.js new file mode 100644 index 0000000..85730ea --- /dev/null +++ b/backend/src/middleware/avatarUpload.js @@ -0,0 +1,97 @@ +const multer = require('multer'); +const path = require('path'); +const crypto = require('crypto'); +const fs = require('fs'); + +// Create uploads directory if it doesn't exist +const uploadDir = 'uploads/avatars'; +if (!fs.existsSync(uploadDir)) { + fs.mkdirSync(uploadDir, { recursive: true }); +} + +/** + * Configure multer for avatar uploads + * - Stores files with random names for security + * - Validates file types (jpg, png) + * - Limits file size to 500KB + * - Keeps original filename in database for reference + */ +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, uploadDir); + }, + filename: (req, file, cb) => { + // Generate random filename with original extension + const ext = path.extname(file.originalname).toLowerCase(); + const randomName = crypto.randomBytes(16).toString('hex'); + const filename = `${randomName}${ext}`; + cb(null, filename); + } +}); + +/** + * File filter to only allow jpg and png + */ +const fileFilter = (req, file, cb) => { + const allowedMimes = ['image/jpeg', 'image/jpg', 'image/png']; + + if (allowedMimes.includes(file.mimetype)) { + cb(null, true); + } else { + cb(new Error(`Invalid file type: ${file.mimetype}. Only JPG and PNG are allowed.`), false); + } +}; + +/** + * Multer configuration + */ +const upload = multer({ + storage: storage, + fileFilter: fileFilter, + limits: { + fileSize: 500 * 1024 // 500KB max + } +}); + +/** + * Middleware to handle single avatar upload + * Attach to route: router.post('/', authenticateToken, uploadAvatarMiddleware, uploadAvatar); + */ +const uploadAvatarMiddleware = (req, res, next) => { + upload.single('avatar')(req, res, (err) => { + if (err instanceof multer.MulterError) { + if (err.code === 'LIMIT_FILE_SIZE') { + return res.status(400).json({ + success: false, + message: 'File too large. Maximum size is 500KB.' + }); + } + if (err.code === 'LIMIT_UNEXPECTED_FILE') { + return res.status(400).json({ + success: false, + message: 'Too many files uploaded. Only one avatar allowed.' + }); + } + return res.status(400).json({ + success: false, + message: `Upload error: ${err.message}` + }); + } else if (err) { + // Custom error from fileFilter + return res.status(400).json({ + success: false, + message: err.message + }); + } + + // File uploaded successfully + // Attach file info to request for controller to use + if (req.file) { + req.file.originalName = req.file.originalname; + req.file.uploadedPath = `${uploadDir}/${req.file.filename}`; + } + next(); + }); +}; + +module.exports = { uploadAvatarMiddleware, upload }; diff --git a/backend/src/models/Avatar.js b/backend/src/models/Avatar.js new file mode 100644 index 0000000..d7b9c83 --- /dev/null +++ b/backend/src/models/Avatar.js @@ -0,0 +1,166 @@ +const pool = require('../config/database'); + +class Avatar { + /** + * Create a new avatar/image record + * @param {string} user_id - User ID (UUID) + * @param {number} pet_id - Pet ID + * @param {string} filename - Filename of the image + * @returns {Promise} Created avatar record + */ + static async create({ user_id, pet_id, filename }) { + const query = ` + INSERT INTO images (user_id, pet_id, filename) + VALUES ($1, $2, $3) + RETURNING * + `; + + try { + const result = await pool.query(query, [user_id, pet_id, filename]); + return result.rows[0]; + } catch (error) { + throw error; + } + } + + /** + * Get avatar by ID + * @param {number} imageId - Image ID + * @returns {Promise} Avatar object or undefined if not found + */ + static async getById(imageId) { + const query = 'SELECT * FROM images WHERE id = $1'; + + try { + const result = await pool.query(query, [imageId]); + return result.rows[0]; + } catch (error) { + throw error; + } + } + + /** + * Delete avatar by ID + * @param {number} imageId - Image ID + * @returns {Promise} true if avatar was deleted + */ + static async deleteById(imageId) { + const query = 'DELETE FROM images WHERE id = $1 RETURNING id'; + + try { + const result = await pool.query(query, [imageId]); + return result.rows.length > 0; + } catch (error) { + throw error; + } + } + + /** + * Get current avatar for a specific pet + * @param {number} petId - Pet ID + * @returns {Promise} Avatar object or undefined + */ + static async getByPetId(petId) { + const query = ` + SELECT id, user_id, pet_id, filename, created_at + FROM images + WHERE pet_id = $1 + `; + + try { + const result = await pool.query(query, [petId]); + return result.rows[0]; + } catch (error) { + throw error; + } + } + + + /** + * Delete avatar for a pet + * @param {number} petId - Pet ID + * @returns {Promise} true if avatar was deleted + */ + static async deleteByPetId(petId) { + const query = 'DELETE FROM images WHERE pet_id = $1 RETURNING id'; + + try { + const result = await pool.query(query, [petId]); + return result.rows.length > 0; + } catch (error) { + throw error; + } + } + + /** + * Get current avatar for a specific user (only one avatar per user) + * @param {string} userId - User ID (UUID) + * @returns {Promise} Avatar object or undefined + */ + static async getByUserId(userId) { + const query = ` + SELECT id, user_id, pet_id, filename, created_at + FROM images + WHERE user_id = $1 AND pet_id IS NULL + `; + + try { + const result = await pool.query(query, [userId]); + return result.rows[0]; + } catch (error) { + throw error; + } + } + + /** + * Delete user's profile avatar (pet_id is NULL) + * @param {string} userId - User ID (UUID) + * @returns {Promise} true if deleted + */ + static async deleteByUserId(userId) { + const query = 'DELETE FROM images WHERE user_id = $1 AND pet_id IS NULL RETURNING id'; + + try { + const result = await pool.query(query, [userId]); + return result.rows.length > 0; + } catch (error) { + throw error; + } + } + + /** + * Verify if an avatar belongs to a specific user + * @param {number} imageId - Image ID + * @param {string} userId - User ID (UUID) + * @returns {Promise} true if avatar belongs to user + */ + static async belongsToUser(imageId, userId) { + const query = 'SELECT id FROM images WHERE id = $1 AND user_id = $2'; + + try { + const result = await pool.query(query, [imageId, userId]); + return result.rows.length > 0; + } catch (error) { + throw error; + } + } + + /** + * Verify if an avatar is associated with a specific pet + * @param {number} imageId - Image ID + * @param {number} petId - Pet ID + * @returns {Promise} true if avatar belongs to pet + */ + static async belongsToPet(imageId, petId) { + const query = 'SELECT id FROM images WHERE id = $1 AND pet_id = $2'; + + try { + const result = await pool.query(query, [imageId, petId]); + return result.rows.length > 0; + } catch (error) { + throw error; + } + } +} + +module.exports = Avatar; diff --git a/backend/src/routes/avatarRoutes.js b/backend/src/routes/avatarRoutes.js new file mode 100644 index 0000000..e8c38fa --- /dev/null +++ b/backend/src/routes/avatarRoutes.js @@ -0,0 +1,56 @@ +const express = require('express'); +const router = express.Router(); +const { + uploadAvatar, + getAvatarById, + downloadAvatar, + deleteAvatar, + getAvatarByPet, + getAvatarByUser +} = require('../controllers/avatarController'); +const authenticateToken = require('../middleware/authenticateToken'); +const { uploadAvatarMiddleware } = require('../middleware/avatarUpload'); + +/** + * @route GET /api/avatars/user/current + * @desc Get current avatar for authenticated user (only one avatar per user) + * @access Private + */ +router.get('/user/current', authenticateToken, getAvatarByUser); + +/** + * @route GET /api/avatars/pet/:petId + * @desc Get current avatar for a specific pet (only one avatar per pet) + * @access Private + */ +router.get('/pet/:petId', authenticateToken, getAvatarByPet); + +/** + * @route GET /api/avatars/:id/download + * @desc Download/Get avatar file information + * @access Private + */ +router.get('/:id/download', authenticateToken, downloadAvatar); + +/** + * @route GET /api/avatars/:id + * @desc Get a specific avatar by ID + * @access Private + */ +router.get('/:id', authenticateToken, getAvatarById); + +/** + * @route POST /api/avatars + * @desc Upload a new avatar for a pet or user profile (replaces existing) + * @access Private (pet owner only for pet avatars) + */ +router.post('/', authenticateToken, uploadAvatarMiddleware, uploadAvatar); + +/** + * @route DELETE /api/avatars/:id + * @desc Delete an avatar by ID + * @access Private (only owner, pet owner for pet avatars) + */ +router.delete('/:id', authenticateToken, deleteAvatar); + +module.exports = router; From 8f71d9bf7bbc5e5719070e85ad54ceaf0608d765 Mon Sep 17 00:00:00 2001 From: elitikka Date: Thu, 19 Feb 2026 12:51:21 +0200 Subject: [PATCH 2/3] updated avatar controller --- backend/src/controllers/avatarController.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/backend/src/controllers/avatarController.js b/backend/src/controllers/avatarController.js index ec59c08..0a02deb 100644 --- a/backend/src/controllers/avatarController.js +++ b/backend/src/controllers/avatarController.js @@ -170,6 +170,15 @@ const deleteAvatar = async (req, res) => { } } + // Delete file from disk + const uploadDir = 'uploads/avatars'; + const filepath = path.join(uploadDir, avatar.filename); + + if (fs.existsSync(filepath)) { + fs.unlinkSync(filepath); // Delete the file synchronously + } + + // Delete from database const deleted = await Avatar.deleteById(id); if (!deleted) { return res.status(500).json({ From d66351eec3dd9fe64ba3c1cd19cd2fae6c6af9db Mon Sep 17 00:00:00 2001 From: elitikka Date: Thu, 19 Feb 2026 14:10:17 +0200 Subject: [PATCH 3/3] pics --- .../74158174ee13668b04caf740a61858f3.jpg | Bin 0 -> 63370 bytes .../fd99b8f6c6a67590cbecc4ab55646f96.png | Bin 0 -> 30378 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 backend/uploads/avatars/74158174ee13668b04caf740a61858f3.jpg create mode 100644 backend/uploads/avatars/fd99b8f6c6a67590cbecc4ab55646f96.png diff --git a/backend/uploads/avatars/74158174ee13668b04caf740a61858f3.jpg b/backend/uploads/avatars/74158174ee13668b04caf740a61858f3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c10bdf4667370b9ecfbb18e967811da8bdee972 GIT binary patch literal 63370 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