Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como criar uma lista única para cada conta cadastrada no App

import { db } from "../config/firebase";
import { collection, addDoc, getDocs, doc, updateDoc, deleteDoc, query, where, onSnapshot } from 'firebase/firestore'


export async function salvarProduto(data) {
    try {
        await addDoc(collection(db, 'produtos'), data)
        return 'ok'

    } catch (error) {
        console.log('Erro add produto', error)
    }

}

export async function pegarProdutos() {
    try {
        const querySnapshot = await getDocs(collection(db, "produtos"));
        let produtos = []

        querySnapshot.forEach((doc) => {

            let produto = { id: doc.id, ...doc.data() }
            produtos.push(produto)
        });
        return produtos

    } catch (error) {
        console.log(error)
        return []
    }
}

export async function atualizarProduto(produtoID, data) {
    try {
        const produtoRef = doc(db, "produtos", produtoID);
        await updateDoc(produtoRef, data)
        return 'ok'
    }
    catch (error) {
        console.log(error)
        return 'error'
    }
}
export async function deletarProduto(produtoID) {
    try {
        const produtoRef = doc(db, "produtos", produtoID);
        await deleteDoc(produtoRef)
        return 'ok'
    }
    catch (error) {
        console.log(error)
        return 'error'
    }
}
export async function pegarProdutostempoReal(setProdutos) {
    const ref = query(collection(db, 'produtos'))
    onSnapshot(ref, (querySnapshot) => {
        const produtos = []
        querySnapshot.forEach((doc) => {
            produtos.push({ id: doc.id, ...doc.data() })
        })
        setProdutos(produtos)
    })
}

Como modificar essas funções para que cada usuário tenha sua lista única de produtos.

2 respostas
solução!

E aí! Para fazer cada usuário ter sua própria lista de produtos, você precisa associar os produtos ao usuário, certo?

Ao salvar o produto, você pode adicionar o ID do usuário à coleção de produtos. Suponha que você tenha o ID do usuário disponível em data.userID (substitua isso pelo local real do ID do usuário no seu código). Aqui está como você pode modificar a função:

export async function salvarProduto(data) {
    try {
        // Adiciona o ID do usuário ao produto
        data.userID = 'ID_DO_USUARIO_AQUI'; // Substitua isso pelo local real do ID do usuário

        await addDoc(collection(db, 'produtos'), data)
        return 'ok'
    } catch (error) {
        console.log('Erro ao adicionar produto', error)
    }
}

Na função para pegar os produtos, você precisa modificar a query para buscar apenas os produtos do usuário específico. Vamos supor que você tenha o ID do usuário disponível em userID:

export async function pegarProdutos(userID) {
    try {
        const q = query(collection(db, "produtos"), where("userID", "==", userID));
        const querySnapshot = await getDocs(q);
        let produtos = []

        querySnapshot.forEach((doc) => {
            let produto = { id: doc.id, ...doc.data() }
            produtos.push(produto)
        });

        return produtos
    } catch (error) {
        console.log(error)
        return []
    }
}

Nas funções de atualizar e deletar, você precisa garantir que está operando apenas nos produtos do usuário. então, ao chamar essas funções, passe também o userID.

Para pegar produtos em tempo real, a lógica é a mesma. Basta garantir que a query esteja filtrando pelo userID.

Precisa de substituir as variáveis fictícias pelos valores reais do seu aplicativo. Essas modificações devem te dar uma boa base para começar a personalizar as listas de produtos por usuário. Boa sorte!

Otimo! já deu pra ter uma idéia de como seguir aqui, obrigado :D

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software