initial commit

This commit is contained in:
silva guimaraes 2025-04-21 17:59:57 -03:00
commit c21f569144
37 changed files with 3956 additions and 0 deletions

79
server/server.go Normal file
View file

@ -0,0 +1,79 @@
package main
import (
_ "embed"
"fmt"
"foobar/database"
"foobar/routes"
"log"
"net"
"net/http"
"os"
"time"
"github.com/joho/godotenv" // Carrega .env
)
//go:generate templ generate
var (
Port = "8888"
Addr = "localhost"
s *http.Server = nil
)
func MustStartServer() {
if s != nil {
return
}
ready := make(chan bool, 1)
go mustStartServer(ready)
<-ready
}
func mustStartServer(ready chan<- bool) {
if s != nil {
ready <- true
return
}
err := godotenv.Load()
if err != nil {
panic(err)
}
if port := os.Getenv("SERVER_PORT"); port != "" {
Port = port
}
if addr := os.Getenv("SERVER_ADDR"); addr != "" {
Addr = addr
}
_ = database.New()
routes := routes.Mux()
s = &http.Server{
Addr: fmt.Sprintf("%s:%s", Addr, Port),
Handler: routes,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
// Abre uma conexão de socket mas não bloqueia o fluxo do programa.
// Isso significa que o servidor já está recebendo requests.
// Isso é necessário para rodar os testes.
ln, err := net.Listen("tcp", s.Addr)
if err != nil {
panic(err)
}
ready <- true
fmt.Printf("Estamos ao vivo! teste em http://%s:%s\n", Addr, Port)
log.Fatal(s.Serve(ln))
}
func main() {
mustStartServer(make(chan bool, 1))
}