119 lines
4.3 KiB
JavaScript
119 lines
4.3 KiB
JavaScript
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;
|