From d078af9cb0e817f70b9eabe5589dcb4e365f9832 Mon Sep 17 00:00:00 2001 From: H1rono Date: Thu, 26 Dec 2024 19:10:51 +0900 Subject: [PATCH] :sparkles: Add query parameter `GET /requests?created_by` --- router/request.go | 24 +++++++++++++------ router/request_test.go | 53 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 7 deletions(-) diff --git a/router/request.go b/router/request.go index 5ac87943..19d2bdbe 100644 --- a/router/request.go +++ b/router/request.go @@ -167,14 +167,24 @@ func (h Handlers) GetRequests(c echo.Context) error { g := c.QueryParam("group") group = &g } + var cratedBy *uuid.UUID + if c.QueryParam("created_by") != "" { + u, err := uuid.Parse(c.QueryParam("created_by")) + if err != nil { + h.Logger.Info("could not parse query parameter `created_by` as UUID", zap.Error(err)) + return echo.NewHTTPError(http.StatusBadRequest, err) + } + cratedBy = &u + } query := model.RequestQuery{ - Sort: sort, - Target: target, - Status: ss, - Since: since, - Until: until, - Tag: tag, - Group: group, + Sort: sort, + Target: target, + Status: ss, + Since: since, + Until: until, + Tag: tag, + Group: group, + CreatedBy: cratedBy, } modelrequests, err := h.Repository.GetRequests(ctx, query) diff --git a/router/request_test.go b/router/request_test.go index 0d5c1ae4..41128883 100644 --- a/router/request_test.go +++ b/router/request_test.go @@ -391,6 +391,59 @@ func TestHandlers_GetRequests(t *testing.T) { } }) + t.Run("Success7", func(t *testing.T) { + t.Parallel() + ctrl := gomock.NewController(t) + + date := time.Now().Round(time.Second) + request := &model.RequestResponse{ + ID: uuid.New(), + Status: model.Submitted, + CreatedBy: uuid.New(), + Title: random.AlphaNumeric(t, 20), + Content: random.AlphaNumeric(t, 50), + CreatedAt: date, + UpdatedAt: date, + } + modelRequests := []*model.RequestResponse{request} + + e := echo.New() + req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("/api/requests?created_by=%s", request.CreatedBy.String()), nil) + require.NoError(t, err) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + + h, err := NewTestHandlers(t, ctrl) + require.NoError(t, err) + h.Repository.MockRequestRepository. + EXPECT(). + GetRequests(c.Request().Context(), model.RequestQuery{CreatedBy: &request.CreatedBy}). + Return(modelRequests, nil) + err = h.Handlers.GetRequests(c) + if !assert.NoError(t, err) { + return + } + require.Equal(t, http.StatusOK, rec.Code) + var res []*RequestResponse + err = json.Unmarshal(rec.Body.Bytes(), &res) + require.NoError(t, err) + expectedBody := []*RequestResponse{ + { + ID: request.ID, + Status: request.Status, + CreatedAt: date, + UpdatedAt: date, + CreatedBy: request.CreatedBy, + Title: request.Title, + Content: request.Content, + Tags: []*TagOverview{}, + Targets: []*TargetOverview{}, + Comments: []*CommentDetail{}, + }, + } + require.Equal(t, expectedBody, res) + }) + t.Run("InvaildStatus", func(t *testing.T) { t.Parallel() ctrl := gomock.NewController(t)