mirror of
https://github.com/SamyRai/tercul-backend.git
synced 2025-12-27 02:51:34 +00:00
This commit addresses several high-priority tasks from the TASKS.md file, including: - **Fix Background Job Panic:** Replaced `log.Fatalf` with `log.Printf` in the `asynq` server to prevent crashes. - **Refactor API Server Setup:** Consolidated the GraphQL Playground and Prometheus metrics endpoints into the main API server. - **Implement `DeleteUser` Mutation:** Implemented the `DeleteUser` resolver. - **Implement `CreateContribution` Mutation:** Implemented the `CreateContribution` resolver and its required application service. Additionally, this commit includes a major refactoring of the configuration management system to fix a broken build. The global `config.Cfg` variable has been removed and replaced with a dependency injection approach, where the configuration object is passed to all components that require it. This change has been applied across the entire codebase, including the test suite, to ensure a stable and testable application.
34 lines
1.3 KiB
Go
34 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"tercul/internal/adapters/graphql"
|
|
"tercul/internal/observability"
|
|
"tercul/internal/platform/auth"
|
|
|
|
"github.com/99designs/gqlgen/graphql/handler"
|
|
)
|
|
|
|
// NewServerWithAuth creates a new GraphQL server with authentication and observability middleware
|
|
func NewServerWithAuth(resolver *graphql.Resolver, jwtManager *auth.JWTManager, metrics *observability.Metrics, logger *observability.Logger) http.Handler {
|
|
c := graphql.Config{Resolvers: resolver}
|
|
c.Directives.Binding = graphql.Binding
|
|
|
|
// Create the server with the custom error presenter
|
|
srv := handler.NewDefaultServer(graphql.NewExecutableSchema(c))
|
|
srv.SetErrorPresenter(graphql.NewErrorPresenter())
|
|
|
|
// Create a middleware chain. The order is important.
|
|
// Middlewares are applied from bottom to top, so the last one added is the first to run.
|
|
var chain http.Handler
|
|
chain = srv
|
|
chain = metrics.PrometheusMiddleware(chain)
|
|
// LoggingMiddleware needs to run after auth and tracing to get all context.
|
|
chain = observability.LoggingMiddleware(logger)(chain)
|
|
chain = auth.GraphQLAuthMiddleware(jwtManager)(chain)
|
|
chain = observability.TracingMiddleware(chain)
|
|
chain = observability.RequestIDMiddleware(chain)
|
|
|
|
// Return the handler chain directly. The caller is responsible for routing.
|
|
return chain
|
|
} |