@@ -24,21 +24,6 @@ import (
2424 "google.golang.org/grpc"
2525)
2626
27- // initFirestore initializes the Firestore client
28- func initFirestore (ctx context.Context , credentialsPath string ) (* firestore.Client , error ) {
29- opt := option .WithCredentialsFile (credentialsPath )
30- app , err := firebase .NewApp (ctx , nil , opt )
31- if err != nil {
32- return nil , fmt .Errorf ("failed to initialize Firebase App: %v" , err )
33- }
34-
35- client , err := app .Firestore (ctx )
36- if err != nil {
37- return nil , fmt .Errorf ("failed to get Firestore client: %v" , err )
38- }
39- return client , nil
40- }
41-
4227func main () {
4328 // Load .env file
4429 err := godotenv .Load ()
@@ -67,7 +52,26 @@ func main() {
6752
6853 go initGrpcServer ()
6954
70- // Set up chi router
55+ r := initChiRouter (service )
56+ initRestServer (r )
57+ }
58+
59+ // initFirestore initializes the Firestore client
60+ func initFirestore (ctx context.Context , credentialsPath string ) (* firestore.Client , error ) {
61+ opt := option .WithCredentialsFile (credentialsPath )
62+ app , err := firebase .NewApp (ctx , nil , opt )
63+ if err != nil {
64+ return nil , fmt .Errorf ("failed to initialize Firebase App: %v" , err )
65+ }
66+
67+ client , err := app .Firestore (ctx )
68+ if err != nil {
69+ return nil , fmt .Errorf ("failed to get Firestore client: %v" , err )
70+ }
71+ return client , nil
72+ }
73+
74+ func initChiRouter (service * handlers.Service ) * chi.Mux {
7175 r := chi .NewRouter ()
7276 r .Use (middleware .Logger )
7377 r .Use (middleware .Timeout (60 * time .Second ))
@@ -84,7 +88,12 @@ func main() {
8488 MaxAge : 300 , // Maximum value not ignored by any of major browsers
8589 }))
8690
87- // Register routes
91+ registerRoutes (r , service )
92+
93+ return r
94+ }
95+
96+ func registerRoutes (r * chi.Mux , service * handlers.Service ) {
8897 r .Route ("/questions" , func (r chi.Router ) {
8998 r .Get ("/" , service .ListQuestions )
9099 r .Post ("/" , service .CreateQuestion )
@@ -95,7 +104,9 @@ func main() {
95104 r .Delete ("/" , service .DeleteQuestion )
96105 })
97106 })
107+ }
98108
109+ func initRestServer (r * chi.Mux ) {
99110 // Serve on port 8080
100111 port := os .Getenv ("PORT" )
101112 if port == "" {
@@ -104,36 +115,22 @@ func main() {
104115
105116 // Start the server
106117 log .Printf ("Starting REST server on http://localhost:%s" , port )
107- err = http .ListenAndServe (fmt .Sprintf (":%s" , port ), r )
118+ err : = http .ListenAndServe (fmt .Sprintf (":%s" , port ), r )
108119 if err != nil {
109120 log .Fatalf ("Failed to start server: %v" , err )
110121 }
111122}
112123
113- type server struct {
114- pb.UnimplementedQuestionMatchingServiceServer // Embed the unimplemented service
115- }
116-
117124func initGrpcServer () {
118125 lis , err := net .Listen ("tcp" , ":50051" )
119126 if err != nil {
120127 log .Fatalf ("failed to listen: %v" , err )
121128 }
122129 s := grpc .NewServer ()
123- pb .RegisterQuestionMatchingServiceServer (s , & server {})
130+ pb .RegisterQuestionMatchingServiceServer (s , & handlers. GrpcServer {})
124131
125132 log .Printf ("gRPC Server is listening on port 50051..." )
126133 if err := s .Serve (lis ); err != nil {
127134 log .Fatalf ("failed to serve: %v" , err )
128135 }
129136}
130-
131- func (s * server ) FindMatchingQuestion (ctx context.Context , req * pb.MatchQuestionRequest ) (* pb.QuestionFound , error ) {
132- // STUB
133- return & pb.QuestionFound {
134- QuestionId : 1 ,
135- QuestionName : "abc" ,
136- QuestionDifficulty : "Easy" ,
137- QuestionTopics : []string {"Algorithms" , "Arrays" },
138- }, nil
139- }
0 commit comments