3

我想强制执行唯一性,所以我想看看是否有任何其他电子邮件和用户名与发布到此路线的电子邮件和用户名相似。我如何通过存储库做到这一点,它不断询问我看到但无法理解的过滤器。

@post('/users', {
    responses: {
      '200': {
        description: 'User model instance',
        content: {'application/json': {schema: {'x-ts-type': User}}},
      },
    },
  })
  async create(@requestBody() user: User): Promise<User> {
    //check : User= await this.userRepository.create(user);
    //@param.query.object('filter', getFilterSchemaFor(User)) filter?: Filter;
    // var check:any=await this.userRepository.find(filter);
    //filter: Filter;
    var check: User = await this.userRepository.find({email:user.email});
    var isNotPresent: boolean = true;
    // check.forEach(function(val){

    // });
    // if(isNotPresent)
    return await this.userRepository.create(user);
  }
4

1 回答 1

6

Filter对象具有以下可用于定义查询及其响应的属性:

  1. where:用于定义查询。在您的情况下,您希望找到与请求正文中提供的电子邮件和用户名相同的现有用户。
  2. fields:指定您希望在查询响应中包含或排除的字段。由返回的数组中的每个对象将仅具有对象中设置的find()那些字段。 truefields
  3. offset, skip, limitand order: 用于分页。

因此,在您的情况下,假设“用户”具有“电子邮件”和“用户名”,过滤器对象将如下所示:

const filter: Filter = {
    where: {
        'email': user.email,
        'username': user.username
    },
    fields: {
        email: true,
        username: true
    },
    offset: 0,
    limit: 10,
    skip: 0,
    order: [],
};

您对存储库方法的调用如下所示:

var check: User = await this.userRepository.find(filter);

我的第一个答案。希望这可以帮助。

于 2019-05-05T22:09:58.170 回答