Spaces:
Running
Running
Update cointube.jsx
Browse files- cointube.jsx +8 -4
cointube.jsx
CHANGED
|
@@ -23,7 +23,8 @@ import {
|
|
| 23 |
} from 'firebase/firestore';
|
| 24 |
|
| 25 |
// --- Variables Globales ---
|
| 26 |
-
|
|
|
|
| 27 |
|
| 28 |
// --- Constantes del Sistema ---
|
| 29 |
const ADMIN_EMAIL = "photonicsupernova@gmail.com";
|
|
@@ -54,6 +55,7 @@ export default function App() {
|
|
| 54 |
const localCoinBufferRef = useRef(0);
|
| 55 |
|
| 56 |
// --- 1. OBTENER CONFIGURACIÓN DEL SERVIDOR ---
|
|
|
|
| 57 |
useEffect(() => {
|
| 58 |
const initFirebase = async () => {
|
| 59 |
try {
|
|
@@ -319,7 +321,8 @@ export default function App() {
|
|
| 319 |
</aside>
|
| 320 |
</main>
|
| 321 |
|
| 322 |
-
{/* TAB: PROMOCIONAR
|
|
|
|
| 323 |
<main className={`${currentTab === 'promocionar' ? 'flex' : 'hidden'} flex-1 items-center justify-center`}>
|
| 324 |
<PromoCheck
|
| 325 |
user={user}
|
|
@@ -376,6 +379,7 @@ function PromoUnlocked({ userId, isAdmin, videoCost, db }) {
|
|
| 376 |
return;
|
| 377 |
}
|
| 378 |
|
|
|
|
| 379 |
if (!db) {
|
| 380 |
setMessage({ text: "Error: Base de datos no conectada", type: 'error' });
|
| 381 |
return;
|
|
@@ -385,12 +389,13 @@ function PromoUnlocked({ userId, isAdmin, videoCost, db }) {
|
|
| 385 |
const title = isAdmin ? `Recomendado (Admin)` : `Video de Usuario`;
|
| 386 |
|
| 387 |
try {
|
| 388 |
-
//
|
| 389 |
if (!isAdmin) {
|
| 390 |
const userRef = doc(db, 'users', userId);
|
| 391 |
await updateDoc(userRef, { coins: increment(-videoCost) });
|
| 392 |
}
|
| 393 |
|
|
|
|
| 394 |
const videosRef = collection(db, 'videos');
|
| 395 |
await addDoc(videosRef, {
|
| 396 |
title: title,
|
|
@@ -404,7 +409,6 @@ function PromoUnlocked({ userId, isAdmin, videoCost, db }) {
|
|
| 404 |
setUrl('');
|
| 405 |
} catch (error) {
|
| 406 |
console.error("Error al subir:", error);
|
| 407 |
-
// Muestra el error real en pantalla si es de permisos
|
| 408 |
if (error.code === 'permission-denied') {
|
| 409 |
setMessage({ text: "Permiso denegado: Revisa las reglas de Firestore", type: 'error' });
|
| 410 |
} else {
|
|
|
|
| 23 |
} from 'firebase/firestore';
|
| 24 |
|
| 25 |
// --- Variables Globales ---
|
| 26 |
+
// Se definen fuera para que mantengan su valor, pero se inicializan dentro
|
| 27 |
+
let app, auth, db;
|
| 28 |
|
| 29 |
// --- Constantes del Sistema ---
|
| 30 |
const ADMIN_EMAIL = "photonicsupernova@gmail.com";
|
|
|
|
| 55 |
const localCoinBufferRef = useRef(0);
|
| 56 |
|
| 57 |
// --- 1. OBTENER CONFIGURACIÓN DEL SERVIDOR ---
|
| 58 |
+
// Esto reemplaza a las credenciales hardcodeadas
|
| 59 |
useEffect(() => {
|
| 60 |
const initFirebase = async () => {
|
| 61 |
try {
|
|
|
|
| 321 |
</aside>
|
| 322 |
</main>
|
| 323 |
|
| 324 |
+
{/* TAB: PROMOCIONAR */}
|
| 325 |
+
{/* Aquí pasamos 'db' como prop, que es lo que fallaba antes */}
|
| 326 |
<main className={`${currentTab === 'promocionar' ? 'flex' : 'hidden'} flex-1 items-center justify-center`}>
|
| 327 |
<PromoCheck
|
| 328 |
user={user}
|
|
|
|
| 379 |
return;
|
| 380 |
}
|
| 381 |
|
| 382 |
+
// Validación extra para asegurar que db existe
|
| 383 |
if (!db) {
|
| 384 |
setMessage({ text: "Error: Base de datos no conectada", type: 'error' });
|
| 385 |
return;
|
|
|
|
| 389 |
const title = isAdmin ? `Recomendado (Admin)` : `Video de Usuario`;
|
| 390 |
|
| 391 |
try {
|
| 392 |
+
// 1. Descontar monedas (si no es admin)
|
| 393 |
if (!isAdmin) {
|
| 394 |
const userRef = doc(db, 'users', userId);
|
| 395 |
await updateDoc(userRef, { coins: increment(-videoCost) });
|
| 396 |
}
|
| 397 |
|
| 398 |
+
// 2. Guardar video en Firestore
|
| 399 |
const videosRef = collection(db, 'videos');
|
| 400 |
await addDoc(videosRef, {
|
| 401 |
title: title,
|
|
|
|
| 409 |
setUrl('');
|
| 410 |
} catch (error) {
|
| 411 |
console.error("Error al subir:", error);
|
|
|
|
| 412 |
if (error.code === 'permission-denied') {
|
| 413 |
setMessage({ text: "Permiso denegado: Revisa las reglas de Firestore", type: 'error' });
|
| 414 |
} else {
|