Skip to content

Commit d2928ab

Browse files
authored
fix: add sub jurisdictions to allow multiple jurisdictions in search (#6323)
* fix: add sub jurisdictions to allow multiple jurisdictions in search * fix: add the change to non-map view * fix: update tests and calls on the partner site * fix: more test fixes * fix: review comments * fix: switch to relationship * fix: typo
1 parent f62f5c4 commit d2928ab

31 files changed

Lines changed: 578 additions & 332 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
-- CreateTable
2+
CREATE TABLE "_SubJurisdictions" ("A" UUID NOT NULL, "B" UUID NOT NULL);
3+
4+
-- CreateIndex
5+
CREATE UNIQUE INDEX "_SubJurisdictions_AB_unique" ON "_SubJurisdictions"("A", "B");
6+
7+
-- CreateIndex
8+
CREATE INDEX "_SubJurisdictions_B_index" ON "_SubJurisdictions"("B");
9+
10+
-- AddForeignKey
11+
ALTER TABLE
12+
"_SubJurisdictions"
13+
ADD
14+
CONSTRAINT "_SubJurisdictions_A_fkey" FOREIGN KEY ("A") REFERENCES "jurisdictions"("id") ON DELETE CASCADE ON UPDATE CASCADE;
15+
16+
-- AddForeignKey
17+
ALTER TABLE
18+
"_SubJurisdictions"
19+
ADD
20+
CONSTRAINT "_SubJurisdictions_B_fkey" FOREIGN KEY ("B") REFERENCES "jurisdictions"("id") ON DELETE CASCADE ON UPDATE CASCADE;

api/prisma/schema.prisma

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,8 @@ model Jurisdictions {
804804
referralSummaryDefault String? @map("referral_summary_default")
805805
rentalAssistanceDefault String @map("rental_assistance_default")
806806
requiredListingFields String[] @default([]) @map("required_listing_fields")
807+
subJurisdictions Jurisdictions[] @relation("SubJurisdictions")
808+
parentJurisdictions Jurisdictions[] @relation("SubJurisdictions")
807809
visibleAccessibilityPriorityTypes UnitAccessibilityPriorityTypeEnum[] @default([mobility, hearing, vision, hearingAndVision, mobilityAndHearing, mobilityAndVision, mobilityHearingAndVision]) @map("visible_accessibility_priority_types")
808810
visibleNeighborhoodAmenities NeighborhoodAmenitiesEnum[] @default([groceryStores, publicTransportation, schools, parksAndCommunityCenters, pharmacies, healthCareResources]) @map("visible_neighborhood_amenities")
809811
visibleSpokenLanguages SpokenLanguageEnum[] @default([chineseCantonese, chineseMandarin, english, filipino, korean, russian, spanish, vietnamese, farsi, afghani, notListed]) @map("visible_spoken_languages")

api/prisma/seed-helpers/jurisdiction-factory.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export const jurisdictionFactory = (
3232
visibleSpokenLanguages?: SpokenLanguageEnum[];
3333
visibleApplicationAccessibilityFeatures?: ApplicationAccessibilityFeatureEnum[];
3434
visibleHouseholdMemberRelationships?: HouseholdMemberRelationship[];
35+
subJurisdictions?: string[];
3536
},
3637
): Prisma.JurisdictionsCreateInput => ({
3738
name: jurisdictionName,
@@ -109,4 +110,9 @@ export const jurisdictionFactory = (
109110
HouseholdMemberRelationship.other,
110111
HouseholdMemberRelationship.aideOrAttendant,
111112
],
113+
subJurisdictions: optionalFields?.subJurisdictions
114+
? {
115+
connect: optionalFields?.subJurisdictions?.map((id) => ({ id })),
116+
}
117+
: undefined,
112118
});

api/prisma/seed-staging/seed-bridge-bay.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2685,5 +2685,16 @@ export const createBridgeBayJurisdictions = async (
26852685
);
26862686
await seedListings(prismaClient, bridgeBayJurisdiction.id, listings);
26872687

2688+
await prismaClient.jurisdictions.update({
2689+
where: { id: bridgeBayJurisdiction.id },
2690+
data: {
2691+
subJurisdictions: {
2692+
connect: otherJurisdictions.map((jurisdiction) => ({
2693+
id: jurisdiction.id,
2694+
})),
2695+
},
2696+
},
2697+
});
2698+
26882699
return [bridgeBayJurisdiction, ...otherJurisdictions];
26892700
};

api/prisma/seed-staging/seed-staging-helpers.ts

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,27 @@ export const seedListings = async (
3838
.toLowerCase()
3939
.replaceAll(' ', '-')}${randomInt(10)}@example.com`;
4040
}
41-
await prismaClient.userAccounts.create({
42-
data: await userFactory({
43-
roles: {
44-
isAdmin: false,
45-
isPartner: true,
46-
isJurisdictionalAdmin: false,
47-
},
48-
email: email,
49-
confirmedAt: new Date(),
50-
jurisdictionIds: [savedListing.jurisdictionId],
51-
acceptedTerms: true,
52-
listings: [savedListing.id],
53-
}),
54-
});
55-
5641
console.log(`Added listing - ${savedListing.name}`);
42+
try {
43+
await prismaClient.userAccounts.create({
44+
data: await userFactory({
45+
roles: {
46+
isAdmin: false,
47+
isPartner: true,
48+
isJurisdictionalAdmin: false,
49+
},
50+
email: email,
51+
confirmedAt: new Date(),
52+
jurisdictionIds: [savedListing.jurisdictionId],
53+
acceptedTerms: true,
54+
listings: [savedListing.id],
55+
}),
56+
});
57+
} catch (error) {
58+
console.error(
59+
`Error creating user account for listing ${savedListing.name}: ${error}`,
60+
);
61+
}
5762
}
5863
};
5964

api/src/dtos/jurisdictions/jurisdiction-update.dto.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export class JurisdictionUpdate extends OmitType(Jurisdiction, [
66
'updatedAt',
77
'featureFlags',
88
'multiselectQuestions',
9+
'subJurisdictions',
910
]) {}

api/src/dtos/jurisdictions/jurisdiction.dto.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
ValidateNested,
1010
IsBoolean,
1111
IsNumber,
12+
IsUUID,
1213
} from 'class-validator';
1314
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
1415
import {
@@ -269,4 +270,9 @@ export class Jurisdiction extends AbstractDTO {
269270
@Type(() => RaceEthnicityConfiguration)
270271
@ApiPropertyOptional({ type: RaceEthnicityConfiguration })
271272
raceEthnicityConfiguration?: RaceEthnicityConfiguration;
273+
274+
@Expose()
275+
@Type(() => IdDTO)
276+
@ApiPropertyOptional({ isArray: true, type: IdDTO })
277+
subJurisdictions?: IdDTO[];
272278
}

api/src/dtos/listings/listings-filter-params.dto.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,14 @@ export class ListingFilterParams extends BaseFilter {
130130
@IsString({ groups: [ValidationsGroupsEnum.default] })
131131
[ListingFilterKeys.jurisdiction]?: string;
132132

133+
@Expose()
134+
@ApiPropertyOptional({
135+
type: Array,
136+
example: ['jurisdiction1', 'jurisdiction2'],
137+
})
138+
@IsArray({ groups: [ValidationsGroupsEnum.default] })
139+
[ListingFilterKeys.jurisdictions]?: string[];
140+
133141
@Expose()
134142
@ApiPropertyOptional({
135143
example: 'FAB1A3C6-965E-4054-9A48-A282E92E9426',
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum JurisdictionViews {
2+
public = 'public',
3+
full = 'full',
4+
}

api/src/enums/listings/filter-key-enum.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export enum ListingFilterKeys {
1212
ids = 'ids',
1313
isVerified = 'isVerified',
1414
jurisdiction = 'jurisdiction',
15+
jurisdictions = 'jurisdictions',
1516
leasingAgent = 'leasingAgent',
1617
listingFeatures = 'listingFeatures',
1718
listingType = 'listingType',

0 commit comments

Comments
 (0)