77 "strings"
88 "time"
99
10+ "github.com/go-chi/chi/v5"
1011 "github.com/google/uuid"
1112)
1213
@@ -140,7 +141,7 @@ func (c *Controller) listLatestUnconfirmedAnswersForLocalProblem(w http.Response
140141 for _ , code := range strings .Split (value , "," ) {
141142 code = strings .TrimSpace (code )
142143
143- problem , err := c .repo .findProblemBy (ctx , code )
144+ problem , err := c .repo .findProblemByCode (ctx , code )
144145 if err != nil {
145146 slog .WarnContext (ctx , "failed to find Problem" , "error" , err , "code" , code )
146147 continue
@@ -164,20 +165,7 @@ func (c *Controller) listLatestUnconfirmedAnswersForLocalProblem(w http.Response
164165 }
165166
166167 for _ , answer := range latestAnswers {
167- bodies := []string {}
168- for _ , b := range answer .Bodies {
169- bodies = append (bodies , b ... )
170- }
171-
172- response = append (response , listLatestUnconfirmedAnswersForLocalProblemResponseItem {
173- ID : answer .ID ,
174- ProblemID : answer .ProblemID ,
175- ProblemCode : problem .Code ,
176- TeamID : answer .TeamID ,
177- CreatedAt : answer .CreatedAt ,
178- UpdatedAt : answer .UpdatedAt ,
179- Body : strings .Join (bodies , "\n " ),
180- })
168+ response = append (response , newAnswerResponseFrom (answer , * problem ))
181169 }
182170 }
183171
@@ -186,3 +174,38 @@ func (c *Controller) listLatestUnconfirmedAnswersForLocalProblem(w http.Response
186174 w .WriteHeader (http .StatusInternalServerError )
187175 }
188176}
177+
178+ type getAnswerInformationResponse answerResponse
179+
180+ func (c * Controller ) getAnswerInformation (w http.ResponseWriter , r * http.Request ) {
181+ ctx := r .Context ()
182+
183+ answerIDStr := chi .URLParam (r , "answerID" )
184+ answerID , err := uuid .Parse (answerIDStr )
185+ if err != nil {
186+ slog .WarnContext (ctx , "invalid query parameters" , "answer_id" , answerIDStr )
187+ w .WriteHeader (http .StatusBadRequest )
188+ return
189+ }
190+
191+ answer , err := c .repo .findAnswerBy (ctx , answerID )
192+ if err != nil {
193+ slog .WarnContext (ctx , "failed to find Answer" , "error" , err )
194+ w .WriteHeader (http .StatusNotFound )
195+ return
196+ }
197+
198+ problem , err := c .repo .findProblemBy (ctx , answer .ProblemID )
199+ if err != nil {
200+ slog .ErrorContext (ctx , "failed to find Problem" , "error" , err )
201+ w .WriteHeader (http .StatusInternalServerError )
202+ return
203+ }
204+
205+ response := getAnswerInformationResponse (newAnswerResponseFrom (* answer , * problem ))
206+
207+ if err := renderJSON (w , http .StatusOK , response ); err != nil {
208+ slog .ErrorContext (ctx , "failed to render JSON" , "error" , err )
209+ w .WriteHeader (http .StatusInternalServerError )
210+ }
211+ }
0 commit comments