add backend supporting opengraph and comments
This commit is contained in:
77
backend/main.go
Normal file
77
backend/main.go
Normal file
@ -0,0 +1,77 @@
|
||||
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
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user