Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions api/src/dtos/addresses/address-create.dto.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
import { AddressUpdate } from './address-update.dto';
import { OmitType } from '@nestjs/swagger';
import { Address } from './address.dto';

export class AddressCreate extends OmitType(Address, [
'id',
'createdAt',
'updatedAt',
]) {}
export class AddressCreate extends OmitType(AddressUpdate, ['id']) {}
17 changes: 17 additions & 0 deletions api/src/dtos/addresses/address-update.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Address } from './address.dto';
import { ApiPropertyOptional, OmitType } from '@nestjs/swagger';
import { Expose } from 'class-transformer';
import { IsString, IsUUID } from 'class-validator';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';

export class AddressUpdate extends OmitType(Address, [
'createdAt',
'id',
'updatedAt',
]) {
@Expose()
@IsString({ groups: [ValidationsGroupsEnum.default] })
@IsUUID(4, { groups: [ValidationsGroupsEnum.default] })
@ApiPropertyOptional()
id?: string;
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import { OmitType, ApiPropertyOptional } from '@nestjs/swagger';
import { ApplicationMethodUpdate } from './application-method-update.dto';
import { Expose, Type } from 'class-transformer';
import { OmitType, ApiPropertyOptional } from '@nestjs/swagger';
import { PaperApplicationCreate } from '../paper-applications/paper-application-create.dto';
import { ValidateNested } from 'class-validator';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';
import { PaperApplicationCreate } from '../paper-applications/paper-application-create.dto';
import { ApplicationMethod } from './application-method.dto';

export class ApplicationMethodCreate extends OmitType(ApplicationMethod, [
export class ApplicationMethodCreate extends OmitType(ApplicationMethodUpdate, [
'id',
'createdAt',
'updatedAt',
'paperApplications',
]) {
@Expose()
Expand Down
25 changes: 25 additions & 0 deletions api/src/dtos/application-methods/application-method-update.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { ApplicationMethod } from './application-method.dto';
import { Expose, Type } from 'class-transformer';
import { IsString, IsUUID, ValidateNested } from 'class-validator';
import { OmitType, ApiPropertyOptional } from '@nestjs/swagger';
import { PaperApplicationUpdate } from '../paper-applications/paper-application-update.dto';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';

export class ApplicationMethodUpdate extends OmitType(ApplicationMethod, [
'createdAt',
'id',
'paperApplications',
'updatedAt',
]) {
@Expose()
@IsString({ groups: [ValidationsGroupsEnum.default] })
@IsUUID(4, { groups: [ValidationsGroupsEnum.default] })
@ApiPropertyOptional()
id?: string;

@Expose()
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => PaperApplicationUpdate)
@ApiPropertyOptional({ type: PaperApplicationUpdate, isArray: true })
paperApplications?: PaperApplicationUpdate[];
}
155 changes: 153 additions & 2 deletions api/src/dtos/listings/listing-create.dto.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,155 @@
import { OmitType } from '@nestjs/swagger';
import { AddressCreate } from '../addresses/address-create.dto';
import { ApiProperty, ApiPropertyOptional, OmitType } from '@nestjs/swagger';
import { ApplicationMethodCreate } from '../application-methods/application-method-create.dto';
import { ArrayMaxSize, Validate, ValidateNested } from 'class-validator';
import { Expose, Type } from 'class-transformer';
import { ListingEventCreate } from './listing-event-create.dto';
import { ListingFeaturesCreate } from './listing-feature-create.dto';
import { ListingNeighborhoodAmenitiesCreate } from './listing-neighborhood-amenities-create.dto';
import { ListingUpdate } from './listing-update.dto';
import { ListingUtilitiesCreate } from './listing-utiliity-create.dto';
import { LotteryDateParamValidator } from '../../utilities/lottery-date-validator';
import { UnitCreate } from '../units/unit-create.dto';
import { UnitGroupCreate } from '../unit-groups/unit-group-create.dto';
import {
ValidateAtLeastOneUnit,
ValidateOnlyUnitsOrUnitGroups,
} from '../../decorators/validate-units-required.decorator';
import { ValidateListingPublish } from '../../decorators/validate-listing-publish.decorator';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';

export class ListingCreate extends OmitType(ListingUpdate, ['id']) {}
export class ListingCreate extends OmitType(ListingUpdate, [
'applicationMethods',
'id',
'listingEvents',
'listingNeighborhoodAmenities',
'listingsApplicationDropOffAddress',
'listingsApplicationMailingAddress',
'listingsApplicationPickUpAddress',
'listingsBuildingAddress',
'listingsLeasingAgentAddress',
'listingUtilities',
'unitGroups',
'units',
]) {
@Expose()
@ValidateAtLeastOneUnit({
groups: [ValidationsGroupsEnum.default],
})
@ValidateOnlyUnitsOrUnitGroups({
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => UnitCreate)
@ArrayMaxSize(256, { groups: [ValidationsGroupsEnum.default] })
@ApiPropertyOptional({ type: UnitCreate, isArray: true })
units?: UnitCreate[];

@Expose()
@ValidateAtLeastOneUnit({
groups: [ValidationsGroupsEnum.default],
})
@ValidateOnlyUnitsOrUnitGroups({
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => UnitGroupCreate)
@ApiPropertyOptional({ type: UnitGroupCreate, isArray: true })
unitGroups?: UnitGroupCreate[];

@Expose()
@ValidateListingPublish('applicationMethods', {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => ApplicationMethodCreate)
@ApiPropertyOptional({
type: ApplicationMethodCreate,
isArray: true,
})
applicationMethods?: ApplicationMethodCreate[];

@Expose()
@ValidateListingPublish('listingsApplicationPickUpAddress', {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default] })
@Type(() => AddressCreate)
@ApiPropertyOptional({ type: AddressCreate })
listingsApplicationPickUpAddress?: AddressCreate;

@Expose()
@ValidateListingPublish('listingsApplicationMailingAddress', {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default] })
@Type(() => AddressCreate)
@ApiPropertyOptional({ type: AddressCreate })
listingsApplicationMailingAddress?: AddressCreate;

@Expose()
@ValidateListingPublish('listingsApplicationDropOffAddress', {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default] })
@Type(() => AddressCreate)
@ApiPropertyOptional({ type: AddressCreate })
listingsApplicationDropOffAddress?: AddressCreate;

@Expose()
@ValidateListingPublish('listingsLeasingAgentAddress', {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default] })
@Type(() => AddressCreate)
@ApiPropertyOptional({ type: AddressCreate })
listingsLeasingAgentAddress?: AddressCreate;

@Expose()
@ValidateListingPublish('listingsBuildingAddress', {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default] })
@Type(() => AddressCreate)
@ApiPropertyOptional({ type: AddressCreate })
listingsBuildingAddress?: AddressCreate;

@Expose()
@ValidateListingPublish('listingEvents', {
groups: [ValidationsGroupsEnum.default],
})
@Validate(LotteryDateParamValidator, {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => ListingEventCreate)
@ApiProperty({ type: ListingEventCreate, isArray: true })
listingEvents: ListingEventCreate[];

@Expose()
@ValidateListingPublish('listingFeatures', {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => ListingFeaturesCreate)
@ApiPropertyOptional({ type: ListingFeaturesCreate })
listingFeatures?: ListingFeaturesCreate;

@Expose()
@ValidateListingPublish('listingUtilities', {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => ListingUtilitiesCreate)
@ApiPropertyOptional({ type: ListingUtilitiesCreate })
listingUtilities?: ListingUtilitiesCreate;

@Expose()
@ValidateListingPublish('listingNeighborhoodAmenities', {
groups: [ValidationsGroupsEnum.default],
})
@ValidateNested({ groups: [ValidationsGroupsEnum.default], each: true })
@Type(() => ListingNeighborhoodAmenitiesCreate)
@ApiPropertyOptional({ type: ListingNeighborhoodAmenitiesCreate })
listingNeighborhoodAmenities?: ListingNeighborhoodAmenitiesCreate;
}
21 changes: 3 additions & 18 deletions api/src/dtos/listings/listing-event-create.dto.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,4 @@
import { ApiPropertyOptional, OmitType } from '@nestjs/swagger';
import { Expose, Type } from 'class-transformer';
import { ValidateNested } from 'class-validator';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';
import { AssetCreate } from '../assets/asset-create.dto';
import { ListingEvent } from './listing-event.dto';
import { ListingEventUpdate } from './listing-event-update.dto';
import { OmitType } from '@nestjs/swagger';

export class ListingEventCreate extends OmitType(ListingEvent, [
'id',
'createdAt',
'updatedAt',
'assets',
]) {
@Expose()
@ValidateNested({ groups: [ValidationsGroupsEnum.default] })
@Type(() => AssetCreate)
@ApiPropertyOptional({ type: AssetCreate })
assets?: AssetCreate;
}
export class ListingEventCreate extends OmitType(ListingEventUpdate, ['id']) {}
25 changes: 25 additions & 0 deletions api/src/dtos/listings/listing-event-update.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { ApiPropertyOptional, OmitType } from '@nestjs/swagger';
import { AssetCreate } from '../assets/asset-create.dto';
import { Expose, Type } from 'class-transformer';
import { IsString, IsUUID, ValidateNested } from 'class-validator';
import { ListingEvent } from './listing-event.dto';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';

export class ListingEventUpdate extends OmitType(ListingEvent, [
'assets',
'createdAt',
'id',
'updatedAt',
]) {
@Expose()
@ValidateNested({ groups: [ValidationsGroupsEnum.default] })
@Type(() => AssetCreate)
@ApiPropertyOptional({ type: AssetCreate })
assets?: AssetCreate;

@Expose()
@IsString({ groups: [ValidationsGroupsEnum.default] })
@IsUUID(4, { groups: [ValidationsGroupsEnum.default] })
@ApiPropertyOptional()
id?: string;
}
6 changes: 6 additions & 0 deletions api/src/dtos/listings/listing-feature-create.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { ListingFeaturesUpdate } from './listing-feature-update.dto';
import { OmitType } from '@nestjs/swagger';

export class ListingFeaturesCreate extends OmitType(ListingFeaturesUpdate, [
'id',
]) {}
17 changes: 17 additions & 0 deletions api/src/dtos/listings/listing-feature-update.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { ApiPropertyOptional, OmitType } from '@nestjs/swagger';
import { Expose } from 'class-transformer';
import { IsString, IsUUID } from 'class-validator';
import { ListingFeatures } from './listing-feature.dto';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';

export class ListingFeaturesUpdate extends OmitType(ListingFeatures, [
'createdAt',
'id',
'updatedAt',
]) {
@Expose()
@IsString({ groups: [ValidationsGroupsEnum.default] })
@IsUUID(4, { groups: [ValidationsGroupsEnum.default] })
@ApiPropertyOptional()
id?: string;
}
3 changes: 2 additions & 1 deletion api/src/dtos/listings/listing-feature.dto.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { AbstractDTO } from '../shared/abstract.dto';
import { ApiPropertyOptional } from '@nestjs/swagger';
import { Expose } from 'class-transformer';
import { IsBoolean } from 'class-validator';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';

export class ListingFeatures {
export class ListingFeatures extends AbstractDTO {
@Expose()
@IsBoolean({ groups: [ValidationsGroupsEnum.default] })
@ApiPropertyOptional()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { OmitType } from '@nestjs/swagger';
import { ListingNeighborhoodAmenitiesUpdate } from './listing-neighborhood-amenities-update.dto';

export class ListingNeighborhoodAmenitiesCreate extends OmitType(
ListingNeighborhoodAmenitiesUpdate,
['id'],
) {}
16 changes: 16 additions & 0 deletions api/src/dtos/listings/listing-neighborhood-amenities-update.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { ApiPropertyOptional, OmitType } from '@nestjs/swagger';
import { Expose } from 'class-transformer';
import { IsString, IsUUID } from 'class-validator';
import { ListingNeighborhoodAmenities } from './listing-neighborhood-amenities.dto';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';

export class ListingNeighborhoodAmenitiesUpdate extends OmitType(
ListingNeighborhoodAmenities,
['createdAt', 'id', 'updatedAt'],
) {
@Expose()
@IsString({ groups: [ValidationsGroupsEnum.default] })
@IsUUID(4, { groups: [ValidationsGroupsEnum.default] })
@ApiPropertyOptional()
id?: string;
}
3 changes: 2 additions & 1 deletion api/src/dtos/listings/listing-neighborhood-amenities.dto.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { AbstractDTO } from '../shared/abstract.dto';
import { ApiPropertyOptional } from '@nestjs/swagger';
import { Expose } from 'class-transformer';
import { IsOptional, IsString } from 'class-validator';
import { ValidationsGroupsEnum } from '../../enums/shared/validation-groups-enum';

export class ListingNeighborhoodAmenities {
export class ListingNeighborhoodAmenities extends AbstractDTO {
@Expose()
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
@IsString({ groups: [ValidationsGroupsEnum.default] })
Expand Down
Loading
Loading