diff --git a/src/adverts/advert-meta/advert-meta.ts b/src/adverts/advert-meta/advert-meta.ts index 15501c4..175239b 100644 --- a/src/adverts/advert-meta/advert-meta.ts +++ b/src/adverts/advert-meta/advert-meta.ts @@ -108,7 +108,7 @@ export const getAdvertMeta = ( isCollectedBySome, isPicked: !!advert.pickedAt, waitlistCount: advert.waitlist.length, - returnInfo: getClaimReturnInfo(advert.claims, advert.lendingPeriod), + returnInfo: getClaimReturnInfo(user, advert.claims, advert.lendingPeriod), claims, } } diff --git a/src/adverts/advert-meta/tests/return-info.spec.ts b/src/adverts/advert-meta/tests/return-info.spec.ts index deb2e66..5adc071 100644 --- a/src/adverts/advert-meta/tests/return-info.spec.ts +++ b/src/adverts/advert-meta/tests/return-info.spec.ts @@ -25,14 +25,14 @@ describe('getAdvertMeta::returnInfo', () => { quantity: 0, claims: [ createClaim({ at: '2024-01-05', quantity: 1 }), - createClaim({ at: '2024-01-01', quantity: 2 }), + createClaim({ at: '2024-01-01', quantity: 2, by: haffaUser.id }), ], }) const meta = getAdvertMeta(advert, haffaUser) expect(meta.returnInfo).toStrictEqual([ - { at: '2024-01-11T00:00:00.000Z', quantity: 2 }, - { at: '2024-01-15T00:00:00.000Z', quantity: 1 }, + { at: '2024-01-11T00:00:00.000Z', quantity: 2, isMine: true }, + { at: '2024-01-15T00:00:00.000Z', quantity: 1, isMine: false }, ]) }) it('ignores claims of type reservation', () => { diff --git a/src/adverts/advert-mutations/claims/mappers.ts b/src/adverts/advert-mutations/claims/mappers.ts index d611b56..bf0f9e6 100644 --- a/src/adverts/advert-mutations/claims/mappers.ts +++ b/src/adverts/advert-mutations/claims/mappers.ts @@ -1,5 +1,6 @@ import { sortBy } from '../../../lib' import { dateBuilder } from '../../../lib/date-builder' +import type { HaffaUser } from '../../../login/types' import { AdvertClaimType } from '../../types' import type { AdvertReturnInfo, AdvertClaim } from '../../types' @@ -52,15 +53,17 @@ export const isClaimOverdue = ( } export const getClaimReturnInfo = ( + { id }: HaffaUser, claims: AdvertClaim[], daysValid: number ): AdvertReturnInfo[] => daysValid > 0 ? claims .filter(({ type }) => type === AdvertClaimType.collected) - .map(({ at, quantity }) => ({ + .map(({ at, by, quantity }) => ({ at: dateBuilder(at).addDays(daysValid).toISOString(), quantity, + isMine: by === id, })) .sort(sortBy(c => c.at)) : [] diff --git a/src/adverts/adverts.gql.schema.ts b/src/adverts/adverts.gql.schema.ts index 26dde34..3b46de0 100644 --- a/src/adverts/adverts.gql.schema.ts +++ b/src/adverts/adverts.gql.schema.ts @@ -236,8 +236,9 @@ export const advertsGqlSchema = /* GraphQL */ ` } type AdvertReturnInfo { - at: String - quantity: Int + at: String! + quantity: Int! + isMine: Boolean! } type AdvertLocation { diff --git a/src/adverts/types.ts b/src/adverts/types.ts index c2023f0..146dba6 100644 --- a/src/adverts/types.ts +++ b/src/adverts/types.ts @@ -53,6 +53,7 @@ export interface AdvertMetaClaim extends AdvertClaim { export interface AdvertReturnInfo { at: string quantity: number + isMine: boolean } export interface AdvertMeta { reservableQuantity: number