import supabase from '../../lib/supabase';
export default async function handler(req, res) {
if (req.method !== 'POST') {
return res.status(405).json({ error: 'METHOD NOT ALLOWED' });
}
const { error } = await supabase.auth.signOut();
if (error) {
return res.status(500).json({ error: error.message });
}
res.status(200).json({ message: 'LOGOUT SUCCESS' });
}
import supabase from '../../lib/supabase';
import { IncomingForm } from 'formidable';
import fs from 'fs';
export const config = {
api: {
bodyParser: false,
}
};
export default async function handler(req, res) {
if (req.method !== 'POST') {
return res.status(405).json({ error: 'METHODS NOT ALLOWED' });
}
const form = new IncomingForm({ keepExtensions: true, multiples: true });
form.parse(req, async (err, fields, files) => {
if (err) {
return res.status(500).json({ error: 'ファイルの解析に失敗しました' });
}
console.log('Fields:', fields);
console.log('Files:', files);
const name = Array.isArray(fields.name) ? fields.name[0] : fields.name;
const price = Array.isArray(fields.price) ? fields.price[0] : fields.price;
const description = Array.isArray(fields.description) ? fields.description[0] : fields.description;
const quantity = Array.isArray(fields.quantity) ? fields.quantity[0] : fields.quantity;
const user = Array.isArray(fields.user) ? fields.user[0] : fields.user;
// 画像が1枚以上あるか確認します
const imageFiles = Object.values(files).flat();
if (imageFiles.length === 0) {
return res.status(400).json({ error: '画像がありません' });
}
const imageUrls = [];
// 画像をSupabaseストレージにアップロード
for (const imageFile of imageFiles) {
// ファイルがアップロードされていない場合はcontinue
if (!imageFile.originalFilename) continue;
const imgFilePath = imageFile.filepath || imageFile.filePath;
if (!imgFilePath) continue;
// ファイルの拡張子やパスを取得します
const fileExt = imageFile.originalFilename.split('.').pop();
const fileName = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}.${fileExt}`;
const filePath = `products/${fileName}`;
const fileBuffer = fs.readFileSync(imgFilePath);
// Supabaseストレージにアップロード
const { data: uploadData, error: uploadError } = await supabase.storage
.from('productBucket')
.upload(filePath, fileBuffer, {
contentType: imageFile.mimetype,
});
// エラーハンドリング
if (uploadError) {
console.error('Supabase Storage Upload Error:', uploadError);
return res.status(500).json({ error: uploadError.message });
}
console.log('Upload Success:', uploadData);
// 画像の公開URLを取得
const { data: publicURL } = supabase.storage.from('productBucket').getPublicUrl(filePath);
console.log('Public URL:', publicURL);
if (publicURL.publicUrl) {
imageUrls.push(publicURL.publicUrl);
}
}
// Supabaseデータベースに商品情報を追加
const { data, error } = await supabase.from('products').insert([
{ name, price: parseInt(price, 10), description, quantity, user, image_url: imageUrls },
]);
// エラーハンドリング
if (error) {
console.error('Supabase Insert Error:', error);
return res.status(500).json({ error: error.message });
}
return res.status(200).json({ message: 'PRODUCT ADDED SUCCESSFULLY', data });
});
};