-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
executable file
·168 lines (135 loc) · 4.74 KB
/
app.js
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
const express = require('express');
const mongoose = require('mongoose');
const path = require('path');
require('dotenv').config();
const port = 3000;
const app = express();
// Conectar ao MongoDB
const mongodbHost = process.env.MONGODB_HOST || 'localhost';
const mongodbPort = process.env.MONGODB_PORT || 27017;
const mongodbDatabase = process.env.MONGODB_DATABASE || 'taskApp';
const apm = require('elastic-apm-node').start({
// Override service name from package.json
// Allowed characters: a-z, A-Z, 0-9, -, _, and space
serviceName: 'app-task',
// Use if APM Server requires a token
secretToken: '',
// Use if APM Server uses API keys for authentication
apiKey: '',
// Set custom APM Server URL (default: http://127.0.0.1:8200)
serverUrl: 'apm-apm-http.elasticsearch.svc.cluster.local',
})
mongoose.connect(`mongodb://${mongodbHost}:${mongodbPort}/${mongodbDatabase}`, {
useNewUrlParser: true,
useUnifiedTopology: true,
serverSelectionTimeoutMS: 30000
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'Erro na conexão com o MongoDB:'));
db.once('open', () => {
console.log('Conectado ao MongoDB');
});
// Definir o esquema da tarefa
const taskSchema = new mongoose.Schema({
task: String,
status: Boolean, // Coluna "status"
});
const Task = mongoose.model('Task', taskSchema);
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(express.static(path.join(__dirname, 'public')));
async function toggleTaskStatus(taskId, currentStatus) {
const newStatus = !currentStatus; // Inverte o status
const response = await fetch(`/tasks/${taskId}/status`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ status: newStatus })
});
if (response.ok) {
console.log('Status da tarefa atualizado com sucesso.');
fetchTasks();
} else {
console.error('Erro ao atualizar status da tarefa.');
}
}
app.get('/tasks', async (req, res) => {
try {
const tasks = await Task.find();
res.json(tasks);
} catch (error) {
console.error('Erro ao buscar tarefas:', error);
res.status(500).json({ message: 'Erro ao buscar tarefas' });
}
});
app.get('/tasks/:id/status', async (req, res) => {
const taskId = req.params.id;
try {
const task = await Task.findById(taskId);
if (!task) {
return res.status(404).json({ message: 'Tarefa não encontrada' });
}
res.json({ completed: task.completed }); // Retorna apenas o status
} catch (error) {
console.error('Erro ao consultar status da tarefa:', error);
res.status(500).json({ message: 'Erro ao consultar status da tarefa' });
}
});
app.post('/tasks', async (req, res) => {
const task = new Task({ task: req.body.task });
try {
await task.save();
res.status(201).json({ message: 'Tarefa adicionada com sucesso' });
} catch (error) {
console.error('Erro ao adicionar tarefa:', error);
res.status(500).json({ message: 'Erro ao adicionar tarefa' });
}
});
app.post('/tasks/:id/status', async (req, res) => {
const taskId = req.params.id;
const newStatus = req.body.status;
try {
const task = await Task.findById(taskId);
if (!task) {
return res.status(404).json({ message: 'Tarefa não encontrada' });
}
task.status = newStatus; // Atualiza o status da tarefa
await task.save();
res.json({ message: 'Status da tarefa atualizado com sucesso', task });
} catch (error) {
console.error('Erro ao atualizar status da tarefa:', error);
res.status(500).json({ message: 'Erro ao atualizar status da tarefa' });
}
});
// Rota para atualizar o status de uma tarefa
app.put('/tasks/:id', async (req, res) => {
const taskId = req.params.id;
const completed = req.body.completed;
try {
const task = await Task.findByIdAndUpdate(taskId, { completed }, { new: true });
if (!task) {
return res.status(404).json({ message: 'Tarefa não encontrada' });
}
res.json({ message: 'Status da tarefa atualizado com sucesso', task });
} catch (error) {
console.error('Erro ao atualizar status da tarefa:', error);
res.status(500).json({ message: 'Erro ao atualizar status da tarefa' });
}
});
app.delete('/tasks/:id', async (req, res) => {
const taskId = req.params.id;
try {
const task = await Task.findByIdAndDelete(taskId);
if (!task) {
return res.status(404).json({ message: 'Tarefa não encontrada' });
}
res.json({ message: 'Tarefa excluída com sucesso' });
} catch (error) {
console.error('Erro ao excluir tarefa:', error);
res.status(500).json({ message: 'Erro ao excluir tarefa' });
}
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});