Create initial backend (#7)
Closes #3 Reviewed-on: #7
This commit was merged in pull request #7.
This commit is contained in:
63
backend/main.go
Normal file
63
backend/main.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"embed"
|
||||
"errors"
|
||||
"github.com/gin-gonic/gin"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
//go:embed migrations/*.sql
|
||||
var migrations embed.FS
|
||||
var db *Db
|
||||
|
||||
type ServerConfig struct {
|
||||
Datasource string
|
||||
Port string
|
||||
Started chan bool
|
||||
}
|
||||
|
||||
func getUsers(c *gin.Context) {
|
||||
users, err := db.GetUsers()
|
||||
if err != nil {
|
||||
log.Printf("Error getting users: %v", err)
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal Server Error"})
|
||||
return
|
||||
}
|
||||
c.IndentedJSON(http.StatusOK, users)
|
||||
}
|
||||
|
||||
func main() {
|
||||
config := ServerConfig{
|
||||
Datasource: os.Getenv("DB_PATH"),
|
||||
}
|
||||
start(context.Background(), &config)
|
||||
}
|
||||
|
||||
func start(ctx context.Context, config *ServerConfig) {
|
||||
db = NewDb(config.Datasource)
|
||||
defer db.db.MustClose()
|
||||
router := gin.Default()
|
||||
router.GET("/api/users", getUsers)
|
||||
|
||||
srv := &http.Server{
|
||||
Addr: ":" + config.Port,
|
||||
Handler: router.Handler(),
|
||||
}
|
||||
go func() {
|
||||
if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
||||
log.Fatalf("listen: %s\n", err)
|
||||
}
|
||||
}()
|
||||
|
||||
log.Printf("Running server on port %s\n", config.Port)
|
||||
config.Started <- true
|
||||
<-ctx.Done()
|
||||
log.Println("Shutting down")
|
||||
if err := srv.Shutdown(context.Background()); err != nil {
|
||||
log.Fatalf("Server forced to shutdown: %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user