Skip to content

Commit

Permalink
fix: amend searching using jurisdiction params
Browse files Browse the repository at this point in the history
  • Loading branch information
Nil20 committed Dec 4, 2024
1 parent babf055 commit f0d3696
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 69 deletions.
3 changes: 2 additions & 1 deletion packages/gateway/src/features/search/root-resolvers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ export const resolvers: GQLResolver = {
const filteredSearchParamsWithScopes = filterSearchParamsWithScope(
authHeader.Authorization,
advancedSearchParameters,
user
user,
advancedSearchParameters.event
)

const searchCriteria: ISearchCriteria = {
Expand Down
106 changes: 56 additions & 50 deletions packages/gateway/src/features/search/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,93 +52,99 @@ export const postAdvancedSearch = async (
}
}

const addJurisdictionIdParamWithScopes = (
currentScopes: Scope[],
searchParams: Omit<GQLAdvancedSearchParametersInput, 'event'> & {
event?: GQLEventType[]
birthJurisdictionId?: string
deathJurisdictionId?: string
marriageJurisdictionId?: string
},
user: IUserModelData
) => {
if (
searchParams.event &&
(searchParams.declarationJurisdictionId ||
searchParams.declarationLocationId)
) {
}

if (currentScopes.includes(SCOPES.SEARCH_BIRTH_MY_JURISDICTION)) {
searchParams.birthJurisdictionId = user.primaryOfficeId
}
if (currentScopes.includes(SCOPES.SEARCH_DEATH_MY_JURISDICTION)) {
searchParams.deathJurisdictionId = user.primaryOfficeId
}
if (currentScopes.includes(SCOPES.SEARCH_MARRIAGE_MY_JURISDICTION)) {
searchParams.marriageJurisdictionId = user.primaryOfficeId
}
}

const addSearchParamForScope = (
requiredScopes: Scope[],
event: GQLEventType,
tokenScopes: Scope[],
filteredParams: Omit<GQLAdvancedSearchParametersInput, 'event'> & {
event?: GQLEventType[]
advancedSearchParameters: GQLAdvancedSearchParametersInput & {
birthJurisdictionId?: string
deathJurisdictionId?: string
marriageJurisdictionId?: string
},
searchParamEvent: GQLEventType | undefined
user: IUserModelData,
event?: GQLEventType
) => {
const { declarationJurisdictionId, declarationLocationId } =
advancedSearchParameters
if (!tokenScopes.some((scope) => requiredScopes.includes(scope))) return

if (!searchParamEvent) {
filteredParams.event ??= []
filteredParams.event.push(event)
const scopeMappings = {
[GQLEventType.birth]: {
jurisdictionScope: SCOPES.SEARCH_BIRTH_MY_JURISDICTION,
generalScope: SCOPES.SEARCH_BIRTH,
jurisdictionIdField: 'birthJurisdictionId' as const
},
[GQLEventType.death]: {
jurisdictionScope: SCOPES.SEARCH_DEATH_MY_JURISDICTION,
generalScope: SCOPES.SEARCH_DEATH,
jurisdictionIdField: 'deathJurisdictionId' as const
},
[GQLEventType.marriage]: {
jurisdictionScope: SCOPES.SEARCH_MARRIAGE_MY_JURISDICTION,
generalScope: SCOPES.SEARCH_MARRIAGE,
jurisdictionIdField: 'marriageJurisdictionId' as const
}
}

if (
advancedSearchParameters.declarationLocationId ||
advancedSearchParameters.declarationJurisdictionId
) {
if (
user.primaryOfficeId !== declarationLocationId &&
user.primaryOfficeId !== declarationJurisdictionId
) {
throw new Error('Can not search this location')
}
}

if (event) {
const { jurisdictionScope, generalScope, jurisdictionIdField } =
scopeMappings[event]

if (tokenScopes.includes(jurisdictionScope)) {
advancedSearchParameters[jurisdictionIdField] = user.primaryOfficeId
} else if (tokenScopes.includes(generalScope)) {
advancedSearchParameters.event = event
}
}
}

export const filterSearchParamsWithScope = (
token: string,
advancedSearchParameters: GQLAdvancedSearchParametersInput,
user: IUserModelData
user: IUserModelData,
eventType?: GQLEventType
): Omit<
GQLAdvancedSearchParametersInput,
'event' & {
event: GQLEventType[]
}
> => {
const { event: searchParamEvent, ...filteredParams } =
advancedSearchParameters
const currentUserScopes = getTokenPayload(token).scope

addSearchParamForScope(
[SCOPES.SEARCH_BIRTH, SCOPES.SEARCH_BIRTH_MY_JURISDICTION],
GQLEventType.birth,
currentUserScopes,
filteredParams,
searchParamEvent
advancedSearchParameters,
user,
eventType
)

addSearchParamForScope(
[SCOPES.SEARCH_DEATH, SCOPES.SEARCH_DEATH_MY_JURISDICTION],
GQLEventType.death,
currentUserScopes,
filteredParams,
searchParamEvent
advancedSearchParameters,
user,
eventType
)

addSearchParamForScope(
[SCOPES.SEARCH_MARRIAGE, SCOPES.SEARCH_MARRIAGE_MY_JURISDICTION],
GQLEventType.marriage,
currentUserScopes,
filteredParams,
searchParamEvent
advancedSearchParameters,
user,
eventType
)

addJurisdictionIdParamWithScopes(currentUserScopes, filteredParams, user)

return filteredParams
return advancedSearchParameters
}
2 changes: 1 addition & 1 deletion packages/search/src/features/search/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export enum SortOrder {
DESC = 'desc'
}
export interface IAdvancedSearchParam {
event?: string[]
event?: string
name?: string
registrationStatuses?: string[]
dateOfEvent?: string
Expand Down
29 changes: 12 additions & 17 deletions packages/search/src/features/search/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,24 +64,19 @@ export async function advancedQueryBuilder(
if (
params.birthJurisdictionId ||
params.deathJurisdictionId ||
params.marriageJurisdictionId
params.marriageJurisdictionId ||
params.event
) {
let leafLevelJurisdictionIds: UUID[] = []

if (
params.birthJurisdictionId ||
params.deathJurisdictionId ||
params.marriageJurisdictionId
) {
const jurisdictionId: UUID | null =
params.birthJurisdictionId ??
params.deathJurisdictionId ??
params.marriageJurisdictionId ??
null
const jurisdictionId: UUID | null =
params.birthJurisdictionId ??
params.deathJurisdictionId ??
params.marriageJurisdictionId ??
null

if (jurisdictionId) {
leafLevelJurisdictionIds = await resolveLocationChildren(jurisdictionId)
}
if (jurisdictionId) {
leafLevelJurisdictionIds = await resolveLocationChildren(jurisdictionId)
}

const shouldConditions: any[] = []
Expand All @@ -103,7 +98,7 @@ export async function advancedQueryBuilder(
]
}
})
} else if (params.event?.includes('birth')) {
} else if (params.event === 'birth') {
shouldConditions.push({
terms: {
'event.keyword': ['birth']
Expand All @@ -128,7 +123,7 @@ export async function advancedQueryBuilder(
]
}
})
} else if (params.event?.includes('death')) {
} else if (params.event === 'death') {
shouldConditions.push({
terms: {
'event.keyword': ['death']
Expand All @@ -153,7 +148,7 @@ export async function advancedQueryBuilder(
]
}
})
} else if (params.event?.includes('marriage')) {
} else if (params.event === 'marriage') {
shouldConditions.push({
terms: {
'event.keyword': ['marriage']
Expand Down

0 comments on commit f0d3696

Please sign in to comment.