Lock Otimista com Mongoose

Salve pessoal!

Estou desenvolvendo um pequeno sistema em Node e estou utilizando Express com Mongo/Mongoose.

Estou utilizando o código abaixo para fazer UPDATE no meu objeto, mas gostaria de saber o que vocês acham.
Na verdade a minha dúvida é quanto ao modo de devolver o erro na API, dado que estou devolvendo 200 para OK, 404 quando o objeto não é encontrado ou, por último e não menos importante, 412 quando o usuário tentou alterar um recurso que já foi atualizado previamente por outro processo e/ou usuário.

Como vocês costumam fazer?

controller.save = function (req, res) {
    var _id = req.params.id;
    var data = {
      "name": req.body.name,
      "description": req.body.description,
      "createdBy": req.body.createdBy,
      "updatedBy": req.user.sub,
      "version" : req.body.version + 1
    };
    try {
      ContractType.findOneAndUpdate({'_id': _id, 'version': req.body.version}, data, {new: true},
        function (error, contractType) {
          if(error) {
            console.error(error);
            res.status(500).json(error);
          }else {
            if(contractType) {
              res.json(contractType);
            } else {
              ContractType.findById(_id, function (error, contractType) {
                  if(error) {
                    console.log(error);
                    res.status(404).json(error);
                  } else {
                    if (!contractType){
                      res.status(404).json({error: 'Tipo de Contrato não existe ou foi excluído.'})
                    } else {
                      res.status(412).json(contractType);
                    }
                  }
                }
              );
            }
          }
        });
    } catch(exc) {
      console.error(exc);
      res.status(500).json(exc);
    }

  };

E ai cara, beleza? =)

Então…
Eu, particularmente, uso o 200 quando ta ok, 500 em todos os if(error) e, no caso que você esta usando 412, eu usaria 409 (Conflict) …

Não sei qual a palicação da sua API, mas não curto muito o retorno do erro não tratado pq expõe sua arquitetura e um cheiro do seu codigo pra quem está consumindo a API… Então eu trataria os erros antes do retorno, ou retornaria apenas o error.message, sem a stack de erro… =)