Update files
This commit is contained in:
parent
5c0d90ec22
commit
7a0ba6b827
|
|
@ -14,6 +14,34 @@ const Tag = require('../models/Tag');
|
|||
const User = require('../models/User');
|
||||
const { extractHashtags } = require('../utils/hashtags');
|
||||
|
||||
// Получить один пост по ID (должен быть ПЕРЕД общим маршрутом GET /)
|
||||
router.get('/:id', authenticate, async (req, res) => {
|
||||
try {
|
||||
const post = await Post.findById(req.params.id)
|
||||
.populate('author', 'username firstName lastName photoUrl')
|
||||
.populate('mentionedUsers', 'username firstName lastName')
|
||||
.populate('comments.author', 'username firstName lastName photoUrl')
|
||||
.exec();
|
||||
|
||||
if (!post) {
|
||||
return res.status(404).json({ error: 'Пост не найден' });
|
||||
}
|
||||
|
||||
// Проверить whitelist настройки пользователя
|
||||
if (req.user.settings.whitelist.noNSFW && post.isNSFW) {
|
||||
return res.status(403).json({ error: 'Пост скрыт настройками' });
|
||||
}
|
||||
if (req.user.settings.whitelist.noHomo && post.isHomo) {
|
||||
return res.status(403).json({ error: 'Пост скрыт настройками' });
|
||||
}
|
||||
|
||||
res.json({ post });
|
||||
} catch (error) {
|
||||
console.error('Ошибка получения поста:', error);
|
||||
res.status(500).json({ error: 'Ошибка сервера' });
|
||||
}
|
||||
});
|
||||
|
||||
// Получить ленту постов
|
||||
router.get('/', authenticate, async (req, res) => {
|
||||
try {
|
||||
|
|
@ -95,34 +123,6 @@ router.get('/', authenticate, async (req, res) => {
|
|||
}
|
||||
});
|
||||
|
||||
// Получить один пост по ID
|
||||
router.get('/:id', authenticate, async (req, res) => {
|
||||
try {
|
||||
const post = await Post.findById(req.params.id)
|
||||
.populate('author', 'username firstName lastName photoUrl')
|
||||
.populate('mentionedUsers', 'username firstName lastName')
|
||||
.populate('comments.author', 'username firstName lastName photoUrl')
|
||||
.exec();
|
||||
|
||||
if (!post) {
|
||||
return res.status(404).json({ error: 'Пост не найден' });
|
||||
}
|
||||
|
||||
// Проверить whitelist настройки пользователя
|
||||
if (req.user.settings.whitelist.noNSFW && post.isNSFW) {
|
||||
return res.status(403).json({ error: 'Пост скрыт настройками' });
|
||||
}
|
||||
if (req.user.settings.whitelist.noHomo && post.isHomo) {
|
||||
return res.status(403).json({ error: 'Пост скрыт настройками' });
|
||||
}
|
||||
|
||||
res.json({ post });
|
||||
} catch (error) {
|
||||
console.error('Ошибка получения поста:', error);
|
||||
res.status(500).json({ error: 'Ошибка сервера' });
|
||||
}
|
||||
});
|
||||
|
||||
// Создать пост
|
||||
router.post('/', authenticate, strictPostLimiter, postCreationLimiter, fileUploadLimiter, uploadPostImages, async (req, res) => {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -33,11 +33,14 @@ export default function Feed({ user }) {
|
|||
|
||||
const loadSpecificPost = async (postId) => {
|
||||
try {
|
||||
setLoading(true)
|
||||
|
||||
// Сначала проверить, есть ли пост уже в загруженных
|
||||
const existingPost = posts.find(p => p._id === postId)
|
||||
|
||||
if (existingPost) {
|
||||
// Если пост уже загружен, просто прокрутить к нему
|
||||
setLoading(false)
|
||||
setTimeout(() => {
|
||||
const element = document.getElementById(`post-${postId}`)
|
||||
if (element) {
|
||||
|
|
@ -48,53 +51,52 @@ export default function Feed({ user }) {
|
|||
}
|
||||
|
||||
// Попытаться загрузить конкретный пост по ID
|
||||
let foundPost = null
|
||||
try {
|
||||
const foundPost = await getPost(postId)
|
||||
|
||||
if (foundPost) {
|
||||
// Если пост найден, добавить его в начало списка
|
||||
setPosts(prev => {
|
||||
const filtered = prev.filter(p => p._id !== postId)
|
||||
return [foundPost, ...filtered]
|
||||
})
|
||||
|
||||
// Прокрутить к посту после загрузки
|
||||
setTimeout(() => {
|
||||
const element = document.getElementById(`post-${postId}`)
|
||||
if (element) {
|
||||
element.scrollIntoView({ behavior: 'smooth', block: 'center' })
|
||||
}
|
||||
}, 100)
|
||||
return
|
||||
}
|
||||
foundPost = await getPost(postId)
|
||||
console.log('[Feed] Загружен конкретный пост:', foundPost?._id)
|
||||
} catch (postError) {
|
||||
console.error('Ошибка загрузки конкретного поста:', postError)
|
||||
console.error('[Feed] Ошибка загрузки конкретного поста:', postError)
|
||||
// Если не удалось загрузить конкретный пост, попробуем найти в ленте
|
||||
}
|
||||
|
||||
// Если пост не найден напрямую, загрузить ленту и попытаться найти там
|
||||
// Загрузить ленту постов
|
||||
const data = await getPosts({ filter, page: 1 })
|
||||
const foundInFeed = data.posts.find(p => p._id === postId)
|
||||
console.log('[Feed] Загружена лента, найдено постов:', data.posts.length)
|
||||
|
||||
if (foundInFeed) {
|
||||
setPosts(prev => {
|
||||
const filtered = prev.filter(p => p._id !== postId)
|
||||
return [foundInFeed, ...filtered]
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
const element = document.getElementById(`post-${postId}`)
|
||||
if (element) {
|
||||
element.scrollIntoView({ behavior: 'smooth', block: 'center' })
|
||||
}
|
||||
}, 100)
|
||||
// Если конкретный пост был загружен, добавить его в начало
|
||||
if (foundPost) {
|
||||
// Проверить, нет ли его уже в ленте
|
||||
const inFeed = data.posts.find(p => p._id === postId)
|
||||
if (!inFeed) {
|
||||
// Если поста нет в ленте, добавить его в начало
|
||||
setPosts([foundPost, ...data.posts])
|
||||
} else {
|
||||
// Если пост уже в ленте, просто использовать ленту
|
||||
setPosts(data.posts)
|
||||
}
|
||||
} else {
|
||||
// Если пост не найден, загрузить все посты
|
||||
await loadPosts()
|
||||
// Если конкретный пост не загружен, использовать только ленту
|
||||
setPosts(data.posts)
|
||||
}
|
||||
|
||||
setHasMore(1 < data.totalPages)
|
||||
setPage(1)
|
||||
|
||||
// Прокрутить к посту после загрузки
|
||||
setTimeout(() => {
|
||||
const element = document.getElementById(`post-${postId}`)
|
||||
if (element) {
|
||||
element.scrollIntoView({ behavior: 'smooth', block: 'center' })
|
||||
} else {
|
||||
console.warn('[Feed] Элемент поста не найден после загрузки:', postId)
|
||||
}
|
||||
}, 300)
|
||||
} catch (error) {
|
||||
console.error('Ошибка загрузки поста:', error)
|
||||
console.error('[Feed] Ошибка загрузки поста:', error)
|
||||
await loadPosts()
|
||||
} finally {
|
||||
setLoading(false)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue