from apollo_utils.service.schemas.base import RequestSchema from apollo_utils.service.schemas.fields.enum import EnumField, EnumListField from apollo_utils.service.schemas.fields.list import SplitUniqueListField from marshmallow import Schema, fields from server.constants.core import ApolloEntityType, EntityType from server.constants.favorites import FavoritesModifyInclude class AccountIdRequiredMixin: account_id = fields.Int(required=True) class FavoriteEntityTypeRequiredMixin: entity_type = EnumField(EntityType, load_as="value", required=True) class FavoriteEntityRequiredMixin(FavoriteEntityTypeRequiredMixin): entity_id = fields.Str(required=True) class FavoriteEntityTypeListNoneMixin: entity_type_list = EnumListField(ApolloEntityType, missing=None, data_key="entity_type") class FavoriteEntityTypeListRequiredMixin: entity_type_list = EnumField(ApolloEntityType, load_as="value", data_key="entity_type", required=True) class FavoriteEntityIdListNoneMixin: entity_id = SplitUniqueListField(fields.Str(required=True), required=False, missing=None) class FavoritesModifyMixin(FavoriteEntityTypeListNoneMixin): include = EnumListField(FavoritesModifyInclude, missing=[]) class FavoriteEntityDataNoneMixin: data = fields.Dict(missing=None, default=None) class AccountFavorites: class Create: class Request(AccountIdRequiredMixin, FavoriteEntityRequiredMixin, FavoriteEntityDataNoneMixin, RequestSchema): pass class Response(AccountIdRequiredMixin, FavoriteEntityRequiredMixin, FavoriteEntityDataNoneMixin, Schema): id = fields.Int() class Delete: class Request(AccountIdRequiredMixin, FavoriteEntityRequiredMixin, RequestSchema): pass