Quinta do Cota — Diagrama ER Completo da Base de Dados USERS CustomUser id (PK): AutoField email: EmailField(unique) username: CharField(150, unique) first_name, last_name: CharField(30) address, address_2: CharField(255) city: CharField(255) postal_code: CharField(20) house_number: CharField(20) country_code, region_code: CharField(10) country_name, region_name: CharField(100) phone: CharField(20) lang: CharField(5, choices) is_active, is_staff: BooleanField date_joined: DateTimeField(auto_now_add) SHOP Wine id (PK): AutoField product_title(_en): CharField(200) year: PositiveIntegerField grapes: CharField(250) wine_doc(_en): CharField(250) image_url: ImageField product_pdf: FileField product_url: SlugField(unique) main_desc(_en): TextField wine_type(_en): CharField(20, choices) soils_type(_en): CharField(250) alcohol: CharField(4, choices) capacity: CharField(4, choices) show_catalog, show_shop: BooleanField price, new_price: DecimalField(8,2) bottles_quantity: PositiveIntegerField sku: CharField(50, unique) ShopSettings id (PK): AutoField shop_enabled: BooleanField SHIPPING ShippingCountry id (PK): AutoField name: CharField(100) code: CharField(10, unique) ShippingRegion id (PK): AutoField country_id (FK→ShippingCountry) name, code: CharField(100/10) ShippingOption id (PK): AutoField name: CharField(100) allow_shipping, allow_free_shipping: BooleanField free_shipping_from: DecimalField(8,2) countries: ManyToMany(ShippingCountry) regions: ManyToMany(ShippingRegion) ShippingBottleRange id (PK): AutoField shipping_option_id (FK→ShippingOption) min_bottles, max_bottles: PositiveIntegerField price_per_bottle: DecimalField(6,2) ShippingDetail id (PK): AutoField title_pt/en: CharField(200) description_pt/en: TextField CHECKOUT Order id (PK): AutoField user_id (FK→CustomUser) order_code: UUIDField(unique) order_number: CharField(20, unique) code: CharField(8), code_expires_at: DateTimeField billing & shipping address fields total_amount: DecimalField(10,2) total_without_discount: DecimalField(10,2) payment_status: CharField(20, choices) deliver_status: CharField(20, choices) stripe_payment_intent_id: CharField(255) shipping_cost: DecimalField(10,2) shipping_option_name: CharField(255) created_at: DateTimeField(auto_now_add) OrderItem id (PK): AutoField order_id (FK→Order) wine_id (FK→Wine) product_name: CharField(255) quantity: PositiveIntegerField price, new_price: DecimalField(10,2) deliver_status: CharField(20) NEWSLETTER Subscriber id (PK): AutoField email: EmailField(unique) language: CharField(2, choices) is_active: BooleanField, subscribed_at: DateTimeField Newsletter id (PK): AutoField title, subject: CharField(255) body_html: TextField language: CharField(2) created_at, updated_at: DateTimeField CONTACT ContactFormMessage id (PK): AutoField first_name, last_name: CharField(100) email: EmailField, phone: CharField(50) subject: CharField(150) message: TextField recaptcha_lang: CharField(5), created_at: DateTimeField FK → Subscriber 1 → N M2M 1 → N info