refactor: segurança, tipagem e estrutura em cart.py e models.py - #19
Open
mateus-bernart wants to merge 8 commits into
Open
refactor: segurança, tipagem e estrutura em cart.py e models.py#19mateus-bernart wants to merge 8 commits into
mateus-bernart wants to merge 8 commits into
Conversation
… e models.py - Substitui float por Decimal em Product.price para precisão financeira - Adiciona field_validator em price e quantity para rejeitar valores inválidos na borda - Extrai DiscountCalculator (SRP): regras de desconto isoladas e injetáveis - Substitui magic numbers por constantes nomeadas e auditáveis - Corrige tipagem: List[T] → list[T] nativo (Python 3.12), retornos -> None explícitos - Guarda de quantity <= 0 em add_item antes de acessar a lista - Documenta 3 melhorias Shift Left no PRD (SL-001, SL-002, SL-003) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… e models.py - Substitui float por Decimal em Product.price para precisão financeira - Adiciona field_validator em price e quantity para rejeitar valores inválidos na borda - Extrai DiscountCalculator (SRP): regras de desconto isoladas e injetáveis - Substitui magic numbers por constantes nomeadas e auditáveis - Corrige tipagem: List[T] → list[T] nativo (Python 3.12), retornos -> None explícitos - Guarda de quantity <= 0 em add_item antes de acessar a lista - Documenta 3 melhorias Shift Left no PRD (SL-001, SL-002, SL-003) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Testes unitários: Product, CartItem, ShoppingCart, DiscountCalculator (padrão AAA) - Testes de integração: fluxos completos de carrinho com desconto - CI: lint (ruff), type check (mypy --strict) e pytest com cobertura mínima de 80% Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… no mypy Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumo
priceequantityrejeitam valores<= 0viafield_validatordo Pydanticfloat→Decimal;list[T]nativo (Python 3.12);-> Noneexplícito nos métodos; anotações emmain.pyDiscountCalculatorextraído deShoppingCart— injetável e testável isoladamenteChecklist
add_itemcomquantity <= 0→ValueErrorProductcomprice <= 0→ValidationErrorcalculate_total_with_discountnos três patamares (< 500, 500–1000, > 1000)mypy --strict src/sem errosruff check src/sem erros🤖 Generated with Claude Code