Skip to content

Commit

Permalink
Merge branch 'feat/retrieve-count-of-items-in-list' into feat/retriev…
Browse files Browse the repository at this point in the history
…e-if-item-is-in-list
  • Loading branch information
Kevin Szuchet committed May 23, 2023
2 parents 5ff275d + e0ccae2 commit 53e37d0
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 6 deletions.
5 changes: 3 additions & 2 deletions src/ports/lists/component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export function createListsComponent(
{ requiredPermission, considerDefaultList = true, userAddress }: GetListOptions
): Promise<DBListsWithItemsCount> {
const getListQuery = SQL`
SELECT DISTINCT favorites.lists.*, favorites.acl.permission AS permission, COUNT(DISTINCT favorites.picks.item_id) AS count_items
SELECT favorites.lists.*, favorites.acl.permission AS permission, COUNT(favorites.picks.item_id) AS count_items
FROM favorites.lists
LEFT JOIN favorites.picks ON favorites.lists.id = favorites.picks.list_id AND favorites.picks.user_address = ${userAddress}
LEFT JOIN favorites.acl ON favorites.lists.id = favorites.acl.list_id`
Expand All @@ -71,6 +71,7 @@ export function createListsComponent(
}

getListQuery.append(SQL` GROUP BY favorites.lists.id, favorites.acl.permission`)
getListQuery.append(SQL` ORDER BY favorites.acl.permission ASC LIMIT 1`)

const result = await pg.query<DBListsWithItemsCount>(getListQuery)

Expand Down Expand Up @@ -155,7 +156,7 @@ export function createListsComponent(

async function getLists(params: GetListsParameters): Promise<DBGetListsWithCount[]> {
const { userAddress, limit, offset, sortBy = ListSortBy.CREATED_AT, sortDirection = ListSortDirection.DESC, itemId } = params
const query = SQL`SELECT l.*, COUNT(*) OVER() as lists_count, l.user_address = ${DEFAULT_LIST_USER_ADDRESS} as is_default_list, COUNT(DISTINCT p.item_id) AS items_count`
const query = SQL`SELECT l.*, COUNT(*) OVER() as lists_count, l.user_address = ${DEFAULT_LIST_USER_ADDRESS} as is_default_list, COUNT(p.item_id) AS items_count`

if (itemId) query.append(SQL`, MAX(CASE WHEN p.item_id = ${itemId} THEN 1 ELSE 0 END)::BOOLEAN AS is_item_in_list`)

Expand Down
32 changes: 28 additions & 4 deletions test/unit/lists-component.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -637,7 +637,7 @@ describe('when getting a list', () => {
expect(dbQueryMock).toHaveBeenCalledWith(
expect.objectContaining({
text: expect.stringContaining(
'SELECT DISTINCT favorites.lists.*, favorites.acl.permission AS permission, COUNT(DISTINCT favorites.picks.item_id) AS count_items'
'SELECT favorites.lists.*, favorites.acl.permission AS permission, COUNT(favorites.picks.item_id) AS count_items'
)
})
)
Expand Down Expand Up @@ -675,6 +675,12 @@ describe('when getting a list', () => {
text: expect.stringContaining('GROUP BY favorites.lists.id, favorites.acl.permission')
})
)

expect(dbQueryMock).toHaveBeenCalledWith(
expect.objectContaining({
text: expect.stringContaining('ORDER BY favorites.acl.permission ASC LIMIT 1')
})
)
})

it('should resolve with the list', () => {
Expand Down Expand Up @@ -703,7 +709,7 @@ describe('when getting a list', () => {
expect(dbQueryMock).toHaveBeenCalledWith(
expect.objectContaining({
text: expect.stringContaining(
'SELECT DISTINCT favorites.lists.*, favorites.acl.permission AS permission, COUNT(DISTINCT favorites.picks.item_id) AS count_items'
'SELECT favorites.lists.*, favorites.acl.permission AS permission, COUNT(favorites.picks.item_id) AS count_items'
)
})
)
Expand Down Expand Up @@ -743,6 +749,12 @@ describe('when getting a list', () => {
text: expect.stringContaining('GROUP BY favorites.lists.id, favorites.acl.permission')
})
)

expect(dbQueryMock).toHaveBeenCalledWith(
expect.objectContaining({
text: expect.stringContaining('ORDER BY favorites.acl.permission ASC LIMIT 1')
})
)
})

it('should resolve with the list', () => {
Expand Down Expand Up @@ -783,7 +795,7 @@ describe('when getting a list', () => {
expect(dbQueryMock).toHaveBeenCalledWith(
expect.objectContaining({
text: expect.stringContaining(
'SELECT DISTINCT favorites.lists.*, favorites.acl.permission AS permission, COUNT(DISTINCT favorites.picks.item_id) AS count_items'
'SELECT favorites.lists.*, favorites.acl.permission AS permission, COUNT(favorites.picks.item_id) AS count_items'
)
})
)
Expand Down Expand Up @@ -823,6 +835,12 @@ describe('when getting a list', () => {
text: expect.stringContaining('GROUP BY favorites.lists.id, favorites.acl.permission')
})
)

expect(dbQueryMock).toHaveBeenCalledWith(
expect.objectContaining({
text: expect.stringContaining('ORDER BY favorites.acl.permission ASC LIMIT 1')
})
)
})

it('should resolve with the list', () => {
Expand All @@ -849,7 +867,7 @@ describe('when getting a list', () => {
expect(dbQueryMock).toHaveBeenCalledWith(
expect.objectContaining({
text: expect.stringContaining(
'SELECT DISTINCT favorites.lists.*, favorites.acl.permission AS permission, COUNT(DISTINCT favorites.picks.item_id) AS count_items'
'SELECT favorites.lists.*, favorites.acl.permission AS permission, COUNT(favorites.picks.item_id) AS count_items'
)
})
)
Expand Down Expand Up @@ -896,6 +914,12 @@ describe('when getting a list', () => {
text: expect.stringContaining('GROUP BY favorites.lists.id, favorites.acl.permission')
})
)

expect(dbQueryMock).toHaveBeenCalledWith(
expect.objectContaining({
text: expect.stringContaining('ORDER BY favorites.acl.permission ASC LIMIT 1')
})
)
})

it('should resolve with the list', () => {
Expand Down

0 comments on commit 53e37d0

Please sign in to comment.