85 lines
2.3 KiB
Cheetah
85 lines
2.3 KiB
Cheetah
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
|
|
}
|
|
}
|