-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
131 lines (97 loc) · 4.02 KB
/
server.js
File metadata and controls
131 lines (97 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const fetch = require("node-fetch"); // Se usar Node.js <18, instale com `npm install node-fetch`
const app = express();
app.use(cors());
app.use(express.json());
const path = require("path");
app.use(express.static(path.join(__dirname, "public")));
// 🔄 **Conectar ao MongoDB Atlas** (Removida duplicação de `mongoose`)
mongoose.connect(process.env.MONGO_URI)
.then(() => console.log("✅ Conectado ao MongoDB Atlas!"))
.catch(error => console.error("❌ Erro ao conectar ao MongoDB:", error));
// 📌 **Definir esquema de campanhas**
const CampanhaSchema = new mongoose.Schema({
nome: String,
periodo: Number,
objetivo: String,
imagens: [String],
video: String,
criptomoedas: Array,
finalizada: { type: Boolean, default: false } // 🔄 Corrige problema da tabela esquerda desbloqueando
});
const Campanha = mongoose.model("Campanha", CampanhaSchema);
// ✅ **Salvar Campanha no MongoDB**
app.post('/salvar-campanha', async (req, res) => {
try {
const novaCampanha = new Campanha(req.body);
const campanhaSalva = await novaCampanha.save();
// ✅ Retornar o _id da campanha salva
res.json({ _id: campanhaSalva._id });
} catch (error) {
console.error("Erro ao salvar campanha:", error);
res.status(500).json({ error: "Erro ao salvar campanha" });
}
});
// ✅ **Finalizar campanha (agora a tabela direita recupera os dados corretamente)**
app.post('/finalizar-campanha', async (req, res) => {
try {
const { id } = req.body;
if (!mongoose.Types.ObjectId.isValid(id)) {
return res.status(400).json({ error: "ID inválido" });
}
const campanha = await Campanha.findByIdAndUpdate(id, { finalizada: true }, { new: true });
if (!campanha) {
return res.status(404).json({ error: "Campanha não encontrada" });
}
res.json({ mensagem: "Campanha finalizada!", campanha });
} catch (error) {
console.error("Erro ao finalizar campanha:", error);
res.status(500).json({ error: "Erro ao finalizar campanha" });
}
});
// ✅ Buscar campanha específica por ID
app.get('/campanhas/:id', async (req, res) => {
try {
const campanha = await Campanha.findById(req.params.id);
if (!campanha) return res.status(404).json({ error: "Campanha não encontrada" });
res.json(campanha);
} catch (error) {
console.error("Erro ao buscar campanha:", error);
res.status(500).json({ error: "Erro ao buscar campanha" });
}
});
// ✅ **Recuperar campanhas do MongoDB**
app.get('/campanhas', async (req, res) => {
try {
const campanhas = await Campanha.find();
res.json(campanhas);
} catch (error) {
console.error("Erro ao buscar campanhas:", error);
res.status(500).json({ error: "Erro ao carregar campanhas" });
}
});
// ✅ **Rota CoinMarketCap**
const CMC_API_KEY = process.env.CMC_API_KEY;
app.get('/crypto/:symbol', async (req, res) => {
const url = `https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=${req.params.symbol.toUpperCase()}&convert=USD`;
try {
const response = await fetch(url, { headers: { 'X-CMC_PRO_API_KEY': CMC_API_KEY } });
if (!response.ok) throw new Error(`Erro na API: ${response.status}`);
const data = await response.json();
res.json(data);
} catch (error) {
console.error("Erro ao buscar dados:", error);
res.status(500).json({ error: 'Erro ao buscar dados' });
}
});
const path = require("path");
// ✅ Servir os arquivos da pasta public normalmente
app.use(express.static(path.join(__dirname, "public")));
// ✅ Servir a pasta static (com suas imagens)
app.use('/static', express.static(path.join(__dirname, 'static')));
// 🚀 **Iniciar Servidor**
const PORT = 3000;
app.listen(PORT, () => console.log(`🚀 Servidor rodando na porta ${PORT}`));