diff --git a/backend/core/src/auth/dto/user-profile.dto.ts b/backend/core/src/auth/dto/user-profile.dto.ts index 6a537ea082..d32449dd35 100644 --- a/backend/core/src/auth/dto/user-profile.dto.ts +++ b/backend/core/src/auth/dto/user-profile.dto.ts @@ -23,6 +23,7 @@ export class UserProfileUpdateDto extends PickType(User, [ "createdAt", "updatedAt", "language", + "phoneNumber", ] as const) { @Expose() @IsOptional({ groups: [ValidationsGroupsEnum.default] }) diff --git a/backend/core/src/auth/entities/user.entity.ts b/backend/core/src/auth/entities/user.entity.ts index 0e2ba4dcf2..4c5df22adb 100644 --- a/backend/core/src/auth/entities/user.entity.ts +++ b/backend/core/src/auth/entities/user.entity.ts @@ -12,7 +12,16 @@ import { } from "typeorm" import { Listing } from "../../listings/entities/listing.entity" import { Expose, Type } from "class-transformer" -import { IsDate, IsEmail, IsEnum, IsOptional, IsString, IsUUID, MaxLength } from "class-validator" +import { + IsDate, + IsEmail, + IsEnum, + IsOptional, + IsPhoneNumber, + IsString, + IsUUID, + MaxLength, +} from "class-validator" import { ValidationsGroupsEnum } from "../../shared/types/validations-groups-enum" import { ApiProperty } from "@nestjs/swagger" import { Language } from "../../shared/types/language-enum" @@ -77,6 +86,12 @@ export class User { @Type(() => Date) dob?: Date | null + @Column("varchar", { nullable: true }) + @Expose() + @IsOptional({ groups: [ValidationsGroupsEnum.default] }) + @IsPhoneNumber(null, { groups: [ValidationsGroupsEnum.default] }) + phoneNumber?: string + @CreateDateColumn() @Expose() @IsDate({ groups: [ValidationsGroupsEnum.default] }) diff --git a/backend/core/src/migration/1634848388161-add-phone-number.ts b/backend/core/src/migration/1634848388161-add-phone-number.ts new file mode 100644 index 0000000000..34e26f2d23 --- /dev/null +++ b/backend/core/src/migration/1634848388161-add-phone-number.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from "typeorm" + +export class addPhoneNumber1634848388161 implements MigrationInterface { + name = "addPhoneNumber1634848388161" + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_accounts" ADD "phone_number" character varying`) + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_accounts" DROP COLUMN "phone_number"`) + } +} diff --git a/backend/core/test/user/user.e2e-spec.ts b/backend/core/test/user/user.e2e-spec.ts index cb9911e76e..c022e0c5ba 100644 --- a/backend/core/test/user/user.e2e-spec.ts +++ b/backend/core/test/user/user.e2e-spec.ts @@ -406,7 +406,7 @@ describe("Applications", () => { expect(token).toBeDefined() }) - it("should allow user to update user profile throguh PUT /userProfile/:id endpoint", async () => { + it("should allow user to update user profile through PUT /userProfile/:id endpoint", async () => { const userCreateDto: UserCreateDto = { password: "Abcdef1!", passwordConfirmation: "Abcdef1!", @@ -447,6 +447,7 @@ describe("Applications", () => { ...userCreateDto, currentPassword: userCreateDto.password, firstName: "NewFirstName", + phoneNumber: "+12025550194", } await supertest(app.getHttpServer()) diff --git a/backend/core/types/src/backend-swagger.ts b/backend/core/types/src/backend-swagger.ts index 084f79f22e..7a451ca936 100644 --- a/backend/core/types/src/backend-swagger.ts +++ b/backend/core/types/src/backend-swagger.ts @@ -3783,6 +3783,9 @@ export interface User { /** */ dob?: Date + /** */ + phoneNumber?: string + /** */ createdAt: Date @@ -3826,6 +3829,9 @@ export interface UserCreate { /** */ dob?: Date + + /** */ + phoneNumber?: string } export interface UserBasic { @@ -3862,6 +3868,9 @@ export interface UserBasic { /** */ dob?: Date + /** */ + phoneNumber?: string + /** */ createdAt: Date @@ -3956,6 +3965,9 @@ export interface UserUpdate { /** */ dob?: Date + + /** */ + phoneNumber?: string } export interface UserFilterParams { @@ -4012,6 +4024,9 @@ export interface UserInvite { /** */ dob?: Date + + /** */ + phoneNumber?: string } export interface UserProfileUpdate {