1
0

server.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "log"
  4. "net/http"
  5. "os"
  6. "github.com/99designs/gqlgen/graphql/handler"
  7. "github.com/99designs/gqlgen/graphql/handler/extension"
  8. "github.com/99designs/gqlgen/graphql/handler/lru"
  9. "github.com/99designs/gqlgen/graphql/handler/transport"
  10. "github.com/99designs/gqlgen/graphql/playground"
  11. "github.com/vektah/gqlparser/v2/ast"
  12. "gogs.dmsc.dev/arp/auth"
  13. "gogs.dmsc.dev/arp/graph"
  14. "gogs.dmsc.dev/arp/models"
  15. "gorm.io/driver/sqlite"
  16. "gorm.io/gorm"
  17. )
  18. const defaultPort = "8080"
  19. func main() {
  20. port := os.Getenv("PORT")
  21. if port == "" {
  22. port = defaultPort
  23. }
  24. // Initialize database
  25. db, err := gorm.Open(sqlite.Open("arp.db"), &gorm.Config{})
  26. if err != nil {
  27. log.Fatal("failed to connect database:", err)
  28. }
  29. // Run auto-migration for all models
  30. err = db.AutoMigrate(&models.User{}, &models.Role{}, &models.Permission{}, &models.Service{}, &models.Task{}, &models.TaskStatus{}, &models.Channel{}, &models.Message{}, &models.Note{})
  31. if err != nil {
  32. log.Fatal("failed to migrate database:", err)
  33. }
  34. // Create resolver with DB instance
  35. resolver := &graph.Resolver{
  36. DB: db,
  37. }
  38. srv := handler.New(graph.NewExecutableSchema(graph.Config{Resolvers: resolver}))
  39. srv.AddTransport(transport.Options{})
  40. srv.AddTransport(transport.GET{})
  41. srv.AddTransport(transport.POST{})
  42. srv.SetQueryCache(lru.New[*ast.QueryDocument](1000))
  43. srv.Use(extension.Introspection{})
  44. srv.Use(extension.AutomaticPersistedQuery{
  45. Cache: lru.New[string](100),
  46. })
  47. http.Handle("/", playground.Handler("GraphQL playground", "/query"))
  48. http.Handle("/query", auth.AuthMiddleware(srv))
  49. log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
  50. log.Fatal(http.ListenAndServe(":"+port, nil))
  51. }