syntax = "proto3";

package core_system.product.v1;

import "messages/product_category/common.proto";


// Product 정보 메시지
message Product {
    optional string id = 1;
    optional string shop_id = 2;
    optional string product_no = 3;
    optional string product_code = 4;
    optional string product_name = 5;
    optional string price = 6;
    optional string retail_price = 7;
    optional string price_content = 8;
    optional string display = 9;
    optional string selling = 10;
    optional string cultural_tax_deduction = 11;
    optional string summary_description = 12;
    optional string buy_limit_by_product = 13;
    optional string repurchase_restriction = 14;
    optional string single_purchase_restriction = 15;
    optional string buy_unit_type = 16;
    optional string buy_unit = 17;
    optional string order_quantity_limit_type = 18;
    optional string minimum_quantity = 19;
    optional string maximum_quantity = 20;
    optional string adult_certification = 21;
    optional string detail_image = 22;
    optional string list_image = 23;
    optional string tiny_image = 24;
    optional string small_image = 25;
    optional string has_option = 26;
    optional string use_naverpay = 27;
    optional string naverpay_type = 28;
    optional string supplier_code = 29;
    optional string sold_out = 30;
    optional string pc_discount_price = 31;
    optional string mobile_discount_price = 32;
    optional string exposure_group_list = 33;
    optional string use_kakaopay = 34;
    optional string description = 35;
    optional string mobile_description = 36;
    optional string separated_mobile_description = 37;
    optional string simple_description = 38;
    optional string is_subscription_shipment = 39;
    optional string created_date = 40;
    optional string updated_date = 41;
    optional string updated_at = 42;
    optional string category_no = 43;
    optional string option_type = 44;
    optional string option_list_type = 45;
    optional string option_preset_code = 46;
    optional string select_one_by_option = 47;
    optional string option_preset_name = 48;
    optional string use_additional_option = 49;
    optional string use_attached_file_option = 50;
    optional string sale_upsell_30day = 51;
    optional string sale_upsell = 52;
    optional string sale_total_30day = 53;
    optional string sale_total = 54;
    optional string inquiry_count = 55;
    optional string recommend_group_count = 56;
    optional string recommend_common_exclusion = 57;
    optional string promotion_common_exclusion = 58;
    optional string max_discount = 59;
    optional string basic_discount = 60;
    optional string is_deleted = 61;
    repeated ProductOption options = 62;
    repeated ProductVariant variants = 63;
    repeated core_system.product_category.v1.ProductCategory product_categories = 64;
}

// ProductOption 정보 메시지
message ProductOption {
    optional string id = 1;
    optional string product_id = 2;
    optional string option_code = 3;
    optional string option_name = 4;
    optional string required_option = 5;
    optional string option_display_type = 6;
    optional string is_basic_option = 7;
    optional string is_additional_option = 8;
    optional string is_attached_file_option = 9;
    repeated ProductOptionValue values = 10;
    optional string platform_id = 11;
}

// ProductOptionValue 정보 메시지
message ProductOptionValue {
    optional string id = 1;
    optional string product_option_id = 2;
    optional string option_image_file = 3;
    optional string option_link_image = 4;
    optional string option_color = 5;
    optional string option_text = 6;
    optional string value_no = 7;
    optional string additional_amount = 8;
    optional string option_display_type = 9;
    optional string additional_option_text_length = 10;
    optional string size_limit = 11;
    optional string platform_id = 12;
}

// ProductVariant 정보 메시지
message ProductVariant {
    optional string id = 1;
    optional string product_id = 2;
    optional string variant_code = 3;
    optional string custom_variant_code = 4;
    optional string options = 5;
    optional string display = 6;
    optional string selling = 7;
    optional string additional_amount = 8;
    optional string use_inventory = 9;
    optional string important_inventory = 10;
    optional string inventory_control_type = 11;
    optional string display_soldout = 12;
    optional string quantity = 13;
    optional string safety_inventory = 14;
}
