Skip to content

Duplicação do objeto no banco ao mudar status para enabled/disabled (Modulo Arquitetura Hexagonal) #2

Description

@highlanderdantas

Tarde pessoal,

na aula Enable e Disable Handlers e considerações finais do modulo, após a criação handler de disable e enable product, eu percebi que ele duplicava o registro no banco para arrumar isso e preciso arrumar no seguinte local:

PATH: /adapters/db/product.go

func (p *ProductDb) Save(product application.ProductInterface) (application.ProductInterface, error) {
	var rows int
	p.db.QueryRow(`select id from products where id=?`, product.GetID()).Scan(&rows)
	if rows == 0 {
		_, err := p.create(product)
		if err != nil {
			return nil, err
		}
	} else {
		_, err := p.update(product)
		if err != nil {
			return nil, err
		}
	}
	return product, nil
}

Desta forma vocês estão retornando o ID e na verdade querem um count(*) um quantidade de registros existente com aquele determinado ID, como esse select não faz um retorno do tipo int e sim um []string ele não consegue jogar o retorno na variável rows e o valor por padrão de um objeto declarado do tipo int e 0. Para arrumar esse comportamento sugiro essa alteração abaixo.

func (p *ProductDb) Save(product application.ProductInterface) (application.ProductInterface, error) {
	var rows int
	p.db.QueryRow(`select count(*) from products where id=?`, product.GetID()).Scan(&rows)
	if rows == 0 {
		_, err := p.create(product)
		if err != nil {
			return nil, err
		}
	} else {
		_, err := p.update(product)
		if err != nil {
			return nil, err
		}
	}
	return product, nil
}

Obrigado e até mais.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions