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 } }