package main import ( "context" "github.com/payne8/go-libsql-dual-driver" sqlite "github.com/ytsruh/gorm-libsql" "google.golang.org/grpc" "google.golang.org/grpc/reflection" "gorm.io/gorm" "log" "net" "os" pb "{{ .AppName }}/gen/go" ) func main() { logger := log.New(os.Stdout, "{{ .AppName }} ", 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 } // instantiate the grom ORM gormDB, err := gorm.Open(sqlite.New(sqlite.Config{Conn: tdb.DB}), &gorm.Config{}) if err != nil { logger.Printf("failed to open gorm db %s: %s", primaryUrl, err) log.Fatalln(err) return } // err = gormDB.AutoMigrate(&pb.UserORM{}) // TODO: figure out how to automate this part // if err != nil { // logger.Printf("failed to migrate user: %s", err) // log.Fatalln(err) // return // } // err = gormDB.AutoMigrate(&pb.ProductORM{}) // TODO: figure out how to automate this part // if err != nil { // logger.Printf("failed to migrate product: %s", err) // log.Fatalln(err) // return // } handlers := pb.{{ .AppNameCaps }}DefaultServer{ DB: gormDB, } grpcServer := grpc.NewServer(grpc.ChainUnaryInterceptor( func(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) { // TODO: this is an example of a middleware - we will use this for authentication // we will have a function that checks the token and a switch statement that checks if the method is public or not logger.Printf("request: %s", info.FullMethod) return handler(ctx, req) }, )) pb.Register{{ .AppNameCaps }}Server(grpcServer, &handlers) reflection.Register(grpcServer) // start the server listener, err := net.Listen("tcp", ":9000") if err != nil { logger.Printf("failed to listen: %s", err) log.Fatalln(err) return } logger.Printf("listening on %s", listener.Addr().String()) err = grpcServer.Serve(listener) if err != nil { logger.Printf("failed to serve: %s", err) log.Fatalln(err) return } }