refactor(core, business): unify pagination and promo serializers with enhanced validation#58
Merged
RandomProgramm3r merged 3 commits intomainfrom Jul 15, 2025
Merged
refactor(core, business): unify pagination and promo serializers with enhanced validation#58RandomProgramm3r merged 3 commits intomainfrom
RandomProgramm3r merged 3 commits intomainfrom
Conversation
Introduced `BaseLimitOffsetPaginationSerializer` to handle the validation of `limit` and `offset` query parameters.
This commit refactors the promotion-related serializers to improve structure, validation, and maintainability, following DRF best practices. Key changes: - Removed the separate `PromoValidator` class and integrated its validation logic directly into the serializers. This co-locates validation with the data representation, making the code easier to follow. - Introduced `BasePromoSerializer` to consolidate common fields and methods, reducing code duplication across create, detail, and read-only serializers. - Implemented custom `CountryField` and `MultiCountryField` to provide robust, reusable validation for ISO 3166-1 alpha-2 country codes. - Simplified `PromoListQuerySerializer` by leveraging the new `MultiCountryField` and inheriting from the base pagination serializer, removing manual parameter validation.
This commit improves the validation logic within the promo serializers and refines how promotion data is handled and displayed. Key changes: - **Improved Validation:** The validation logic now correctly handles partial updates (`PATCH`) by checking the `mode` from the instance if it's not provided in the request data. It also prevents `max_count` from being set lower than the current `used_count` for a promo. - **Accurate Used Count:** The `get_used_codes_count` method on the `Promo` model now correctly returns the `used_count` for promotions in `COMMON` mode.
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.
Introduces a shared pagination serializer and consolidates promo-related serializers,
validation logic, and country-code handling to improve structure, DRY-ness, and maintainability.
Key changes:
Core pagination
BaseLimitOffsetPaginationSerializerto centralizelimit/offsetvalidation for all endpoints.Promo serializers overhaul
PromoValidatorinto serializers to co‑locate validation and data representation.BasePromoSerializerto extract common fields and methods, reducing duplication across create, detail, and read-only serializers.CountryFieldandMultiCountryFieldfor reusable ISO 3166‑1 α‑2 code validation.PromoListQuerySerializerby inheriting from the base pagination serializer and usingMultiCountryField.Enhanced promo validation
PATCH), inferringmodefrom instance when absent in request data.max_countbelow the currentused_count.get_used_codes_countreturns accurate counts forCOMMON‑mode promotions.