Skip to content

Commit 171920e

Browse files
authored
Merge branch 'main' into 5146/msq-crud-refactor
2 parents 593554c + 51d6c9c commit 171920e

47 files changed

Lines changed: 2231 additions & 263 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,6 @@ module.exports = {
5656
"**/.eslintrc.js",
5757
"sentry-example-page.js",
5858
"sentry-example-api.js",
59+
"*.csv",
5960
],
6061
}

.prettierignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ ui-components/CHANGELOG.md
44
sites/public/CHANGELOG.md
55
sites/partners/CHANGELOG.md
66
shared-helpers/CHANGELOG.md
7-
backend/core/CHANGELOG.md
7+
*.csv
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-- CreateEnum
2+
CREATE TYPE "month_enum" AS ENUM ('january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december');
3+
4+
-- AlterTable
5+
ALTER TABLE "listings" ADD COLUMN "marketing_month" "month_enum";
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- AlterTable
2+
ALTER TABLE "listings" ADD COLUMN "listing_file_number" TEXT;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-- AlterEnum
2+
ALTER TYPE "neighborhood_amenities_enum" ADD VALUE 'shoppingVenues';
3+
ALTER TYPE "neighborhood_amenities_enum" ADD VALUE 'hospitals';
4+
ALTER TYPE "neighborhood_amenities_enum" ADD VALUE 'seniorCenters';
5+
ALTER TYPE "neighborhood_amenities_enum" ADD VALUE 'recreationalFacilities';
6+
ALTER TYPE "neighborhood_amenities_enum" ADD VALUE 'playgrounds';
7+
ALTER TYPE "neighborhood_amenities_enum" ADD VALUE 'busStops';
8+
9+
-- AlterTable
10+
ALTER TABLE "listing_neighborhood_amenities" ADD COLUMN "bus_stops" TEXT,
11+
ADD COLUMN "hospitals" TEXT,
12+
ADD COLUMN "playgrounds" TEXT,
13+
ADD COLUMN "recreational_facilities" TEXT,
14+
ADD COLUMN "senior_centers" TEXT,
15+
ADD COLUMN "shopping_venues" TEXT;

api/prisma/schema.prisma

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,7 @@ model Listings {
566566
amenities String?
567567
buildingTotalUnits Int? @map("building_total_units")
568568
developer String?
569+
listingFileNumber String? @map("listing_file_number")
569570
householdSizeMax Int? @map("household_size_max")
570571
householdSizeMin Int? @map("household_size_min")
571572
neighborhood String?
@@ -661,6 +662,7 @@ model Listings {
661662
marketingType MarketingTypeEnum @default(marketing) @map("marketing_type")
662663
marketingYear Int? @map("marketing_year")
663664
marketingSeason MarketingSeasonEnum? @map("marketing_season")
665+
marketingMonth MonthEnum? @map("marketing_month")
664666
whatToExpectAdditionalText String? @map("what_to_expect_additional_text")
665667
section8Acceptance Boolean? @map("section8_acceptance")
666668
neighborhoodAmenitiesId String? @unique() @map("neighborhood_amenities_id") @db.Uuid
@@ -998,6 +1000,12 @@ model ListingNeighborhoodAmenities {
9981000
parksAndCommunityCenters String? @map("parks_and_community_centers")
9991001
schools String?
10001002
publicTransportation String? @map("public_transportation")
1003+
shoppingVenues String? @map("shopping_venues")
1004+
hospitals String?
1005+
seniorCenters String? @map("senior_centers")
1006+
recreationalFacilities String? @map("recreational_facilities")
1007+
playgrounds String?
1008+
busStops String? @map("bus_stops")
10011009
listings Listings?
10021010
10031011
@@map("listing_neighborhood_amenities")
@@ -1247,6 +1255,23 @@ enum MarketingSeasonEnum {
12471255
@@map("listings_marketing_season_enum")
12481256
}
12491257

1258+
enum MonthEnum {
1259+
january
1260+
february
1261+
march
1262+
april
1263+
may
1264+
june
1265+
july
1266+
august
1267+
september
1268+
october
1269+
november
1270+
december
1271+
1272+
@@map("month_enum")
1273+
}
1274+
12501275
enum MarketingTypeEnum {
12511276
marketing
12521277
comingSoon
@@ -1304,6 +1329,12 @@ enum NeighborhoodAmenitiesEnum {
13041329
parksAndCommunityCenters
13051330
pharmacies
13061331
healthCareResources
1332+
shoppingVenues
1333+
hospitals
1334+
seniorCenters
1335+
recreationalFacilities
1336+
playgrounds
1337+
busStops
13071338
13081339
@@map("neighborhood_amenities_enum")
13091340
}

api/prisma/seed-staging.ts

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,19 +71,19 @@ export const stagingSeed = async (
7171
],
7272
languages: Object.values(LanguagesEnum),
7373
requiredListingFields: [
74-
'listingsBuildingAddress',
75-
'name',
7674
'developer',
77-
'listingImages',
75+
'digitalApplication',
76+
'jurisdictions',
7877
'leasingAgentEmail',
7978
'leasingAgentName',
8079
'leasingAgentPhone',
81-
'jurisdictions',
82-
'units',
83-
'digitalApplication',
80+
'listingImages',
81+
'listingsBuildingAddress',
82+
'name',
8483
'paperApplication',
8584
'referralOpportunity',
8685
'rentalAssistance',
86+
'units',
8787
],
8888
}),
8989
});
@@ -157,24 +157,41 @@ export const stagingSeed = async (
157157
});
158158
const angelopolisJurisdiction = await prismaClient.jurisdictions.create({
159159
data: jurisdictionFactory('Angelopolis', {
160-
featureFlags: [FeatureFlagEnum.enableNeighborhoodAmenities, FeatureFlagEnum.enableHousingDeveloperOwner],
160+
featureFlags: [
161+
FeatureFlagEnum.enableAccessibilityFeatures,
162+
FeatureFlagEnum.enableHousingDeveloperOwner,
163+
FeatureFlagEnum.enableListingFileNumber,
164+
FeatureFlagEnum.enableListingFiltering,
165+
FeatureFlagEnum.enableMarketingStatus,
166+
FeatureFlagEnum.enableMarketingStatusMonths,
167+
FeatureFlagEnum.enableNeighborhoodAmenities,
168+
FeatureFlagEnum.enableNeighborhoodAmenitiesDropdown,
169+
],
161170
visibleNeighborhoodAmenities: [
162171
NeighborhoodAmenitiesEnum.groceryStores,
163172
NeighborhoodAmenitiesEnum.pharmacies,
173+
NeighborhoodAmenitiesEnum.shoppingVenues,
174+
NeighborhoodAmenitiesEnum.hospitals,
175+
NeighborhoodAmenitiesEnum.seniorCenters,
176+
NeighborhoodAmenitiesEnum.recreationalFacilities,
177+
NeighborhoodAmenitiesEnum.playgrounds,
178+
NeighborhoodAmenitiesEnum.busStops,
164179
],
180+
165181
requiredListingFields: [
166-
'listingsBuildingAddress',
167-
'name',
168-
'listingImages',
182+
'digitalApplication',
183+
'jurisdictions',
169184
'leasingAgentEmail',
170185
'leasingAgentName',
171186
'leasingAgentPhone',
172-
'jurisdictions',
173-
'units',
174-
'digitalApplication',
187+
'listingFileNumber',
188+
'listingImages',
189+
'listingsBuildingAddress',
190+
'name',
175191
'paperApplication',
176192
'referralOpportunity',
177193
'rentalAssistance',
194+
'units',
178195
],
179196
}),
180197
});

api/src/dtos/listings/listing-neighborhood-amenities.dto.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,40 @@ export class ListingNeighborhoodAmenities {
3939
@IsString({ groups: [ValidationsGroupsEnum.default] })
4040
@ApiPropertyOptional()
4141
healthCareResources?: string | null;
42+
43+
@Expose()
44+
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
45+
@IsString({ groups: [ValidationsGroupsEnum.default] })
46+
@ApiPropertyOptional()
47+
shoppingVenues?: string | null;
48+
49+
@Expose()
50+
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
51+
@IsString({ groups: [ValidationsGroupsEnum.default] })
52+
@ApiPropertyOptional()
53+
hospitals?: string | null;
54+
55+
@Expose()
56+
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
57+
@IsString({ groups: [ValidationsGroupsEnum.default] })
58+
@ApiPropertyOptional()
59+
seniorCenters?: string | null;
60+
61+
@Expose()
62+
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
63+
@IsString({ groups: [ValidationsGroupsEnum.default] })
64+
@ApiPropertyOptional()
65+
recreationalFacilities?: string | null;
66+
67+
@Expose()
68+
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
69+
@IsString({ groups: [ValidationsGroupsEnum.default] })
70+
@ApiPropertyOptional()
71+
playgrounds?: string | null;
72+
73+
@Expose()
74+
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
75+
@IsString({ groups: [ValidationsGroupsEnum.default] })
76+
@ApiPropertyOptional()
77+
busStops?: string | null;
4278
}

api/src/dtos/listings/listing.dto.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
RegionEnum,
3030
MarketingSeasonEnum,
3131
MarketingTypeEnum,
32+
MonthEnum,
3233
ReviewOrderTypeEnum,
3334
DepositTypeEnum,
3435
ListingTypeEnum,
@@ -133,6 +134,14 @@ class Listing extends AbstractDTO {
133134
@ApiPropertyOptional()
134135
developer?: string;
135136

137+
@Expose()
138+
@ValidateListingPublish('listingFileNumber', {
139+
groups: [ValidationsGroupsEnum.default],
140+
})
141+
@IsString({ groups: [ValidationsGroupsEnum.default] })
142+
@ApiPropertyOptional()
143+
listingFileNumber?: string;
144+
136145
@Expose()
137146
@IsNumber({}, { groups: [ValidationsGroupsEnum.default] })
138147
@ApiPropertyOptional()
@@ -1047,6 +1056,17 @@ class Listing extends AbstractDTO {
10471056
})
10481057
marketingSeason?: MarketingSeasonEnum | null;
10491058

1059+
@Expose()
1060+
@ValidateListingPublish('marketingMonth', {
1061+
groups: [ValidationsGroupsEnum.default],
1062+
})
1063+
@IsEnum(MonthEnum, { groups: [ValidationsGroupsEnum.default] })
1064+
@ApiPropertyOptional({
1065+
enum: MonthEnum,
1066+
enumName: 'MonthEnum',
1067+
})
1068+
marketingMonth?: MonthEnum | null;
1069+
10501070
@Expose()
10511071
@ValidateListingPublish('homeType', {
10521072
groups: [ValidationsGroupsEnum.default],

api/src/enums/feature-flags/feature-flags-enum.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ export enum FeatureFlagEnum {
1818
enableIsVerified = 'enableIsVerified',
1919
enableLimitedHowDidYouHear = 'enableLimitedHowDidYouHear',
2020
enableListingFavoriting = 'enableListingFavoriting',
21+
enableListingFileNumber = 'enableListingFileNumber',
2122
enableListingFiltering = 'enableListingFiltering',
2223
enableListingOpportunity = 'enableListingOpportunity',
2324
enableListingPagination = 'enableListingPagination',
2425
enableListingUpdatedAt = 'enableListingUpdatedAt',
2526
enableMarketingStatus = 'enableMarketingStatus',
27+
enableMarketingStatusMonths = 'enableMarketingStatusMonths',
2628
enableNeighborhoodAmenities = 'enableNeighborhoodAmenities',
29+
enableNeighborhoodAmenitiesDropdown = 'enableNeighborhoodAmenitiesDropdown',
2730
enableNonRegulatedListings = 'enableNonRegulatedListings',
2831
enablePartnerDemographics = 'enablePartnerDemographics',
2932
enablePartnerSettings = 'enablePartnerSettings',
@@ -46,7 +49,10 @@ export enum FeatureFlagEnum {
4649
// List of all of existing flags and their descriptions.
4750
// This should be the source of all feature flags in our system.
4851
// Keep alphabetized for readability.
49-
export const featureFlagMap: { name: string; description: string }[] = [
52+
export const featureFlagMap: {
53+
name: string;
54+
description: string;
55+
}[] = [
5056
{
5157
name: FeatureFlagEnum.disableCommonApplication,
5258
description:
@@ -125,6 +131,11 @@ export const featureFlagMap: { name: string; description: string }[] = [
125131
description:
126132
'When true, a Favorite button is shown for public listings and users can view their favorited listings',
127133
},
134+
{
135+
name: FeatureFlagEnum.enableListingFileNumber,
136+
description:
137+
'When true, partners can enter and export a listing file number',
138+
},
128139
{
129140
name: FeatureFlagEnum.enableListingFiltering,
130141
description:
@@ -149,11 +160,21 @@ export const featureFlagMap: { name: string; description: string }[] = [
149160
description:
150161
"When true, the 'marketing status' sub-section is displayed in listing creation/edit and the public listing view",
151162
},
163+
{
164+
name: FeatureFlagEnum.enableMarketingStatusMonths,
165+
description:
166+
"When true, the 'marketing status' sub-section uses months instead of seasons (functions only if enableMarketingStatus is also true)",
167+
},
152168
{
153169
name: FeatureFlagEnum.enableNeighborhoodAmenities,
154170
description:
155171
"When true, the 'neighborhood amenities' section is displayed in listing creation/edit and the public listing view",
156172
},
173+
{
174+
name: FeatureFlagEnum.enableNeighborhoodAmenitiesDropdown,
175+
description:
176+
'When true, neighborhood amenities inputs render as dropdowns with distance options instead of textareas',
177+
},
157178
{
158179
name: FeatureFlagEnum.enableNonRegulatedListings,
159180
description:

0 commit comments

Comments
 (0)