79 lines
1.9 KiB
Go
79 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("/api/v1/vote", s.AddVote).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
|
|
}
|
|
}
|