/
morlli
/
zavav
Обзор
Документация
Войти
/
morlli
/
zavav
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
server/controllers/petController.js
164 строки
4 KB
morlli
34
28 май 2026, 19:48
28 май 2026, 19:48
3299f08
Код
Авторство
О чём код?
const Pet = require('../models/Pet'); const User = require('../models/User'); // Get all pets with optional filtering exports.getAllPets = async (req, res) => { try { const { species, breed, age, gender, size, color, status, shelterId } = req.query; // Build filter object const filter = {}; if (species) filter.species = species; if (breed) filter.breed = breed; if (age) filter.age = age; if (gender) filter.gender = gender; if (size) filter.size = size; if (color) filter.color = color; if (status) filter.status = status; if (shelterId) filter.shelterId = shelterId; const pets = await Pet.find(filter) .populate('shelterId', 'name email phone') .sort({ createdAt: -1 }); res.json(pets); } catch (error) { res.status(500).json({ message: 'Server error', error: error.message }); } }; // Get pet by ID exports.getPetById = async (req, res) => { try { const pet = await Pet.findById(req.params.id) .populate('shelterId', 'name email phone address'); if (!pet) { return res.status(404).json({ message: 'Pet not found' }); } res.json(pet); } catch (error) { res.status(500).json({ message: 'Server error', error: error.message }); } }; // Create new pet (shelter only) exports.createPet = async (req, res) => { try { const { name, species, breed, age, gender, size, color, description, images } = req.body; // Validate required fields if (!name || !species || !age || !gender || !size || !color || !description || !images || images.length === 0) { return res.status(400).json({ message: 'All fields are required' }); } // Verify user is a shelter if (req.user.role !== 'shelter' && req.user.role !== 'admin') { return res.status(403).json({ message: 'Access denied. Only shelters can add pets' }); } // Create new pet const pet = new Pet({ name, species, breed, age, gender, size, color, description, images, shelterId: req.user.id }); await pet.save(); res.status(201).json(pet); } catch (error) { res.status(500).json({ message: 'Server error', error: error.message }); } }; // Update pet (shelter or admin only) exports.updatePet = async (req, res) => { try { const { name, species, breed, age, gender, size, color, description, images, status } = req.body; const pet = await Pet.findById(req.params.id); if (!pet) { return res.status(404).json({ message: 'Pet not found' }); } // Verify user owns this pet or is admin if (pet.shelterId.toString() !== req.user.id && req.user.role !== 'admin') { return res.status(403).json({ message: 'Access denied' }); } // Update fields if (name) pet.name = name; if (species) pet.species = species; if (breed) pet.breed = breed; if (age) pet.age = age; if (gender) pet.gender = gender; if (size) pet.size = size; if (color) pet.color = color; if (description) pet.description = description; if (images) pet.images = images; if (status) { if (['available', 'pending', 'adopted'].includes(status)) { pet.status = status; } else { return res.status(400).json({ message: 'Invalid status' }); } } await pet.save(); res.json(pet); } catch (error) { res.status(500).json({ message: 'Server error', error: error.message }); } }; // Delete pet (shelter or admin only) exports.deletePet = async (req, res) => { try { const pet = await Pet.findById(req.params.id); if (!pet) { return res.status(404).json({ message: 'Pet not found' }); } // Verify user owns this pet or is admin if (pet.shelterId.toString() !== req.user.id && req.user.role !== 'admin') { return res.status(403).json({ message: 'Access denied' }); } await pet.remove(); res.json({ message: 'Pet deleted successfully' }); } catch (error) { res.status(500).json({ message: 'Server error', error: error.message }); } };