"""Establishment app documents.""" from django.conf import settings from django_elasticsearch_dsl import Document, Index, fields from search_indexes.utils import OBJECT_FIELD_PROPERTIES from establishment import models EstablishmentIndex = Index(settings.ELASTICSEARCH_INDEX_NAMES.get(__name__, 'establishment')) EstablishmentIndex.settings(number_of_shards=1, number_of_replicas=1) @EstablishmentIndex.doc_type class EstablishmentDocument(Document): """Establishment document.""" preview_image = fields.KeywordField(attr='preview_image_url') description = fields.ObjectField(attr='description_indexing', properties=OBJECT_FIELD_PROPERTIES) establishment_type = fields.ObjectField( properties={ 'id': fields.IntegerField(), 'name': fields.ObjectField(attr='name_indexing', properties=OBJECT_FIELD_PROPERTIES), 'index_name': fields.KeywordField(attr='index_name'), }) establishment_subtypes = fields.ObjectField( properties={ 'id': fields.IntegerField(), 'name': fields.ObjectField(attr='name_indexing'), 'index_name': fields.KeywordField(attr='index_name'), }, multi=True) works_evening = fields.ListField(fields.IntegerField( attr='works_evening' )) works_noon = fields.ListField(fields.IntegerField( attr='works_noon' )) works_at_weekday = fields.ListField(fields.IntegerField( attr='works_at_weekday' )) works_now = fields.BooleanField(attr='works_now') tags = fields.ObjectField( properties={ 'id': fields.IntegerField(attr='id'), 'label': fields.ObjectField(attr='label_indexing', properties=OBJECT_FIELD_PROPERTIES), }, multi=True) visible_tags = fields.ObjectField( properties={ 'id': fields.IntegerField(attr='id'), 'label': fields.ObjectField(attr='label_indexing', properties=OBJECT_FIELD_PROPERTIES), }, multi=True) products = fields.ObjectField( properties={ 'wine_region': fields.ObjectField(properties={ 'id': fields.IntegerField(), 'name': fields.KeywordField(), 'country': fields.ObjectField(properties={ 'id': fields.IntegerField(), 'name': fields.ObjectField(attr='name_indexing', properties=OBJECT_FIELD_PROPERTIES), 'code': fields.KeywordField(), }), # 'coordinates': fields.GeoPointField(), 'description': fields.ObjectField(attr='description_indexing', properties=OBJECT_FIELD_PROPERTIES), }), 'wine_sub_region': fields.ObjectField(properties={ 'id': fields.IntegerField(), 'name': fields.KeywordField(), }), }, multi=True ) schedule = fields.ListField(fields.ObjectField( properties={ 'id': fields.IntegerField(attr='id'), 'weekday': fields.IntegerField(attr='weekday'), 'weekday_display': fields.KeywordField(attr='get_weekday_display'), 'closed_at': fields.KeywordField(attr='closed_at_str'), } )) address = fields.ObjectField( properties={ 'id': fields.IntegerField(), 'street_name_1': fields.TextField( fields={'raw': fields.KeywordField()} ), 'street_name_2': fields.TextField( fields={'raw': fields.KeywordField()} ), 'number': fields.IntegerField(), 'postal_code': fields.KeywordField(), 'coordinates': fields.GeoPointField(attr='location_field_indexing'), 'city': fields.ObjectField( properties={ 'id': fields.IntegerField(), 'name': fields.KeywordField(), 'is_island': fields.BooleanField(), 'country': fields.ObjectField( properties={ 'id': fields.IntegerField(), 'name': fields.ObjectField(attr='name_indexing', properties=OBJECT_FIELD_PROPERTIES), 'code': fields.KeywordField(), } ), } ), }, ) favorites_for_users = fields.ListField(field=fields.IntegerField()) class Django: model = models.Establishment fields = ( 'id', 'name', 'transliterated_name', 'index_name', 'is_publish', 'price_level', 'toque_number', 'public_mark', 'slug', ) def get_queryset(self): return super().get_queryset().with_es_related()