Files
any-remark/backend/main.go

78 lines
1.9 KiB
Go

package main
import (
"embed"
"git.sa.vin/any-remark/backend/datastore"
"git.sa.vin/any-remark/backend/server"
"github.com/gorilla/mux"
"github.com/payne8/go-libsql-dual-driver"
"github.com/rs/cors"
"log"
"net/http"
"os"
)
//go:embed migrations/*.sql
var migrationFiles embed.FS
func main() {
// create an http server for the following routes
// /api/v1/opengraph
// /x/:id -- short links
// /api/v1/shorten -- short link creation
logger := log.New(os.Stdout, "any-remark", log.LstdFlags)
primaryUrl := os.Getenv("LIBSQL_DATABASE_URL")
authToken := os.Getenv("LIBSQL_AUTH_TOKEN")
tdb, err := libsqldb.NewLibSqlDB(
primaryUrl,
libsqldb.WithMigrationFiles(migrationFiles),
libsqldb.WithAuthToken(authToken),
libsqldb.WithLocalDBName("local.db"), // will not be used for remote-only
)
if err != nil {
logger.Printf("failed to open db %s: %s", primaryUrl, err)
log.Fatalln(err)
return
}
err = tdb.Migrate()
if err != nil {
logger.Printf("failed to migrate db %s: %s", primaryUrl, err)
log.Fatalln(err)
return
}
mapper := datastore.NewMapper(tdb.DB)
s := server.NewServer(mapper)
r := mux.NewRouter()
// add allow cors middleware
//r.Use(server.CorsMiddleware)
r.HandleFunc("/api/v1/opengraph", s.OpenGraphHandler).Methods("GET")
r.HandleFunc("/api/v1/shorten", s.ShortenLinkHandler).Methods("POST")
r.HandleFunc("/api/v1/comments", s.ListComments).Methods("GET")
r.HandleFunc("/api/v1/comment", s.AddComment).Methods("POST")
r.HandleFunc("/x/{id}", s.ShortLinkHandler).Methods("GET")
c := cors.New(cors.Options{
AllowedOrigins: []string{"http://localhost:5173"},
AllowCredentials: true,
})
handler := c.Handler(r)
//log.Fatal(http.ListenAndServe(":3000", handler)
http.Handle("/", handler)
err = http.ListenAndServe(":8080", nil)
if err != nil {
logger.Printf("server failed: %s", err)
log.Fatalln(err)
return
}
}