-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
79 lines (65 loc) · 2.3 KB
/
main.go
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
package main
import (
"database/sql"
"encoding/json"
"fmt"
"log"
"net/http"
_ "github.com/lib/pq" // Importa o driver PostgreSQL
)
var db *sql.DB
func main() {
// String de conexão para usar o proxy local (localhost) ao invés do hostname Fly.io
//connStr := "postgres://postgres:4BSaG5SsurRao7G@localhost:5433/postgres?sslmode=disable"
connStr := "postgres://postgres:[email protected]:5432/postgres?sslmode=disable"
var err error
db, err = sql.Open("postgres", connStr) // Nome do driver é "postgres"
if err != nil {
log.Fatalf("Erro ao abrir banco de dados: %v", err)
}
defer db.Close()
// Cria a tabela se não existir
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS contador (
id SERIAL PRIMARY KEY,
visitas INTEGER DEFAULT 0
)`)
if err != nil {
log.Fatalf("Erro ao criar tabela: %v", err)
}
// Insere a primeira linha caso a tabela esteja vazia
_, err = db.Exec(`INSERT INTO contador (id, visitas) VALUES (1, 0) ON CONFLICT DO NOTHING`)
if err != nil {
log.Fatalf("Erro ao inserir dados iniciais: %v", err)
}
http.HandleFunc("/api/contador-visitas", contadorHandler)
fmt.Println("Servidor rodando na porta 8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
func contadorHandler(w http.ResponseWriter, r *http.Request) {
// Definir os cabeçalhos CORS para permitir o acesso de diferentes origens
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
// Verificar se é uma requisição OPTIONS, que é usada pelo navegador para o preflight
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusOK)
return
}
// Incrementa o contador no banco de dados
_, err := db.Exec(`UPDATE contador SET visitas = visitas + 1 WHERE id = 1`)
if err != nil {
http.Error(w, "Erro ao atualizar contador", http.StatusInternalServerError)
return
}
// Lê o valor atualizado
row := db.QueryRow(`SELECT visitas FROM contador WHERE id = 1`)
var visitas int
err = row.Scan(&visitas)
if err != nil {
http.Error(w, "Erro ao ler contador", http.StatusInternalServerError)
return
}
// Retorna o valor em JSON
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]int{"visitas": visitas})
}