Skip to content

Commit

Permalink
Add UnitsSummary to Listing
Browse files Browse the repository at this point in the history
  • Loading branch information
abbiefarr committed Aug 12, 2021
1 parent 75d34bd commit 41c23e8
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 3 deletions.
9 changes: 9 additions & 0 deletions backend/core/src/listings/dto/listing.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import { ApplicationMethodDto } from "../../application-methods/dto/application-
import { ListingReviewOrder } from "../types/listing-review-order-enum"
import { ListingEventType } from "../types/listing-event-type-enum"
import { ListingEventCreateDto, ListingEventDto, ListingEventUpdateDto } from "./listing-event.dto"
import { UnitsSummaryDto } from "../../units-summary/dto/units-summary.dto"

export class ListingDto extends OmitType(Listing, [
"applicationAddress",
Expand All @@ -52,6 +53,7 @@ export class ListingDto extends OmitType(Listing, [
"property",
"reservedCommunityType",
"result",
"unitsSummary",
] as const) {
@Expose()
@IsDefined({ groups: [ValidationsGroupsEnum.default] })
Expand Down Expand Up @@ -320,6 +322,13 @@ export class ListingDto extends OmitType(Listing, [
)
yearBuilt?: number | null

@Expose()
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => UnitsSummaryDto)
unitsSummary?: UnitsSummaryDto[] | null

// TO BE DEPRECATED
@Expose()
@IsDefined({ groups: [ValidationsGroupsEnum.default] })
@ValidateNested({ groups: [ValidationsGroupsEnum.default] })
Expand Down
11 changes: 11 additions & 0 deletions backend/core/src/listings/entities/listing.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import { ListingApplicationAddressType } from "../types/listing-application-addr
import { ListingEvent } from "./listing-event.entity"
import { Address } from "../../shared/entities/address.entity"
import { ApplicationMethod } from "../../application-methods/entities/application-method.entity"
import { UnitsSummary } from "../../units-summary/entities/units-summary.entity"

@Entity({ name: "listings" })
class Listing extends BaseEntity {
Expand Down Expand Up @@ -457,6 +458,16 @@ class Listing extends BaseEntity {
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
@IsNumber({}, { groups: [ValidationsGroupsEnum.default] })
waitlistOpenSpots?: number | null

@OneToMany(() => UnitsSummary, (summary) => summary.listing, {
eager: true,
nullable: true,
cascade: true,
})
@Expose()
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => UnitsSummary)
unitsSummary?: UnitsSummary[] | null
}

export { Listing as default, Listing }
1 change: 1 addition & 0 deletions backend/core/src/listings/listings.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ export class ListingsService {
.createQueryBuilder("listings")
.select("listings.id", "listings_id")
.leftJoin("listings.property", "property")
.leftJoin("listings.units_summary", "units_summary")
.groupBy("listings.id")
.orderBy({ "listings.id": "DESC" })

Expand Down
20 changes: 20 additions & 0 deletions backend/core/src/migration/1628714025901-listings-units-summary.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import {MigrationInterface, QueryRunner} from "typeorm";

export class listingsUnitsSummary1628714025901 implements MigrationInterface {
name = 'listingsUnitsSummary1628714025901'

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "units_summary" DROP CONSTRAINT "FK_a2b6519fc3d102d4611a0e2b879"`);
await queryRunner.query(`ALTER TABLE "units_summary" RENAME COLUMN "property_id" TO "listing_id"`);
await queryRunner.query(`ALTER TABLE "units_summary" RENAME CONSTRAINT "PK_dd5b004243c1536a412e425a9ec" TO "PK_0ea6bb34382cb45f6b3280f50f2"`);
await queryRunner.query(`ALTER TABLE "units_summary" ADD CONSTRAINT "FK_4edda29192dbc0c6a18e15437a0" FOREIGN KEY ("listing_id") REFERENCES "listings"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "units_summary" DROP CONSTRAINT "FK_4edda29192dbc0c6a18e15437a0"`);
await queryRunner.query(`ALTER TABLE "units_summary" RENAME CONSTRAINT "PK_0ea6bb34382cb45f6b3280f50f2" TO "PK_dd5b004243c1536a412e425a9ec"`);
await queryRunner.query(`ALTER TABLE "units_summary" RENAME COLUMN "listing_id" TO "property_id"`);
await queryRunner.query(`ALTER TABLE "units_summary" ADD CONSTRAINT "FK_a2b6519fc3d102d4611a0e2b879" FOREIGN KEY ("property_id") REFERENCES "property"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
}

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Column, Entity, ManyToOne, PrimaryColumn } from "typeorm"
import { IsNumber, IsNumberString, IsOptional, IsString, ValidateNested } from "class-validator"
import { Expose, Type } from "class-transformer"
import { Property } from "../../property/entities/property.entity"
import { ValidationsGroupsEnum } from "../../shared/types/validations-groups-enum"
import { UnitType } from "../../unit-types/entities/unit-type.entity"
import { UnitAccessibilityPriorityType } from "../../unit-accessbility-priority-types/entities/unit-accessibility-priority-type.entity"
import { Listing } from "../..//listings/entities/listing.entity"

@Entity({ name: "units_summary" })
class UnitsSummary {
Expand All @@ -15,8 +15,8 @@ class UnitsSummary {
@Type(() => UnitType)
unitType: UnitType

@ManyToOne(() => Property, { primary: true, eager: true })
property: Property
@ManyToOne(() => Listing, (listing) => listing.unitsSummary, { primary: true })
listing: Listing

@PrimaryColumn()
@Expose()
Expand Down

0 comments on commit 41c23e8

Please sign in to comment.