Initial commit: Tapalka monorepo (bot, front, strapi)

This commit is contained in:
2026-05-21 11:54:44 +07:00
commit 9ec9485940
208 changed files with 58314 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
'use client';
import { PropsWithChildren, useEffect, useState } from 'react';
import { usePlayerStore } from '@/store/player.state';
import { ProvidersProps } from '@/components/providers/Providers';
import { useTokenStore } from '@/store/token.state';
import { PlayerApi } from '@/api/player.api';
import styles from './Providers.module.css';
export const PlayerProvider = ({
children,
id,
}: PropsWithChildren & Pick<ProvidersProps, 'id'>) => {
const { player, setPlayer, isLoading, stopLoading } = usePlayerStore();
const { token } = useTokenStore();
const [username, setUsername] = useState('');
useEffect(() => {
if (!token) {
console.log('[PlayerProvider] no token yet, waiting...');
return;
}
console.log('[PlayerProvider] token received, loading player...');
try {
const tgUser = window.Telegram?.WebApp?.initDataUnsafe?.user;
const username = String(tgUser?.username || 'unknown');
console.log('[PlayerProvider] telegram username:', username, 'tgUser:', tgUser);
setUsername(username);
} catch (e) {
console.error('[PlayerProvider] error getting telegram user:', e);
}
const playerApi = PlayerApi.getInstance(token);
playerApi.findPlayerByAuthId(id).then(player => {
console.log('[PlayerProvider] player loaded:', player?.id);
setPlayer(player);
stopLoading();
}).catch(err => {
console.error('[PlayerProvider] error loading player:', err);
stopLoading();
});
}, [token]);
if (isLoading) {
return (
<div className={styles.loading}>
<span>Загрузка...</span>
</div>
);
}
if (!player) {
return (
<div className={styles.loading}>
<span>
Что-то пошло не так... Попробуйте написать /start, чтобы получить актуальную
ссылку
</span>
</div>
);
}
if (player.attributes.telegram_nick !== username) {
return (
<div className={styles.loading}>
<span>
Похоже, что Вы изменили свой ID в Telegram, попробуйте написать /start, чтобы
получить актуальную ссылку
</span>
</div>
);
}
return <>{children}</>;
};