diff --git a/documentation/classes/CreateChatRoomDto.html b/documentation/classes/CreateChatRoomDto.html new file mode 100644 index 0000000..96ad082 --- /dev/null +++ b/documentation/classes/CreateChatRoomDto.html @@ -0,0 +1,400 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
+
+

+

File

+

+

+ src/chatrooms/DTOs/create-chat-room.dto.ts +

+ + + + + + +
+

Index

+ + + + + + + + + + + + + + + +
+
Properties
+
+ +
+
+ + +
+ +

+ Properties +

+ + + + + + + + + + + + + + + + + +
+ + + + name + + +
+ Type : string + +
+ Decorators : +
+ + @IsString()
+
+
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + + Optional + type + + +
+ Type : ChatRoomType + +
+ Decorators : +
+ + @IsEnum(ChatRoomType)
@IsOptional()
+
+
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + + + userIds + + +
+ Type : number[] + +
+ Decorators : +
+ + @IsArray()
@IsNumber({}, {each: true})
@Type(undefined)
+
+
+ +
+
+ + + + + + + +
+ + +
+
import { IsString, IsEnum, IsArray, IsUUID, IsOptional, IsNumber } from 'class-validator';
+import { ChatRoomType } from '../enums/chatroomType'; 
+import { Type } from 'class-transformer';
+
+export class CreateChatRoomDto {
+  @IsString()
+  name: string;
+
+  @IsEnum(ChatRoomType)
+  @IsOptional()
+  type?: ChatRoomType;
+
+
+  @IsArray()
+  @IsNumber({}, { each: true })
+  @Type(() => Number)
+  userIds: number[];
+}
+
+
+ + + + + + + + + +
+
+

results matching ""

+
    +
    +
    +

    No results matching ""

    +
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/CreateUserDto-1.html b/documentation/classes/CreateUserDto-1.html new file mode 100644 index 0000000..1cceeff --- /dev/null +++ b/documentation/classes/CreateUserDto-1.html @@ -0,0 +1,774 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + +
    +
    +

    +

    File

    +

    +

    + src/auth/guard/access-token/access-token.guard.ts +

    + + +

    +

    Description

    +

    +

    +

    CreateUserDto class representing the user creation request payload.

    + +

    + + + + +
    +

    Index

    + + + + + + + + + + + + + + + +
    +
    Properties
    +
    + +
    +
    + + +
    + +

    + Properties +

    + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + Optional + confirmpassword + + +
    + Type : string + +
    + Decorators : +
    + + @ApiProperty({type: 'string', example: '@Password123', description: 'Password should contain numbers, alphabets, and uppercase and should be the same as the password.'})
    @IsString()
    @MaxLength(225)
    @Validate(MatchPasswordsConstraint)
    +
    +
    + +
    +

    Confirm password field, must match the password.

    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + email + + +
    + Type : string + +
    + Decorators : +
    + + @ApiProperty({type: 'string', example: 'fatimaaminu@mail.com', description: 'Email field'})
    @IsEmail()
    @MaxLength(150)
    @Column({unique: true, length: 150})
    +
    +
    + +
    +

    Email field (must be unique).

    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + firstName + + +
    + Type : string + +
    + Decorators : +
    + + @ApiProperty({type: 'string', example: 'Fatima', description: 'First name field'})
    @IsString()
    @IsNotEmpty()
    @MaxLength(100)
    +
    +
    + +
    +

    First name of the user.

    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + Optional + googleId + + +
    + Type : string + +
    + Decorators : +
    + + @ApiProperty({type: 'string', example: 'poiuytrdspoiuytrewazxcvbnmml;poiuytrdsdcvbnm]', description: 'This is autogenerated from Google when you sign up with Google.'})
    @IsString()
    @IsOptional()
    @MaxLength(225)
    +
    +
    + +
    +

    Google ID (used for OAuth authentication).

    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + lastName + + +
    + Type : string + +
    + Decorators : +
    + + @ApiProperty({type: 'string', example: 'Aminu', description: 'Last name field'})
    @IsString()
    @IsOptional()
    @MaxLength(100)
    +
    +
    + +
    +

    Last name of the user.

    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + Optional + password + + +
    + Type : string + +
    + Decorators : +
    + + @ApiProperty({type: 'string', example: '@Password123', description: 'Password should contain numbers, alphabets, and uppercase.'})
    @IsString()
    @MaxLength(225)
    @Matches(/^(?=.*[!@#$%^&])(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{8,16}$/, {message: 'Password must include at least one uppercase letter, one lowercase letter, one number, and one special character.'})
    +
    +
    + +
    +

    Password field with specific validation rules.

    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + Optional + userRole + + +
    + Type : userRole + +
    + Decorators : +
    + + @ApiProperty({enum: userRole, example: undefined, description: 'User role (default is USER if not provided).'})
    @IsEnum(userRole)
    @IsOptional()
    @Transform( => )
    +
    +
    + +
    +

    User role (default is USER if not provided).

    +
    +
    +
    + + + + + + + +
    + + +
    +
    import {
    +  IsString,
    +  IsEmail,
    +  IsNotEmpty,
    +  IsEnum,
    +  IsOptional,
    +  Validate,
    +  MaxLength,
    +  Matches,
    +  ValidatorConstraint,
    +  ValidatorConstraintInterface,
    +  ValidationArguments,
    +} from 'class-validator';
    +import { ApiProperty } from '@nestjs/swagger';
    +import { Column } from 'typeorm';
    +import { userRole } from '../Enums/userRole.enum';
    +import { Transform } from 'class-transformer';
    +
    +/**
    + * ValidatorConstraint: Custom validation class to ensure that
    + * the confirmPassword field matches the password field.
    + */
    +@ValidatorConstraint({ name: 'MatchPasswords', async: false })
    +/**
    + * MatchPasswordsConstraint class that implements ValidatorConstraintInterface
    + */
    +
    +/**MatchPasswordConstraint implementing ValidatorConstraintInterface */
    +class MatchPasswordsConstraint implements ValidatorConstraintInterface {
    +  validate(confirmPassword: string, args: ValidationArguments): boolean {
    +    const object = args.object as CreateUserDto;
    +
    +    /** Ensure password is present before checking match */
    +    if (!object.password) return false;
    +    return confirmPassword === object.password;
    +  }
    +
    +  defaultMessage(args: ValidationArguments): string {
    +    return 'Password and confirm password do not match';
    +  }
    +}
    +
    +/**
    + * CreateUserDto class representing the user creation request payload.
    + */
    +
    +export class CreateUserDto {
    +  /**
    +   * First name of the user.
    +   */
    +  @ApiProperty({
    +    type: 'string',
    +    example: 'Fatima',
    +    description: 'First name field',
    +  })
    +  @IsString()
    +  @IsNotEmpty()
    +  @MaxLength(100)
    +  firstName: string;
    +
    +  /**
    +   * Last name of the user.
    +   */
    +  @ApiProperty({
    +    type: 'string',
    +    example: 'Aminu',
    +    description: 'Last name field',
    +  })
    +  @IsString()
    +  @IsOptional()
    +  @MaxLength(100)
    +  lastName: string;
    +
    +  /**
    +   * Email field (must be unique).
    +   */
    +  @ApiProperty({
    +    type: 'string',
    +    example: 'fatimaaminu@mail.com',
    +    description: 'Email field',
    +  })
    +  @IsEmail()
    +  @MaxLength(150)
    +  @Column({ unique: true, length: 150 })
    +  email: string;
    +
    +  /**
    +   * Password field with specific validation rules.
    +   */
    +  @ApiProperty({
    +    type: 'string',
    +    example: '@Password123',
    +    description: 'Password should contain numbers, alphabets, and uppercase.',
    +  })
    +  @IsString()
    +  @MaxLength(225)
    +  @Matches(
    +    /^(?=.*[!@#$%^&])(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{8,16}$/,
    +    {
    +      message:
    +        'Password must include at least one uppercase letter, one lowercase letter, one number, and one special character.',
    +    },
    +  )
    +  password?: string;
    +
    +  /**
    +   * Confirm password field, must match the password.
    +   */
    +  @ApiProperty({
    +    type: 'string',
    +    example: '@Password123',
    +    description:
    +      'Password should contain numbers, alphabets, and uppercase and should be the same as the password.',
    +  })
    +  @IsString()
    +  @MaxLength(225)
    +  @Validate(MatchPasswordsConstraint)
    +  confirmpassword?: string;
    +
    +  /**
    +   * User role (default is USER if not provided).
    +   */
    +  @ApiProperty({
    +    enum: userRole,
    +    example: userRole.USER,
    +    description: 'User role (default is USER if not provided).',
    +  })
    +  @IsEnum(userRole)
    +  @IsOptional()
    +  @Transform(({ value }) => value ?? userRole.USER)
    +  userRole?: userRole;
    +
    +  /**
    +   * Google ID (used for OAuth authentication).
    +   */
    +  @ApiProperty({
    +    type: 'string',
    +    example: 'poiuytrdspoiuytrewa\zxcvbnmml;poiuytrdsdcvbnm]',
    +    description: 'This is autogenerated from Google when you sign up with Google.',
    +  })
    +  @IsString()
    +  @IsOptional()
    +  @MaxLength(225)
    +  googleId?: string;
    +}
    +
    +
    +
    + + + + + + + + + +
    +
    +

    results matching ""

    +
      +
      +
      +

      No results matching ""

      +
      +
      +
      + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/CreateUserDto.html b/documentation/classes/CreateUserDto.html new file mode 100644 index 0000000..545f792 --- /dev/null +++ b/documentation/classes/CreateUserDto.html @@ -0,0 +1,842 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
      +
      + + +
      +
      + + + + + + + + + + + + + + + + +
      +
      +

      +

      File

      +

      +

      + src/users/DTOs/create-user.dto.ts +

      + + +

      +

      Description

      +

      +

      +

      DTO for creating a user.

      + +

      + + + + +
      +

      Index

      + + + + + + + + + + + + + + + +
      +
      Properties
      +
      + +
      +
      + + +
      + +

      + Properties +

      + + + + + + + + + + + + + + + + + +
      + + + + + + + + chatRooms + + +
      + Type : ChatRoom[] + +
      + Decorators : +
      + + @ApiProperty({type: 'array', required: true, items: undefined})
      @IsNotEmpty()
      @IsArray()
      @ValidateNested({each: true})
      @Type(undefined)
      +
      +
      + +
      + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + Optional + confirmpassword + + +
      + Type : string + +
      + Decorators : +
      + + @ApiProperty({type: 'string', example: '@Password123', description: 'Must contain numbers, alphabets, uppercase letters, and match the password'})
      @IsString()
      @MaxLength(225)
      @Validate(MatchPasswordsConstraint)
      +
      +
      + +
      +

      Confirm password field, must match the password.

      +
      +
      + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + email + + +
      + Type : string + +
      + Decorators : +
      + + @ApiProperty({type: 'string', example: 'fatimaaminu@mail.com', description: 'Email field'})
      @IsEmail()
      @MaxLength(150)
      @Column({unique: true, length: 150})
      +
      +
      + +
      +

      Email field (must be unique).

      +
      +
      + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + firstName + + +
      + Type : string + +
      + Decorators : +
      + + @ApiProperty({type: 'string', example: 'Fatima', description: 'First name field'})
      @IsString()
      @IsNotEmpty()
      @MaxLength(100)
      +
      +
      + +
      +

      First name of the user.

      +
      +
      + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + Optional + googleId + + +
      + Type : string + +
      + Decorators : +
      + + @ApiProperty({type: 'string', example: 'poiuytrdspoiuytrewazxcvbnmml;poiuytrdsdcvbnm]', description: 'This is auto-generated from Google when you sign up with Google'})
      @IsString()
      @IsOptional()
      @MaxLength(225)
      +
      +
      + +
      +

      Google ID (used for OAuth authentication).

      +
      +
      + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + lastName + + +
      + Type : string + +
      + Decorators : +
      + + @ApiProperty({type: 'string', example: 'Aminu', description: 'Last name field'})
      @IsString()
      @IsOptional()
      @MaxLength(100)
      +
      +
      + +
      +

      Last name of the user.

      +
      +
      + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + Optional + password + + +
      + Type : string + +
      + Decorators : +
      + + @ApiProperty({type: 'string', example: '@Password123', description: 'Password should contain a number, alphabets, and an uppercase letter'})
      @IsString()
      @MaxLength(225)
      @Matches(/^(?=.*[!@#$%^&])(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{8,16}$/, {message: 'Password must include at least one uppercase letter, one lowercase letter, one number, and one special character.'})
      +
      +
      + +
      +

      Password field with specific validation rules.

      +
      +
      + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + Optional + userRole + + +
      + Type : userRole + +
      + Decorators : +
      + + @ApiProperty({enum: userRole, description: 'Role of the user'})
      @IsEnum(userRole)
      @IsOptional()
      @Transform( => )
      +
      +
      + +
      +

      User role (default is USER if not provided).

      +
      +
      +
      + + + + + + + +
      + + +
      +
      import {
      +  IsString,
      +  IsEmail,
      +  IsNotEmpty,
      +  IsEnum,
      +  IsOptional,
      +  Validate,
      +  MaxLength,
      +  Matches,
      +  ValidatorConstraint,
      +  ValidatorConstraintInterface,
      +  ValidationArguments,
      +  IsArray,
      +  ValidateNested,
      +} from 'class-validator';
      +import { ApiProperty } from '@nestjs/swagger';
      +import { Column } from 'typeorm';
      +import { userRole } from '../Enums/userRole.enum';
      +import { Transform, Type } from 'class-transformer';
      +import { ChatRoom } from 'src/chatrooms/chatroom.entity';
      +
      +// custum validation to compare passwords
      +
      +@ValidatorConstraint({ name: 'MatchPasswords', async: false })
      +export class MatchPasswordsConstraint implements ValidatorConstraintInterface {
      +  /**
      +   * Validates whether the confirmPassword field matches the password field.
      +   * @param confirmPassword - The confirm password input.
      +   * @param args - Validation arguments.
      +   * @returns Boolean indicating if passwords match.
      +   */
      +  validate(confirmPassword: string, args: ValidationArguments): boolean {
      +    const object = args.object as CreateUserDto;
      +    if (!object.password) return false; // Ensure password is present
      +    return confirmPassword === object.password;
      +  }
      +
      +  /**
      +   * Returns the default error message for password mismatch.
      +   * @param args - Validation arguments.
      +   * @returns Error message string.
      +   */
      +  defaultMessage(args: ValidationArguments): string {
      +    return 'Password and confirm password do not match';
      +  }
      +}
      +
      +/**
      + * DTO for creating a user.
      + */
      +export class CreateUserDto {
      +  /**
      +   * First name of the user.
      +   */
      +  @ApiProperty({
      +    type: 'string',
      +    example: 'Fatima',
      +    description: 'First name field',
      +  })
      +  @IsString()
      +  @IsNotEmpty()
      +  @MaxLength(100)
      +  firstName: string;
      +
      +  /**
      +   * Last name of the user.
      +   */
      +  @ApiProperty({
      +    type: 'string',
      +    example: 'Aminu',
      +    description: 'Last name field',
      +  })
      +  @IsString()
      +  @IsOptional()
      +  @MaxLength(100)
      +  lastName: string;
      +
      +  /**
      +   * Email field (must be unique).
      +   */
      +  @ApiProperty({
      +    type: 'string',
      +    example: 'fatimaaminu@mail.com',
      +    description: 'Email field',
      +  })
      +  @IsEmail()
      +  @MaxLength(150)
      +  @Column({ unique: true, length: 150 })
      +  email: string;
      +
      +  /**
      +   * Password field with specific validation rules.
      +   */
      +  @ApiProperty({
      +    type: 'string',
      +    example: '@Password123',
      +    description: 'Password should contain a number, alphabets, and an uppercase letter',
      +  })
      +  @IsString()
      +  @MaxLength(225)
      +  @Matches(
      +    /^(?=.*[!@#$%^&])(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{8,16}$/,
      +    {
      +      message:
      +        'Password must include at least one uppercase letter, one lowercase letter, one number, and one special character.',
      +    },
      +  )
      +  password?: string;
      +
      +  /**
      +   * Confirm password field, must match the password.
      +   */
      +  @ApiProperty({
      +    type: 'string',
      +    example: '@Password123',
      +    description: 'Must contain numbers, alphabets, uppercase letters, and match the password',
      +  })
      +  @IsString()
      +  @MaxLength(225)
      +  @Validate(MatchPasswordsConstraint)
      +  confirmpassword?: string;
      +
      +  /**
      +   * User role (default is USER if not provided).
      +   */
      +  @ApiProperty({
      +    enum: userRole,
      +    description: 'Role of the user',
      +  })
      +  @IsEnum(userRole)
      +  @IsOptional()
      +  @Transform(({ value }) => value ?? userRole.USER)
      +  userRole?: userRole;
      +
      +  /**
      +   * Google ID (used for OAuth authentication).
      +   */
      +  @ApiProperty({
      +    type: 'string',
      +    example: 'poiuytrdspoiuytrewa\zxcvbnmml;poiuytrdsdcvbnm]',
      +    description: 'This is auto-generated from Google when you sign up with Google',
      +  })
      +  @IsString()
      +  @IsOptional()
      +  @MaxLength(225)
      +  googleId?: string;
      +
      +  @ApiProperty({
      +    type: 'array',
      +    required: true,
      +    items: {
      +      type: 'Chatroom',
      +    },
      +  })
      +  @IsNotEmpty()
      +  @IsArray()
      +  @ValidateNested({ each: true })
      +  @Type(() => ChatRoom)
      +  chatRooms: ChatRoom[];
      +}
      +
      +
      +
      + + + + + + + + + +
      +
      +

      results matching ""

      +
        +
        +
        +

        No results matching ""

        +
        +
        +
        + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/EditUserDto.html b/documentation/classes/EditUserDto.html new file mode 100644 index 0000000..dd72b5a --- /dev/null +++ b/documentation/classes/EditUserDto.html @@ -0,0 +1,329 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
        +
        + + +
        +
        + + + + + + + + + + + + + + + + +
        +
        +

        +

        File

        +

        +

        + src/users/DTOs/patch-user.dto.ts +

        + + +

        +

        Description

        +

        +

        +

        using the patch to edit part of the data, the partialtype makes everything optional

        + +

        + +

        +

        Extends

        +

        +

        + PartialType(CreateUserDto) +

        + + + +
        +

        Index

        + + + + + + + + + + + + + + + +
        +
        Properties
        +
        +
          +
        • + + + id +
        • +
        +
        +
        + + +
        + +

        + Properties +

        + + + + + + + + + + + + + + + + + + + + +
        + + + + + id + + +
        + Type : number + +
        + Decorators : +
        + + @IsInt()
        @IsNotEmpty()
        +
        +
        + +
        +

        unique identifier id

        +
        +
        +
        + + + + + + + +
        + + +
        +
        import { IsEmail, IsInt, IsNotEmpty, IsString } from "class-validator";
        +import { PartialType } from "@nestjs/mapped-types";
        +import { CreateUserDto } from "./create-user.dto";
        +
        + 
        +/**using the patch to edit part of the data, the partialtype makes everything optional */ 
        +export class EditUserDto extends PartialType(CreateUserDto) {
        +    /**unique identifier id */
        +    @IsInt()
        +    @IsNotEmpty()
        +    id: number;
        +}
        +
        +
        +
        +
        + + + + + + + + + +
        +
        +

        results matching ""

        +
          +
          +
          +

          No results matching ""

          +
          +
          +
          + +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/GetuserParamDto.html b/documentation/classes/GetuserParamDto.html new file mode 100644 index 0000000..0602f99 --- /dev/null +++ b/documentation/classes/GetuserParamDto.html @@ -0,0 +1,323 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
          +
          + + +
          +
          + + + + + + + + + + + + + + + + +
          +
          +

          +

          File

          +

          +

          + src/users/DTOs/getUserparamdto.ts +

          + + +

          +

          Description

          +

          +

          +

          Get users paramsdto class

          + +

          + + + + +
          +

          Index

          + + + + + + + + + + + + + + + +
          +
          Properties
          +
          +
            +
          • + + + Optional + id +
          • +
          +
          +
          + + +
          + +

          + Properties +

          + + + + + + + + + + + + + + + + + + + + +
          + + + + + Optional + id + + +
          + Type : number + +
          + Decorators : +
          + + @IsInt()
          @Type(undefined)
          +
          +
          + +
          +

          Unique identifier id

          +
          +
          +
          + + + + + + + +
          + + +
          +
          import { IsOptional,IsInt } from "class-validator";
          +import { Type } from 'class-transformer';
          +
          +/**Get users paramsdto class */
          +export class GetuserParamDto {
          +   
          +     /**Unique identifier id */
          +    @IsInt()
          +    @Type (() => Number )
          +    id?:number
          +
          +}
          +
          +
          + + + + + + + + + +
          +
          +

          results matching ""

          +
            +
            +
            +

            No results matching ""

            +
            +
            +
            + +
            +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/GoogleTokenDto.html b/documentation/classes/GoogleTokenDto.html new file mode 100644 index 0000000..f8c7d94 --- /dev/null +++ b/documentation/classes/GoogleTokenDto.html @@ -0,0 +1,316 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
            +
            + + +
            +
            + + + + + + + + + + + + + + + + +
            +
            +

            +

            File

            +

            +

            + src/auth/social/dtos/google-token.dto.ts +

            + + +

            +

            Description

            +

            +

            +

            class for GoogleTokendto

            + +

            + + + + +
            +

            Index

            + + + + + + + + + + + + + + + +
            +
            Properties
            +
            + +
            +
            + + +
            + +

            + Properties +

            + + + + + + + + + + + + + + + + + + + + +
            + + + + token + + +
            + Type : string + +
            + Decorators : +
            + + @IsNotEmpty()
            +
            +
            + +
            +

            The Token of type string

            +
            +
            +
            + + + + + + + +
            + + +
            +
            import {IsNotEmpty} from 'class-validator'
            +
            +/**class for GoogleTokendto */
            +export class GoogleTokenDto {
            +
            +     /**The Token of type string */
            +    @IsNotEmpty()
            +    token: string
            +}
            +
            +
            + + + + + + + + + +
            +
            +

            results matching ""

            +
              +
              +
              +

              No results matching ""

              +
              +
              +
              + +
              +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/MatchPasswordsConstraint-1.html b/documentation/classes/MatchPasswordsConstraint-1.html new file mode 100644 index 0000000..56724ea --- /dev/null +++ b/documentation/classes/MatchPasswordsConstraint-1.html @@ -0,0 +1,560 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
              +
              + + +
              +
              + + + + + + + + + + + + + + + + +
              +
              +

              +

              File

              +

              +

              + src/auth/guard/access-token/access-token.guard.ts +

              + + +

              +

              Description

              +

              +

              +

              ValidatorConstraint: Custom validation class to ensure that +the confirmPassword field matches the password field.

              + +

              + + +

              +

              Implements

              +

              +

              + ValidatorConstraintInterface +

              + + +
              +

              Index

              + + + + + + + + + + + + + + + +
              +
              Methods
              +
              + +
              +
              + + + +
              + +

              + Methods +

              + + + + + + + + + + + + + + + + + + + +
              + + + defaultMessage + + +
              +defaultMessage(args: ValidationArguments) +
              + +
              + +
              + Parameters : + + + + + + + + + + + + + + + + + + + +
              NameTypeOptional
              args + ValidationArguments + + No +
              +
              +
              + Returns : string + +
              +
              + +
              +
              + + + + + + + + + + + + + + + + + + + +
              + + + validate + + +
              +validate(confirmPassword: string, args: ValidationArguments) +
              + +
              + +
              + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              NameTypeOptional
              confirmPassword + string + + No +
              args + ValidationArguments + + No +
              +
              +
              + Returns : boolean + +
              +
              + +
              +
              +
              + + + + + +
              + + +
              +
              import {
              +  IsString,
              +  IsEmail,
              +  IsNotEmpty,
              +  IsEnum,
              +  IsOptional,
              +  Validate,
              +  MaxLength,
              +  Matches,
              +  ValidatorConstraint,
              +  ValidatorConstraintInterface,
              +  ValidationArguments,
              +} from 'class-validator';
              +import { ApiProperty } from '@nestjs/swagger';
              +import { Column } from 'typeorm';
              +import { userRole } from '../Enums/userRole.enum';
              +import { Transform } from 'class-transformer';
              +
              +/**
              + * ValidatorConstraint: Custom validation class to ensure that
              + * the confirmPassword field matches the password field.
              + */
              +@ValidatorConstraint({ name: 'MatchPasswords', async: false })
              +/**
              + * MatchPasswordsConstraint class that implements ValidatorConstraintInterface
              + */
              +
              +/**MatchPasswordConstraint implementing ValidatorConstraintInterface */
              +class MatchPasswordsConstraint implements ValidatorConstraintInterface {
              +  validate(confirmPassword: string, args: ValidationArguments): boolean {
              +    const object = args.object as CreateUserDto;
              +
              +    /** Ensure password is present before checking match */
              +    if (!object.password) return false;
              +    return confirmPassword === object.password;
              +  }
              +
              +  defaultMessage(args: ValidationArguments): string {
              +    return 'Password and confirm password do not match';
              +  }
              +}
              +
              +/**
              + * CreateUserDto class representing the user creation request payload.
              + */
              +
              +export class CreateUserDto {
              +  /**
              +   * First name of the user.
              +   */
              +  @ApiProperty({
              +    type: 'string',
              +    example: 'Fatima',
              +    description: 'First name field',
              +  })
              +  @IsString()
              +  @IsNotEmpty()
              +  @MaxLength(100)
              +  firstName: string;
              +
              +  /**
              +   * Last name of the user.
              +   */
              +  @ApiProperty({
              +    type: 'string',
              +    example: 'Aminu',
              +    description: 'Last name field',
              +  })
              +  @IsString()
              +  @IsOptional()
              +  @MaxLength(100)
              +  lastName: string;
              +
              +  /**
              +   * Email field (must be unique).
              +   */
              +  @ApiProperty({
              +    type: 'string',
              +    example: 'fatimaaminu@mail.com',
              +    description: 'Email field',
              +  })
              +  @IsEmail()
              +  @MaxLength(150)
              +  @Column({ unique: true, length: 150 })
              +  email: string;
              +
              +  /**
              +   * Password field with specific validation rules.
              +   */
              +  @ApiProperty({
              +    type: 'string',
              +    example: '@Password123',
              +    description: 'Password should contain numbers, alphabets, and uppercase.',
              +  })
              +  @IsString()
              +  @MaxLength(225)
              +  @Matches(
              +    /^(?=.*[!@#$%^&])(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{8,16}$/,
              +    {
              +      message:
              +        'Password must include at least one uppercase letter, one lowercase letter, one number, and one special character.',
              +    },
              +  )
              +  password?: string;
              +
              +  /**
              +   * Confirm password field, must match the password.
              +   */
              +  @ApiProperty({
              +    type: 'string',
              +    example: '@Password123',
              +    description:
              +      'Password should contain numbers, alphabets, and uppercase and should be the same as the password.',
              +  })
              +  @IsString()
              +  @MaxLength(225)
              +  @Validate(MatchPasswordsConstraint)
              +  confirmpassword?: string;
              +
              +  /**
              +   * User role (default is USER if not provided).
              +   */
              +  @ApiProperty({
              +    enum: userRole,
              +    example: userRole.USER,
              +    description: 'User role (default is USER if not provided).',
              +  })
              +  @IsEnum(userRole)
              +  @IsOptional()
              +  @Transform(({ value }) => value ?? userRole.USER)
              +  userRole?: userRole;
              +
              +  /**
              +   * Google ID (used for OAuth authentication).
              +   */
              +  @ApiProperty({
              +    type: 'string',
              +    example: 'poiuytrdspoiuytrewa\zxcvbnmml;poiuytrdsdcvbnm]',
              +    description: 'This is autogenerated from Google when you sign up with Google.',
              +  })
              +  @IsString()
              +  @IsOptional()
              +  @MaxLength(225)
              +  googleId?: string;
              +}
              +
              +
              +
              + + + + + + + + + +
              +
              +

              results matching ""

              +
                +
                +
                +

                No results matching ""

                +
                +
                +
                + +
                +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/MatchPasswordsConstraint.html b/documentation/classes/MatchPasswordsConstraint.html new file mode 100644 index 0000000..3d29069 --- /dev/null +++ b/documentation/classes/MatchPasswordsConstraint.html @@ -0,0 +1,598 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
                +
                + + +
                +
                + + + + + + + + + + + + + + + + +
                +
                +

                +

                File

                +

                +

                + src/users/DTOs/create-user.dto.ts +

                + + + + +

                +

                Implements

                +

                +

                + ValidatorConstraintInterface +

                + + +
                +

                Index

                + + + + + + + + + + + + + + + +
                +
                Methods
                +
                + +
                +
                + + + +
                + +

                + Methods +

                + + + + + + + + + + + + + + + + + + + +
                + + + defaultMessage + + +
                +defaultMessage(args: ValidationArguments) +
                + +
                +

                Returns the default error message for password mismatch.

                +
                + +
                + Parameters : + + + + + + + + + + + + + + + + + + + + + +
                NameTypeOptionalDescription
                args + ValidationArguments + + No + +
                  +
                • Validation arguments.
                • +
                + +
                +
                +
                + Returns : string + +
                +
                +

                Error message string.

                + +
                +
                + + + + + + + + + + + + + + + + + + + +
                + + + validate + + +
                +validate(confirmPassword: string, args: ValidationArguments) +
                + +
                +

                Validates whether the confirmPassword field matches the password field.

                +
                + +
                + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                NameTypeOptionalDescription
                confirmPassword + string + + No + +
                  +
                • The confirm password input.
                • +
                + +
                args + ValidationArguments + + No + +
                  +
                • Validation arguments.
                • +
                + +
                +
                +
                + Returns : boolean + +
                +
                +

                Boolean indicating if passwords match.

                + +
                +
                +
                + + + + + +
                + + +
                +
                import {
                +  IsString,
                +  IsEmail,
                +  IsNotEmpty,
                +  IsEnum,
                +  IsOptional,
                +  Validate,
                +  MaxLength,
                +  Matches,
                +  ValidatorConstraint,
                +  ValidatorConstraintInterface,
                +  ValidationArguments,
                +  IsArray,
                +  ValidateNested,
                +} from 'class-validator';
                +import { ApiProperty } from '@nestjs/swagger';
                +import { Column } from 'typeorm';
                +import { userRole } from '../Enums/userRole.enum';
                +import { Transform, Type } from 'class-transformer';
                +import { ChatRoom } from 'src/chatrooms/chatroom.entity';
                +
                +// custum validation to compare passwords
                +
                +@ValidatorConstraint({ name: 'MatchPasswords', async: false })
                +export class MatchPasswordsConstraint implements ValidatorConstraintInterface {
                +  /**
                +   * Validates whether the confirmPassword field matches the password field.
                +   * @param confirmPassword - The confirm password input.
                +   * @param args - Validation arguments.
                +   * @returns Boolean indicating if passwords match.
                +   */
                +  validate(confirmPassword: string, args: ValidationArguments): boolean {
                +    const object = args.object as CreateUserDto;
                +    if (!object.password) return false; // Ensure password is present
                +    return confirmPassword === object.password;
                +  }
                +
                +  /**
                +   * Returns the default error message for password mismatch.
                +   * @param args - Validation arguments.
                +   * @returns Error message string.
                +   */
                +  defaultMessage(args: ValidationArguments): string {
                +    return 'Password and confirm password do not match';
                +  }
                +}
                +
                +/**
                + * DTO for creating a user.
                + */
                +export class CreateUserDto {
                +  /**
                +   * First name of the user.
                +   */
                +  @ApiProperty({
                +    type: 'string',
                +    example: 'Fatima',
                +    description: 'First name field',
                +  })
                +  @IsString()
                +  @IsNotEmpty()
                +  @MaxLength(100)
                +  firstName: string;
                +
                +  /**
                +   * Last name of the user.
                +   */
                +  @ApiProperty({
                +    type: 'string',
                +    example: 'Aminu',
                +    description: 'Last name field',
                +  })
                +  @IsString()
                +  @IsOptional()
                +  @MaxLength(100)
                +  lastName: string;
                +
                +  /**
                +   * Email field (must be unique).
                +   */
                +  @ApiProperty({
                +    type: 'string',
                +    example: 'fatimaaminu@mail.com',
                +    description: 'Email field',
                +  })
                +  @IsEmail()
                +  @MaxLength(150)
                +  @Column({ unique: true, length: 150 })
                +  email: string;
                +
                +  /**
                +   * Password field with specific validation rules.
                +   */
                +  @ApiProperty({
                +    type: 'string',
                +    example: '@Password123',
                +    description: 'Password should contain a number, alphabets, and an uppercase letter',
                +  })
                +  @IsString()
                +  @MaxLength(225)
                +  @Matches(
                +    /^(?=.*[!@#$%^&])(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{8,16}$/,
                +    {
                +      message:
                +        'Password must include at least one uppercase letter, one lowercase letter, one number, and one special character.',
                +    },
                +  )
                +  password?: string;
                +
                +  /**
                +   * Confirm password field, must match the password.
                +   */
                +  @ApiProperty({
                +    type: 'string',
                +    example: '@Password123',
                +    description: 'Must contain numbers, alphabets, uppercase letters, and match the password',
                +  })
                +  @IsString()
                +  @MaxLength(225)
                +  @Validate(MatchPasswordsConstraint)
                +  confirmpassword?: string;
                +
                +  /**
                +   * User role (default is USER if not provided).
                +   */
                +  @ApiProperty({
                +    enum: userRole,
                +    description: 'Role of the user',
                +  })
                +  @IsEnum(userRole)
                +  @IsOptional()
                +  @Transform(({ value }) => value ?? userRole.USER)
                +  userRole?: userRole;
                +
                +  /**
                +   * Google ID (used for OAuth authentication).
                +   */
                +  @ApiProperty({
                +    type: 'string',
                +    example: 'poiuytrdspoiuytrewa\zxcvbnmml;poiuytrdsdcvbnm]',
                +    description: 'This is auto-generated from Google when you sign up with Google',
                +  })
                +  @IsString()
                +  @IsOptional()
                +  @MaxLength(225)
                +  googleId?: string;
                +
                +  @ApiProperty({
                +    type: 'array',
                +    required: true,
                +    items: {
                +      type: 'Chatroom',
                +    },
                +  })
                +  @IsNotEmpty()
                +  @IsArray()
                +  @ValidateNested({ each: true })
                +  @Type(() => ChatRoom)
                +  chatRooms: ChatRoom[];
                +}
                +
                +
                +
                + + + + + + + + + +
                +
                +

                results matching ""

                +
                  +
                  +
                  +

                  No results matching ""

                  +
                  +
                  +
                  + +
                  +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/Paginated.html b/documentation/classes/Paginated.html new file mode 100644 index 0000000..c297699 --- /dev/null +++ b/documentation/classes/Paginated.html @@ -0,0 +1,359 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
                  +
                  + + +
                  +
                  + + + + + + + + + + + + + + + + +
                  +
                  +

                  +

                  File

                  +

                  +

                  + src/common/pagination/Interfaces/paginatedInterface.ts +

                  + + + + + + +
                  +

                  Index

                  + + + + + + + + + + + + + + + +
                  +
                  Properties
                  +
                  + +
                  +
                  + + +
                  + +

                  + Properties +

                  + + + + + + + + + + + + + + +
                  + + + data + + +
                  + Type : T[] + +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + link + + +
                  + Type : literal type + +
                  + +
                  + + + + + + + + + + + + + + +
                  + + + meta + + +
                  + Type : literal type + +
                  + +
                  +
                  + + + + + + + +
                  + + +
                  +
                  export class Paginated <T>  {
                  +    data:T[];
                  +    meta: {
                  +        itemsPerPage:number,
                  +        totalItems: number,
                  +        currentPage:number,
                  +        totalPage:number,
                  +    };
                  +    link: 
                  +    {
                  +        first: string,
                  +        last:string,
                  +        current: string,
                  +        previous:string,
                  +        next:string,
                  +    }
                  +
                  +}
                  +
                  +
                  + + + + + + + + + +
                  +
                  +

                  results matching ""

                  +
                    +
                    +
                    +

                    No results matching ""

                    +
                    +
                    +
                    + +
                    +
                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/PaginationQueryDto.html b/documentation/classes/PaginationQueryDto.html new file mode 100644 index 0000000..f983ec6 --- /dev/null +++ b/documentation/classes/PaginationQueryDto.html @@ -0,0 +1,366 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
                    +
                    + + +
                    +
                    + + + + + + + + + + + + + + + + +
                    +
                    +

                    +

                    File

                    +

                    +

                    + src/common/pagination/pagination-query.dto.ts +

                    + + + + + + +
                    +

                    Index

                    + + + + + + + + + + + + + + + +
                    +
                    Properties
                    +
                    +
                      +
                    • + + + Optional + limit +
                    • +
                    • + + + Optional + page +
                    • +
                    +
                    +
                    + + +
                    + +

                    + Properties +

                    + + + + + + + + + + + + + + + + + + + + +
                    + + + + + Optional + limit + + +
                    + Type : number + +
                    + Default value : 2 +
                    + Decorators : +
                    + + @IsOptional()
                    @IsPositive()
                    +
                    +
                    + +
                    + + + + + + + + + + + + + + + + + + + + +
                    + + + + + Optional + page + + +
                    + Type : number + +
                    + Default value : 1 +
                    + Decorators : +
                    + + @IsOptional()
                    @IsPositive()
                    +
                    +
                    + +
                    +
                    + + + + + + + +
                    + + +
                    +
                    import { IsOptional, IsPositive } from "class-validator";
                    +
                    +
                    +export class PaginationQueryDto {
                    +
                    +    @IsOptional()
                    +    @IsPositive()
                    +    limit?:number = 2;
                    +
                    +    @IsOptional()
                    +    @IsPositive()
                    +    page?:number = 1;
                    +
                    +}
                    +
                    +
                    + + + + + + + + + +
                    +
                    +

                    results matching ""

                    +
                      +
                      +
                      +

                      No results matching ""

                      +
                      +
                      +
                      + +
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/RefreshTokenDto.html b/documentation/classes/RefreshTokenDto.html new file mode 100644 index 0000000..13f2a6b --- /dev/null +++ b/documentation/classes/RefreshTokenDto.html @@ -0,0 +1,319 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
                      +
                      + + +
                      +
                      + + + + + + + + + + + + + + + + +
                      +
                      +

                      +

                      File

                      +

                      +

                      + src/auth/dtos/refreshTokenDto.ts +

                      + + +

                      +

                      Description

                      +

                      +

                      +

                      refresh tokendto class

                      + +

                      + + + + +
                      +

                      Index

                      + + + + + + + + + + + + + + + +
                      +
                      Properties
                      +
                      + +
                      +
                      + + +
                      + +

                      + Properties +

                      + + + + + + + + + + + + + + + + + + + + +
                      + + + + + refreshToken + + +
                      + Type : string + +
                      + Decorators : +
                      + + @IsString()
                      @IsNotEmpty()
                      +
                      +
                      + +
                      +

                      refreshToken of type string

                      +
                      +
                      +
                      + + + + + + + +
                      + + +
                      +
                      import { IsNotEmpty, IsString, } from "class-validator";
                      +
                      +/**refresh tokendto class */
                      +export class RefreshTokenDto {
                      +
                      +    /**refreshToken of type string */
                      +    @IsString()
                      +    @IsNotEmpty()
                      +    refreshToken: string
                      +}
                      +
                      +
                      + + + + + + + + + +
                      +
                      +

                      results matching ""

                      +
                        +
                        +
                        +

                        No results matching ""

                        +
                        +
                        +
                        + +
                        +
                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/SignInDto.html b/documentation/classes/SignInDto.html new file mode 100644 index 0000000..63c651f --- /dev/null +++ b/documentation/classes/SignInDto.html @@ -0,0 +1,371 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
                        +
                        + + +
                        +
                        + + + + + + + + + + + + + + + + +
                        +
                        +

                        +

                        File

                        +

                        +

                        + src/auth/dtos/userDto.ts +

                        + + +

                        +

                        Description

                        +

                        +

                        +

                        signinDto class

                        + +

                        + + + + +
                        +

                        Index

                        + + + + + + + + + + + + + + + +
                        +
                        Properties
                        +
                        + +
                        +
                        + + +
                        + +

                        + Properties +

                        + + + + + + + + + + + + + + + + + + + + +
                        + + + + + email + + +
                        + Type : string + +
                        + Decorators : +
                        + + @IsEmail()
                        @IsNotEmpty()
                        +
                        +
                        + +
                        +

                        A unique email address of the user example:Rukky@gmail.com

                        +
                        +
                        + + + + + + + + + + + + + + + + + + + + +
                        + + + + + password + + +
                        + Type : string + +
                        + Decorators : +
                        + + @IsString()
                        @IsNotEmpty()
                        +
                        +
                        + +
                        +

                        password of the user

                        +
                        +
                        +
                        + + + + + + + +
                        + + +
                        +
                        import { IsEmail, IsNotEmpty, IsString } from "class-validator";
                        +
                        +/**signinDto class */
                        +export class SignInDto {
                        +  /**A unique email address of the user example:Rukky@gmail.com */
                        +  @IsEmail()
                        +  @IsNotEmpty()
                        +  email: string;
                        +
                        +  /**password of the user */
                        +  @IsString()
                        +  @IsNotEmpty()
                        +  password: string;
                        +}
                        +
                        +
                        + + + + + + + + + +
                        +
                        +

                        results matching ""

                        +
                          +
                          +
                          +

                          No results matching ""

                          +
                          +
                          +
                          + +
                          +
                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/UpdateChatRoomDto.html b/documentation/classes/UpdateChatRoomDto.html new file mode 100644 index 0000000..a114eae --- /dev/null +++ b/documentation/classes/UpdateChatRoomDto.html @@ -0,0 +1,234 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
                          +
                          + + +
                          +
                          + + + + + + + + + + + + + + + + +
                          +
                          +

                          +

                          File

                          +

                          +

                          + src/chatrooms/DTOs/update-chat-room.dto.ts +

                          + + + +

                          +

                          Extends

                          +

                          +

                          + PartialType(CreateChatRoomDto) +

                          + + + + + + + + + + + + +
                          + + +
                          +
                          import { PartialType } from '@nestjs/mapped-types';
                          +import { CreateChatRoomDto } from './create-chat-room.dto';
                          +
                          +export class UpdateChatRoomDto extends PartialType(CreateChatRoomDto) {}
                          +
                          +
                          + + + + + + + + + +
                          +
                          +

                          results matching ""

                          +
                            +
                            +
                            +

                            No results matching ""

                            +
                            +
                            +
                            + +
                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/classes/WebsocketGateway.html b/documentation/classes/WebsocketGateway.html new file mode 100644 index 0000000..19025eb --- /dev/null +++ b/documentation/classes/WebsocketGateway.html @@ -0,0 +1,354 @@ + + + + + + real-time-chat-api documentation + + + + + + + + + + + + + + +
                            +
                            + + +
                            +
                            + + + + + + + + + + + + + + + + +
                            +
                            +

                            +

                            File

                            +

                            +

                            + src/web-socket/websocketEvents/websocket.gateway.ts +

                            + + + + + + +
                            +

                            Index

                            + + + + + + + + + + + + + + + +
                            +
                            Methods
                            +
                            + +
                            +
                            + + + +
                            + +

                            + Methods +

                            + + + + + + + + + + + + + + + + + + + + + + +
                            + + + + handleMessage + + +
                            + + handleMessage(client: any, payload: any) +
                            + Decorators : +
                            + @SubscribeMessage('message')
                            +
                            + +
                            + +
                            + Parameters : + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeOptional
                            client + any + + No +
                            payload + any + + No +
                            +
                            +
                            + Returns : string + +
                            +
                            + +
                            +
                            +
                            + + + + + +
                            + + +
                            +
                            import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';
                            +
                            +@WebSocketGateway()
                            +export class WebsocketGateway {
                            +  @SubscribeMessage('message')
                            +  handleMessage(client: any, payload: any): string {
                            +    return 'Hello world!';
                            +  }
                            +}
                            +
                            +
                            + + + + + + + + + +
                            +
                            +

                            results matching ""

                            +
                              +
                              +
                              +

                              No results matching ""

                              +
                              +
                              +
                              + +
                              +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/controllers/AppController.html b/documentation/controllers/AppController.html index 559ef6c..71e8123 100644 --- a/documentation/controllers/AppController.html +++ b/documentation/controllers/AppController.html @@ -13,7 +13,7 @@ -