| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package main
- import (
- "log"
- "net/http"
- "os"
- "github.com/99designs/gqlgen/graphql/handler"
- "github.com/99designs/gqlgen/graphql/handler/extension"
- "github.com/99designs/gqlgen/graphql/handler/lru"
- "github.com/99designs/gqlgen/graphql/handler/transport"
- "github.com/99designs/gqlgen/graphql/playground"
- "github.com/vektah/gqlparser/v2/ast"
- "gogs.dmsc.dev/arp/auth"
- "gogs.dmsc.dev/arp/graph"
- "gogs.dmsc.dev/arp/models"
- "gorm.io/driver/sqlite"
- "gorm.io/gorm"
- )
- const defaultPort = "8080"
- func main() {
- port := os.Getenv("PORT")
- if port == "" {
- port = defaultPort
- }
- // Initialize database
- db, err := gorm.Open(sqlite.Open("arp.db"), &gorm.Config{})
- if err != nil {
- log.Fatal("failed to connect database:", err)
- }
- // Run auto-migration for all models
- err = db.AutoMigrate(&models.User{}, &models.Role{}, &models.Permission{}, &models.Service{}, &models.Task{}, &models.TaskStatus{}, &models.Channel{}, &models.Message{}, &models.Note{})
- if err != nil {
- log.Fatal("failed to migrate database:", err)
- }
- // Create resolver with DB instance
- resolver := &graph.Resolver{
- DB: db,
- }
- srv := handler.New(graph.NewExecutableSchema(graph.Config{Resolvers: resolver}))
- srv.AddTransport(transport.Options{})
- srv.AddTransport(transport.GET{})
- srv.AddTransport(transport.POST{})
- srv.SetQueryCache(lru.New[*ast.QueryDocument](1000))
- srv.Use(extension.Introspection{})
- srv.Use(extension.AutomaticPersistedQuery{
- Cache: lru.New[string](100),
- })
- http.Handle("/", playground.Handler("GraphQL playground", "/query"))
- http.Handle("/query", auth.AuthMiddleware(srv))
- log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
- log.Fatal(http.ListenAndServe(":"+port, nil))
- }
|