Skip to content

Commit

Permalink
add uploads 7
Browse files Browse the repository at this point in the history
  • Loading branch information
Aweiro committed Nov 4, 2024
1 parent 7c0cc66 commit b81ba82
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 120 deletions.
2 changes: 0 additions & 2 deletions js/photoloader.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Динамічне визначення базового URL для запитів
const baseUrl = window.location.origin;



// Запит на отримання фотографій
fetch(`${baseUrl}/photos`)
.then(response => {
Expand Down
152 changes: 34 additions & 118 deletions js/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,107 +2,32 @@ const express = require('express');
const multer = require('multer');
const path = require('path');
const cors = require('cors');
const fs = require('fs');
const db = require('./firebase');

const bodyParser = require('body-parser');
const upload = multer({ dest: 'uploads/' });

const { v4: uuidv4 } = require('uuid');
const { Storage } = require('@google-cloud/storage');
const db = require('./firebase'); // Підключення до Firestore

const storage = new Storage();
const bucket = storage.bucket('west-decor.appspot.com'); // замініть на ваш bucket
const { v4: uuidv4 } = require('uuid');


const app = express();
// const PORT = process.env.PORT || 3000;

// Налаштування CORS
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true })); // Додаємо для обробки form-data
app.use(express.urlencoded({ extended: true }));

// Налаштування для зберігання в пам'яті
const upload = multer({ storage: multer.memoryStorage() });

// Налаштування статичних файлів
// app.use('/uploads', express.static(path.join(__dirname, 'uploads')));
app.use('/css', express.static(path.join(__dirname, '../css')));
app.use('/img', express.static(path.join(__dirname, '../img')));
app.use('/js', express.static(path.join(__dirname, '../js')));

// Перевірка та створення директорії uploads
// const uploadDir = path.join(__dirname, 'uploads');
// if (!fs.existsSync(uploadDir)) {
// fs.mkdirSync(uploadDir, { recursive: true });
// }

// Налаштування для зберігання файлів
// const storage = multer.diskStorage({
// destination: (req, file, cb) => {
// cb(null, uploadDir);
// },
// filename: (req, file, cb) => {
// cb(null, Date.now() + path.extname(file.originalname));
// },
// });

// const upload = multer({ storage: storage });

// Функція для читання photos.json
// const readPhotosJson = () => {
// const filePath = path.join(__dirname, 'photos.json');
// if (!fs.existsSync(filePath)) {
// fs.writeFileSync(filePath, JSON.stringify([])); // Створити файл, якщо його немає
// }
// const data = fs.readFileSync(filePath);
// return JSON.parse(data);
// };

// Функція для запису у photos.json
// const writePhotosJson = (photos) => {
// const filePath = path.join(__dirname, 'photos.json');
// fs.writeFileSync(filePath, JSON.stringify(photos, null, 2));
// };

// Маршрути для відображення HTML-сторінок
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, '../index.html'));
});

app.get('/about', (req, res) => {
res.sendFile(path.join(__dirname, '../about.html'));
});

app.get('/admin', (req, res) => {
res.sendFile(path.join(__dirname, '../admin.html'));
});

// Обробка запиту на завантаження фото
// app.post('/upload', upload.single('photo'), (req, res) => {
// console.log("Запит на завантаження фото отримано"); // Лог для підтвердження запиту
// console.log("Дані форми:", req.body);
// console.log("Файл:", req.file);

// const { description, decorName, price } = req.body;
// if (req.file) {
// const photos = readPhotosJson();
// const newPhoto = {
// name: req.file.filename,
// url: `${req.protocol}://${req.get('host')}/uploads/${req.file.filename}`,
// description: description || 'Опис відсутній',
// decorName: decorName || 'Назва декору відсутня',
// price: price ? parseFloat(price) : 0
// };
// photos.push(newPhoto);
// writePhotosJson(photos);

// console.log("Фото успішно збережено:", newPhoto); // Лог для підтвердження збереження
// res.status(200).json({ message: 'Фото успішно завантажено!', file: newPhoto });
// } else {
// console.log("Фото не завантажено"); // Лог для випадку, коли файл не завантажено
// res.status(400).json({ message: 'Не вдалося завантажити фото.' });
// }
// });
// Маршрути для HTML-сторінок
app.get('/', (req, res) => res.sendFile(path.join(__dirname, '../index.html')));
app.get('/about', (req, res) => res.sendFile(path.join(__dirname, '../about.html')));
app.get('/admin', (req, res) => res.sendFile(path.join(__dirname, '../admin.html')));

// Отримання списку фото
// Отримання списку фото з Firestore
app.get('/photos', async (req, res) => {
try {
const photosSnapshot = await db.collection('photos').get();
Expand All @@ -114,17 +39,12 @@ app.get('/photos', async (req, res) => {
}
});


// Додавання нового фото




// Завантаження нового фото
app.post('/upload', upload.single('photo'), (req, res) => {
const { description, decorName, price } = req.body;
if (req.file) {
const uniqueToken = uuidv4();
const blob = bucket.file(`uploads/${req.file.filename}`);
const blob = bucket.file(`uploads/${req.file.originalname}`);
const blobStream = blob.createWriteStream({
metadata: {
contentType: req.file.mimetype,
Expand All @@ -143,7 +63,7 @@ app.post('/upload', upload.single('photo'), (req, res) => {
const publicUrl = `https://firebasestorage.googleapis.com/v0/b/${bucket.name}/o/${encodeURIComponent(blob.name)}?alt=media&token=${uniqueToken}`;

const newPhoto = {
name: req.file.filename,
name: req.file.originalname,
url: publicUrl,
description: description || 'Опис відсутній',
decorName: decorName || 'Назва декору відсутня',
Expand All @@ -166,32 +86,28 @@ app.post('/upload', upload.single('photo'), (req, res) => {
}
});



// Видалення фото
// Видалення фото з Firestore
app.delete('/photos/:name', async (req, res) => {
const photoName = req.params.name;

try {
const photoSnapshot = await db.collection('photos').where('name', '==', photoName).get();

if (photoSnapshot.empty) {
return res.status(404).json({ message: 'Фото не знайдено.' });
}
const photoName = req.params.name;
try {
const photoSnapshot = await db.collection('photos').where('name', '==', photoName).get();
if (photoSnapshot.empty) {
return res.status(404).json({ message: 'Фото не знайдено.' });
}

photoSnapshot.forEach(async doc => {
await doc.ref.delete();
});

res.status(200).json({ message: 'Фото успішно видалено.' });
} catch (error) {
console.error('Помилка видалення фото з Firestore:', error);
res.status(500).json({ message: 'Не вдалося видалити фото.' });
}
photoSnapshot.forEach(async doc => {
await doc.ref.delete();
});
res.status(200).json({ message: 'Фото успішно видалено.' });
} catch (error) {
console.error('Помилка видалення фото з Firestore:', error);
res.status(500).json({ message: 'Не вдалося видалити фото.' });
}
});


// Запуск сервера
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
console.log(`Server is running on port ${PORT}`);
});

0 comments on commit b81ba82

Please sign in to comment.