Как правильно настроить отношения ролей пользователей в гнездах js и монго - PullRequest
0 голосов
/ 01 мая 2020

Я застрял с этим в течение некоторого времени. У меня есть тип / роль пользователя, который должен иметь значение по умолчанию, если тип / роль пользователя не передается из тела. если тип / роль пользователя будет передан, будет использован пользовательский.

Буду признателен, если кто-нибудь сможет мне помочь с этим. Я могу использовать эту идею в других компонентах с аналогичными структурами. Спасибо

Это ошибка, которую я получаю, когда инициирую регистрацию

{"statusCode": 400, "message": ["usertype.nested свойство usertype должно быть либо объектом, либо массив "]," ошибка ":" Неверный запрос "}

  1. Как передать тип пользователя / роль из тела?

  2. Как мне установить значение по умолчанию в схеме / документе / dto?

  3. Как мне справиться с этим в службе?

Это Вот что я сделал

Схема

import * as mongoose from 'mongoose';

export const UserSchema = new mongoose.Schema({
    userId: {
        type: mongoose.SchemaTypes.ObjectId,
    },
    firstname: {
        type: String,
        required: true
    },
    password: {
        type: String
    },
    email: {
        type: String,
        required: true,
    },
     usertype: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'UserType',
        default: ''
    },
})

Интерфейс

import { Document } from 'mongoose';
import { UserType } from '../../usertype/interface/usertype.interface'

export interface User extends Document {
    userId: string;
    firstname: string;
    password: string;
    email: string;
    usertype: UserType;
}

Вот созданный

import { ApiProperty } from '@nestjs/swagger';
import { IsString, MinLength, IsEmail, ValidateNested } from 'class-validator';
import { UserType } from 'src/usertype/interface/usertype.interface';

export class CreateUserDto {
    @ApiProperty()
    @IsString()
    firstname: string;

    @ApiProperty()
    @MinLength(6, { message: "Your Password should be at least 6 characters" })
    password: string;

    @ApiProperty()
    @IsEmail()
    email: string;

    @ValidateNested()
    usertype: UserType;

}

    //register user
    async register(createDTO: CreateUserDto, userType: CreateUserTypeDTO): Promise<User> {

        const { email } = createDTO;
        const user = await this.userModel.findOne({ email })

        if (user) {
            throw new HttpException('User already exists', HttpStatus.BAD_REQUEST);
        }

        const createdUser = await this.userModel.create({
            ...createDTO,
            usertype: userType
        });

        await createdUser.save();
        return createdUser;
    }
...