Skip to content

Commit

Permalink
add repo method to query event type by id (#81)
Browse files Browse the repository at this point in the history
* add repo method to query event type by id
* extend test
* add comp tests (#82)
  • Loading branch information
firminochangani authored Sep 11, 2024
1 parent 131bf6f commit 0768890
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 22 deletions.
41 changes: 29 additions & 12 deletions server/internal/adapters/psql/event_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package psql

import (
"context"
"database/sql"
"fmt"

"github.com/friendsofgo/errors"
"github.com/subscribeddotdev/subscribed/server/internal/adapters/models"
"github.com/subscribeddotdev/subscribed/server/internal/app/query"
"github.com/subscribeddotdev/subscribed/server/internal/domain"
Expand Down Expand Up @@ -73,25 +75,40 @@ func (e EventTypeRepository) FindAll(
}

func (e EventTypeRepository) ByID(ctx context.Context, orgID string, id domain.EventTypeID) (*domain.EventType, error) {
return nil, nil
row, err := models.EventTypes(
models.EventTypeWhere.OrgID.EQ(orgID),
models.EventTypeWhere.ID.EQ(id.String()),
).One(ctx, e.db)
if errors.Is(err, sql.ErrNoRows) {
return nil, domain.ErrEventTypeNotFound
}

if err != nil {
return nil, fmt.Errorf("error querying event type with id '%s': %v", id, err)
}

return mapRowToEventType(row), nil
}

func mapRowsToEventTypes(rows []*models.EventType) []domain.EventType {
eventTypes := make([]domain.EventType, len(rows))
for i, row := range rows {
eventType := domain.UnMarshallEventType(
domain.EventTypeID(row.ID),
row.OrgID,
row.Name,
row.Description.String,
row.Schema.String,
row.SchemaExample.String,
row.CreatedAt,
row.ArchivedAt.Ptr(),
)

eventType := mapRowToEventType(row)
eventTypes[i] = *eventType
}

return eventTypes
}

func mapRowToEventType(row *models.EventType) *domain.EventType {
return domain.UnMarshallEventType(
domain.EventTypeID(row.ID),
row.OrgID,
row.Name,
row.Description.String,
row.Schema.String,
row.SchemaExample.String,
row.CreatedAt,
row.ArchivedAt.Ptr(),
)
}
33 changes: 33 additions & 0 deletions server/internal/adapters/psql/event_type_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,36 @@ func TestEventTypesRepository_FindAll(t *testing.T) {
}
})
}

func TestEventTypesRepository_ByID(t *testing.T) {
ff := fixture.NewFactory(t, ctx, db)
org := ff.NewOrganization().Save()

t.Run("find_by_id", func(t *testing.T) {
et := ff.NewEventType().WithOrgID(org.ID).Save()
foundEt, err := eventTypeRepo.ByID(ctx, org.ID, domain.EventTypeID(et.ID))
require.NoError(t, err)
require.Equal(t, et.ID, foundEt.ID().String())
require.Equal(t, et.Name, foundEt.Name())
require.Equal(t, et.Description.String, foundEt.Description())
require.Equal(t, et.Schema.String, foundEt.Schema())
require.Equal(t, et.SchemaExample.String, foundEt.SchemaExample())
tests.RequireEqualTime(t, et.CreatedAt, foundEt.CreatedAt())

if foundEt.ArchivedAt() != nil {
archivedAt := foundEt.ArchivedAt()
tests.RequireEqualTime(t, et.ArchivedAt.Time, *archivedAt)
}
})

t.Run("error_event_type_not_found", func(t *testing.T) {
foundEt, err := eventTypeRepo.ByID(ctx, org.ID, "")
require.ErrorIs(t, err, domain.ErrEventTypeNotFound)
require.Nil(t, foundEt)

et := ff.NewEventType().WithOrgID(org.ID).Save()
foundEt, err = eventTypeRepo.ByID(ctx, "", domain.EventTypeID(et.ID))
require.ErrorIs(t, err, domain.ErrEventTypeNotFound)
require.Nil(t, foundEt)
})
}
2 changes: 1 addition & 1 deletion server/internal/app/query/event_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ func NewEventTypeHandler(repo domain.EventTypeRepository) eventTypeHandler {
}

func (h eventTypeHandler) Execute(ctx context.Context, q EventType) (*domain.EventType, error) {
return nil, nil
return h.repo.ByID(ctx, q.OrgID, domain.EventTypeID(q.EventTypeID))
}
20 changes: 11 additions & 9 deletions server/internal/ports/http/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -370,15 +370,17 @@ func (h handlers) GetEventTypeById(c echo.Context, eventTypeID string) error {
return NewHandlerError(err, "error-retrieving-event-type")
}

return c.JSON(http.StatusOK, GetEventTypeByIdPayload{Data: EventType{
Id: et.ID().String(),
Name: et.Name(),
Description: et.Description(),
Schema: et.Schema(),
SchemaExample: et.SchemaExample(),
ArchivedAt: et.ArchivedAt(),
CreatedAt: et.CreatedAt(),
}})
return c.JSON(http.StatusOK, GetEventTypeByIdPayload{
Data: EventType{
Id: et.ID().String(),
Name: et.Name(),
Description: et.Description(),
Schema: et.Schema(),
SchemaExample: et.SchemaExample(),
ArchivedAt: et.ArchivedAt(),
CreatedAt: et.CreatedAt(),
},
})
}

func (h handlers) resolveJwtClaimsFromCtx(c echo.Context) (*jwtCustomClaims, error) {
Expand Down
20 changes: 20 additions & 0 deletions server/tests/components/event_types_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/subscribeddotdev/subscribed/server/internal/adapters/models"
"github.com/subscribeddotdev/subscribed/server/tests"
"github.com/subscribeddotdev/subscribed/server/tests/client"
"github.com/subscribeddotdev/subscribed/server/tests/fixture"
)
Expand Down Expand Up @@ -56,4 +57,23 @@ func TestEventTypes(t *testing.T) {
require.Equal(t, totalPages, resp.JSON200.Pagination.TotalPages)
}
})

t.Run("get_event_type_by_id", func(t *testing.T) {
et := ff.NewEventType().WithArchivedAt(gofakeit.PastDate()).WithOrgID(org.ID).Save()

resp, err := apiClient.GetEventTypeByIdWithResponse(ctx, et.ID)
require.NoError(t, err)
require.Equal(t, http.StatusOK, resp.StatusCode())
require.Equal(t, et.ID, resp.JSON200.Data.Id)
require.Equal(t, et.Name, resp.JSON200.Data.Name)
require.Equal(t, et.Description.String, resp.JSON200.Data.Description)
require.Equal(t, et.Schema.String, resp.JSON200.Data.Schema)
require.Equal(t, et.SchemaExample.String, resp.JSON200.Data.SchemaExample)
tests.RequireEqualTime(t, et.CreatedAt, resp.JSON200.Data.CreatedAt)
tests.RequireEqualTime(t, et.ArchivedAt.Time, *resp.JSON200.Data.ArchivedAt)

resp, err = apiClient.GetEventTypeByIdWithResponse(ctx, "non-existent-id")
require.NoError(t, err)
require.Equal(t, http.StatusNotFound, resp.StatusCode())
})
}

0 comments on commit 0768890

Please sign in to comment.