guilima / financial-back

Node API structure connection to postgreSQL / redis
MIT License
4 stars 0 forks source link

Interface #4

Open wagnerssouza opened 5 years ago

wagnerssouza commented 5 years ago

É responsabilidade do schema validar se o campo é obrigatório, único ou whatever?

Por exemplo, aqui, você usa o paradigma funcional pra validar o campo idGroup

idGroup: array().items(number()).single().unique().required(),

Se falarmos do mongoose, ele faz um pouco diferente, e a responsabilidade da validação, no próprio exemplo do site, não está lá:

var mongoose = require('mongoose');

//Define a schema
var Schema = mongoose.Schema;

var SomeModelSchema = new Schema({
  a_string: String,
  a_date: Date
});

Aonde, de fato, deveriam ficar as validações?

No caso do dotnet core, as validações estão na Model, e não temos um schema, como no mongoose, usamos Annotations:

using System.ComponentModel.DataAnnotations;
namespace api.Models.ValuesPostModel
{
    public class ValuesPostModel {

        [Required (ErrorMessage = "Campo obrigatório")]
        [StringLength(5, ErrorMessage = "Não pode ter mais que 5 caracteres")]
        public string brand {get; set;}        

        [Required]
        public string model {get; set;}

    }
}

O que vocês acham sobre isso? @guilima e @diogosalmeida

https://github.com/guilima/financial-back/blob/14714cbf4e423c9070cfdd7c406cb328d1f7bcea/src/schema/series.schema.js#L1

guilima commented 5 years ago

Tenho várias dúvidas em relação a essa parte. Não sei as diferenças práticas de interface, model e schema. Como ficariam organizado num projeto esses arquivos? Além disso existe o ponto de validação que a própria lib JOI faz.

No meu caso com a lib JOI fiz um middleware de validação de entrada nos endpoints. Se tiver algum "tipo" ou regra errada acabo por apresentar mensagem de erro adequada como resposta. Além disso também server por transformar um determinado dado. Por exemplo: "1" => number() => 1

Se for pensar o meu arquivo não é interface e nem schema. Serve apenas como validador e formalizador de entrada dos endpoints.

Será que com nodejs existe um padrão para organizar tudo isso de uma forma clara?