const router = require('express').Router(); const { getSupabaseClient } = require('./supabaseClient'); // GET /profile router.get('/profile', async (req, res) => { const { user_id } = req.query; const supabase = getSupabaseClient(); let { data: userData, error: userError } = await supabase.auth.admin.getUserById(user_id); if (userError) return res.status(400).json({ error: userError.message }); let { data: profileData, error: profileError } = await supabase.from('user_profiles').select(` id, full_name, avatar_url, updated_at `).eq('id', user_id).single(); if (profileError) return res.status(400).json({ error: profileError.message }); // Получаем аватарку из бакета let avatarUrl = null; const avatarPath = `avatars/${user_id}.jpg`; const { data: avatarData } = await supabase.storage.from('sber.mobile').getPublicUrl(avatarPath); if (avatarData) { // Проверяем, существует ли файл const { data: fileData, error: fileError } = await supabase.storage.from('sber.mobile').list('avatars', { search: `${user_id}.jpg` }); if (!fileError && fileData && fileData.length > 0) { avatarUrl = avatarData.publicUrl; } } res.json({ id: profileData.id, username: profileData.full_name, avatar_url: avatarUrl || profileData.avatar_url, phone: userData.user.phone, updated_at: profileData.updated_at }); }); // POST /profile router.post('/profile', async (req, res) => { const { user_id, data } = req.body; const supabase = getSupabaseClient(); const { data: userData, error: userError } = await supabase.auth.admin.updateUserById( user_id, { phone: data.phone } ) if (userError) return res.status(400).json({ error: userError.message }); let avatarUrl = data.avatar_url; // Если передана аватарка в base64, сохраняем в бакет if (data.avatarBase64) { try { // Удаляем старую аватарку const oldAvatarPath = `avatars/${user_id}.jpg`; await supabase.storage.from('sber.mobile').remove([oldAvatarPath]); // Конвертируем base64 в buffer const base64Data = data.avatarBase64.replace(/^data:image\/[a-z]+;base64,/, ''); const buffer = Buffer.from(base64Data, 'base64'); // Загружаем новую аватарку const avatarPath = `avatars/${user_id}.jpg`; const { error: uploadError } = await supabase.storage .from('sber.mobile') .upload(avatarPath, buffer, { contentType: 'image/jpeg', upsert: true }); if (uploadError) { console.error('Ошибка загрузки аватарки:', uploadError); } else { // Получаем публичный URL const { data: urlData } = await supabase.storage .from('sber.mobile') .getPublicUrl(avatarPath); avatarUrl = urlData.publicUrl; } } catch (error) { console.error('Ошибка обработки аватарки:', error); } } let { error: profileError } = await supabase.from('user_profiles').update({ full_name: data.username, avatar_url: avatarUrl, // apartment: data.apartment }).eq('id', user_id).single(); if (profileError) return res.status(400).json({ error: profileError.message }); res.json({ success: true, avatar_url: avatarUrl }); }); // Получить управляющую компанию по квартире router.get('/management-company', async (req, res) => { const supabase = getSupabaseClient(); const { apartment_id } = req.query; if (!apartment_id) return res.status(400).json({ error: 'apartment_id required' }); const { data: apartment, error: err1 } = await supabase.from('apartments').select('building_id').eq('id', apartment_id).single(); if (err1) return res.status(400).json({ error: err1.message }); const { data: building, error: err2 } = await supabase.from('buildings').select('management_company_id').eq('id', apartment.building_id).single(); if (err2) return res.status(400).json({ error: err2.message }); const { data: company, error: err3 } = await supabase.from('management_companies').select('*').eq('id', building.management_company_id).single(); if (err3) return res.status(400).json({ error: err3.message }); res.json(company); }); module.exports = router;