public UsuarioRepresentation CriarNovoUsuarioComplexo(NovoUsuarioCompletoCommand cmd) { //primeiro garantimos as regras de negócio ao instanciar novo usuário. //qualquer erro de negócio será informado para as camadas superiores como uma BusinessException var novoUsuario = EntitiesFactories.UsuarioCompletoFactory.Create(cmd); UsuarioRepresentation usuarioCriado = null; try { // durante a gravação deixamos as constraints do DB agirem. novoUsuario.Id = (int)Database.Session.Save(novoUsuario); //as camadas superiores (WEB/API) devem sempre receber uma representação web, jamais os objetos de domínio usuarioCriado = Database.Session.Get<UsuarioRepresentation>(novoUsuario.Id); } //Erro de negócio tem duas origens: //1. invariants (regras de negócio) da própria Entidade de negócio //2. db constraint: veja como ela é gerada em Ticket.API.Shared.NH.SQL*ExceptionConverter catch (BusinessException e) { _log.Debug(e); throw; } catch (Exception e) { _log.Error(e); BusinessExceptionCreator.ThrowBusinessExceptionWithResourcesMessage("ErroInesperadoInsert"); } return usuarioCriado; }
public IHttpActionResult Novo(NovoUsuarioCompletoCommand novoUsuario) { if (!ModelState.IsValid) { return BadRequest(ModelState); } UsuarioRepresentation usuarioCriado = null; try { usuarioCriado = _usuarioService.CriarNovoUsuarioComplexo(novoUsuario); } catch (BusinessException be) { ExceptionConversor.ComplementModelStateErrors(ModelState, be); return BadRequest(ModelState); } return GerarResponse(usuarioCriado); }