# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# This file is the source Rails uses to define your schema when running `bin/rails
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
# be faster and is potentially less error prone than running all of your
# migrations from scratch. Old migrations may fail to apply correctly if those
# migrations use external dependencies or application code.
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2025_01_24_052426) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "pgcrypto"
  enable_extension "plpgsql"
  enable_extension "unaccent"

  create_table "active_storage_attachments", force: :cascade do |t|
    t.string "name", null: false
    t.string "record_type", null: false
    t.bigint "record_id", null: false
    t.bigint "blob_id", null: false
    t.datetime "created_at", null: false
    t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id"
    t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
  end

  create_table "active_storage_blobs", force: :cascade do |t|
    t.string "key", null: false
    t.string "filename", null: false
    t.string "content_type"
    t.text "metadata"
    t.string "service_name", null: false
    t.bigint "byte_size", null: false
    t.string "checksum", null: false
    t.datetime "created_at", null: false
    t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
  end

  create_table "active_storage_variant_records", force: :cascade do |t|
    t.bigint "blob_id", null: false
    t.string "variation_digest", null: false
    t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true
  end

  create_table "appointments", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
    t.integer "user_id"
    t.integer "trainer_id"
    t.integer "scheduler_id"
    t.string "status"
    t.string "place"
    t.datetime "date"
    t.integer "duration", default: 30
    t.text "comments"
    t.index ["scheduler_id"], name: "index_appointments_on_scheduler_id"
    t.index ["trainer_id"], name: "index_appointments_on_trainer_id"
    t.index ["user_id"], name: "index_appointments_on_user_id"
  end

  create_table "cards", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
    t.integer "user_id"
    t.string "token_id", default: "", null: false
    t.string "last", default: "", null: false
    t.string "customer_id", default: "", null: false
    t.boolean "predetermined", default: false, null: false
    t.index ["user_id"], name: "index_cards_on_user_id"
  end

  create_table "ckeditor_assets", id: :serial, force: :cascade do |t|
    t.string "data_file_name", null: false
    t.string "data_content_type"
    t.integer "data_file_size"
    t.string "type", limit: 30
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["type"], name: "index_ckeditor_assets_on_type"
  end

  create_table "countries", force: :cascade do |t|
    t.string "continent", default: "", null: false
    t.string "sub_continent", default: "", comment: "Countries on two continents or in America (South|North)"
    t.string "name", default: "", null: false
    t.boolean "active", default: true, null: false
    t.string "code", limit: 10, default: "", null: false
    t.string "alpha_2", limit: 2, default: "", null: false
    t.string "alpha_3", limit: 3, default: "", null: false
    t.index ["alpha_2"], name: "index_countries_on_alpha_2", unique: true
    t.index ["alpha_3"], name: "index_countries_on_alpha_3", unique: true
  end

  create_table "cycle_steroids", force: :cascade do |t|
    t.bigint "steroid_id", null: false
    t.bigint "cycle_id", null: false
    t.integer "number", default: 0
    t.integer "quantity"
    t.string "unit", default: ""
    t.integer "intake"
    t.string "time_unit", default: "hr"
    t.string "notes", default: ""
    t.index ["cycle_id"], name: "index_cycle_steroids_on_cycle_id"
    t.index ["steroid_id"], name: "index_cycle_steroids_on_steroid_id"
  end

  create_table "cycles", force: :cascade do |t|
    t.bigint "user_id"
    t.string "name", default: ""
    t.integer "number", default: 0
    t.boolean "template", default: false
    t.text "instructions"
    t.integer "duration", default: 4
    t.date "init"
    t.index ["user_id"], name: "index_cycles_on_user_id"
  end

  create_table "devise_api_tokens", force: :cascade do |t|
    t.string "resource_owner_type", null: false
    t.bigint "resource_owner_id", null: false
    t.string "access_token", null: false
    t.string "refresh_token"
    t.integer "expires_in", null: false
    t.datetime "revoked_at"
    t.string "previous_refresh_token"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.index ["access_token"], name: "index_devise_api_tokens_on_access_token"
    t.index ["previous_refresh_token"], name: "index_devise_api_tokens_on_previous_refresh_token"
    t.index ["refresh_token"], name: "index_devise_api_tokens_on_refresh_token"
    t.index ["resource_owner_type", "resource_owner_id"], name: "index_devise_api_tokens_on_resource_owner"
  end

  create_table "faqs", id: :serial, force: :cascade do |t|
    t.string "question", default: "", null: false
    t.string "category", default: "", null: false
    t.integer "number", default: 0, null: false
    t.text "answer"
    t.string "section", default: "visitor"
  end

  create_table "meal_portions", id: :serial, force: :cascade do |t|
    t.integer "meal_id"
    t.integer "portion_id"
    t.string "quantity", default: "1", null: false
    t.integer "number", default: 0
    t.index ["meal_id"], name: "index_meal_portions_on_meal_id"
    t.index ["portion_id", "meal_id"], name: "index_meal_portions_on_portion_id_and_meal_id", unique: true
    t.index ["portion_id"], name: "index_meal_portions_on_portion_id"
  end

  create_table "meals", id: :serial, force: :cascade do |t|
    t.text "body"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.uuid "plan_id"
    t.integer "number", default: 0
    t.string "title", default: ""
    t.index ["plan_id"], name: "index_meals_on_plan_id"
  end

  create_table "medical_histories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
    t.integer "user_id"
    t.boolean "diseases", default: false
    t.boolean "injuries", default: false
    t.integer "stress", default: 0
    t.boolean "regimen", default: false
    t.integer "fruits", default: 0
    t.integer "soda", default: 0
    t.boolean "alcohol", default: false
    t.text "dislikes"
    t.text "likes"
    t.text "habitual_feed"
    t.boolean "steroids", default: false
    t.boolean "exercise", default: false
    t.string "training_age", default: ""
    t.integer "training_days", default: 0
    t.integer "novelty_program", default: 3
    t.integer "physical_stress", default: 0
    t.integer "recover", default: 4
    t.integer "force", default: 0
    t.boolean "external_recover", default: false
    t.integer "sleep_hours", default: 1
    t.text "supplementation"
    t.integer "available_days", default: 0
    t.text "medicines"
    t.integer "training_place", default: 1
    t.text "injuries_detail"
    t.text "stress_detail"
    t.text "alcohol_detail"
    t.string "gym", default: ""
    t.string "gym_name", default: ""
    t.string "occupation", default: ""
    t.string "civil_state", default: ""
    t.string "speciality", default: ""
    t.boolean "lives_alone", default: false
    t.string "company_at_home", default: ""
    t.boolean "childrens", default: false
    t.string "childrens_ages", default: ""
    t.string "food_rhythm", default: "normal", comment: "Posibles valores: {despacio, normal, rápido}"
    t.boolean "food_boredom", default: false
    t.string "food_where_when", default: ""
    t.string "supermarket", default: ""
    t.string "meals_out", default: ""
    t.boolean "take_supplements", default: true
    t.boolean "phone_sleep", default: false
    t.boolean "phone_wakeup", default: false
    t.integer "self_criticism"
    t.integer "stress_management"
    t.text "objective"
    t.text "goal_barriers"
    t.string "hobbie", default: ""
    t.integer "training_time", default: 0
    t.text "notes", default: ""
    t.index ["user_id"], name: "index_medical_histories_on_user_id"
  end

  create_table "messages", id: :serial, force: :cascade do |t|
    t.integer "user_id"
    t.text "message"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.bigint "emisor_id"
    t.string "status", default: "new"
    t.index ["emisor_id"], name: "index_messages_on_emisor_id"
    t.index ["user_id"], name: "index_messages_on_user_id"
  end

  create_table "photos", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
    t.string "safe_url", default: ""
    t.string "front", default: ""
    t.string "side", default: ""
    t.string "back", default: ""
    t.bigint "user_id", null: false
    t.date "date"
    t.float "weight"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.boolean "reprocess", default: false
    t.index ["user_id"], name: "index_photos_on_user_id"
  end

  create_table "plans", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
    t.integer "trainer_id"
    t.integer "user_id"
    t.integer "programa_id", default: 0
    t.string "kg", default: "0"
    t.string "tmb", default: "0"
    t.string "corporal_fat", default: "0"
    t.string "macros_protein", default: "0"
    t.string "macros_carbs", default: "0"
    t.string "macros_fats", default: "0"
    t.string "back", default: ""
    t.string "side", default: ""
    t.string "front", default: ""
    t.string "adjust", default: ""
    t.string "trace_comments", default: ""
    t.text "meals_record"
    t.text "cardio"
    t.text "supplements"
    t.date "init"
    t.date "finish"
    t.text "sessions_notes"
    t.text "comments"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "inbody", default: ""
    t.float "vme", default: 0.0
    t.boolean "rer", default: true
    t.text "trainer_observations"
    t.text "cardio_record"
    t.string "msg_1", default: ""
    t.string "msg_2", default: ""
    t.string "msg_3", default: ""
    t.float "arm_left"
    t.float "arm_right"
    t.float "chest"
    t.float "waist"
    t.float "thight_left"
    t.float "thight_right"
    t.float "gluteus"
    t.float "calf_left"
    t.float "calf_right"
    t.float "plicometria"
    t.float "mlag"
    t.string "groups", default: ""
    t.string "objective", default: ""
    t.float "bci"
    t.float "bcd"
    t.integer "rer_level", default: 0
    t.integer "factor_activity", default: 2
    t.integer "steps", default: 0
    t.integer "cardio_time", default: 30
    t.integer "cardio_sessions", default: 5
    t.integer "cardio_schedule", default: 3
    t.string "current_diet", default: "clone"
    t.string "current_routine", default: "clone"
    t.integer "progress", default: 0
    t.string "title", default: ""
    t.text "medicine"
    t.boolean "ped", default: false
    t.index ["trainer_id"], name: "index_plans_on_trainer_id"
    t.index ["user_id"], name: "index_plans_on_user_id"
  end

  create_table "portions", id: :serial, force: :cascade do |t|
    t.string "name", default: "", null: false
    t.string "clean_name", default: ""
    t.string "category", default: ""
    t.string "unit", default: ""
    t.string "quantity", default: "0"
    t.string "cals", default: "0"
    t.string "fiber", default: "0"
    t.string "carbs", default: "0"
    t.string "proteins", default: "0"
    t.string "fats", default: "0"
    t.string "trans", default: "0"
    t.string "sodium", default: "0"
    t.string "saturated", default: "0"
    t.boolean "active", default: false
  end

  create_table "posts", id: :serial, force: :cascade do |t|
    t.string "title", default: ""
    t.string "slug", default: ""
    t.string "img_slug", default: ""
    t.string "cover", default: ""
    t.string "category", default: ""
    t.text "description"
    t.text "body"
    t.integer "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["user_id"], name: "index_posts_on_user_id"
  end

  create_table "products", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
    t.string "title", default: ""
    t.string "category", default: ""
    t.string "photo", default: ""
    t.string "quantity", default: ""
    t.float "cost"
    t.float "discount"
    t.text "description"
    t.uuid "supplier_id"
    t.string "sku", default: ""
    t.string "flavour", default: ""
    t.string "brand", default: ""
    t.string "family", default: ""
    t.boolean "active", default: true
    t.index ["supplier_id"], name: "index_products_on_supplier_id"
  end

  create_table "programs", id: :serial, force: :cascade do |t|
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.uuid "plan_id"
    t.string "title", default: "", null: false
    t.integer "number", default: 1, null: false
    t.string "tipo", default: "", null: false
    t.index ["plan_id"], name: "index_programs_on_plan_id"
  end

  create_table "promos", force: :cascade do |t|
    t.string "title", default: "", null: false
    t.string "img", default: "", null: false
    t.date "init"
    t.date "finish"
    t.text "content"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.string "link", default: ""
    t.string "key_url", default: ""
    t.boolean "active", default: true
  end

  create_table "purchased_items", force: :cascade do |t|
    t.uuid "product_id", null: false
    t.uuid "ticket_id", null: false
    t.integer "quantity", default: 1
    t.float "discount", default: 0.0
    t.index ["product_id"], name: "index_purchased_items_on_product_id"
    t.index ["ticket_id"], name: "index_purchased_items_on_ticket_id"
  end

  create_table "routine_workouts", id: :serial, force: :cascade do |t|
    t.integer "number", default: 0
    t.string "group_by_series", default: ""
    t.integer "routine_id"
    t.integer "workout_id"
    t.integer "series", default: 3
    t.string "repetitions", default: "10"
    t.text "notes", default: ""
    t.text "history"
    t.text "charge"
    t.string "highlight", default: ""
    t.index ["routine_id", "workout_id"], name: "index_routine_workouts_on_routine_id_and_workout_id"
    t.index ["routine_id"], name: "index_routine_workouts_on_routine_id"
    t.index ["workout_id"], name: "index_routine_workouts_on_workout_id"
  end

  create_table "routines", id: :serial, force: :cascade do |t|
    t.string "title"
    t.text "instructions"
    t.text "description"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "safe_url", default: "", null: false
    t.text "history"
    t.string "days", default: ""
    t.uuid "plan_id"
    t.integer "number", default: 0
    t.index ["plan_id"], name: "index_routines_on_plan_id"
  end

  create_table "speeches", force: :cascade do |t|
    t.string "key_url", default: ""
    t.string "title", default: ""
    t.string "section", default: ""
    t.text "speech"
    t.string "img"
  end

  create_table "steroids", force: :cascade do |t|
    t.string "name", default: ""
    t.string "presentation", default: ""
    t.string "link", default: ""
    t.string "administration"
    t.text "secondary_effects"
    t.text "recommendations"
  end

  create_table "stores", id: :serial, force: :cascade do |t|
    t.string "name", default: "", null: false
    t.string "link", default: "", null: false
    t.string "tel", default: "", null: false
    t.string "street", default: "", null: false
    t.string "number", default: "", null: false
    t.string "city", default: "", null: false
    t.string "district", default: "", null: false
    t.integer "cp"
    t.text "schedule"
  end

  create_table "subscriptions", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
    t.uuid "product_id"
    t.integer "user_id"
    t.integer "checker_id"
    t.uuid "card_id"
    t.string "payment_method", default: ""
    t.string "external_id", default: ""
    t.string "voucher", default: ""
    t.string "status", default: "pending", null: false
    t.date "since"
    t.date "expires_at"
    t.integer "months"
    t.integer "cost"
    t.boolean "recurrent", default: true
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "reference", default: ""
    t.string "order_id", default: ""
    t.string "charge_id", default: ""
    t.text "comments"
    t.index ["card_id"], name: "index_subscriptions_on_card_id"
    t.index ["checker_id"], name: "index_subscriptions_on_checker_id"
    t.index ["product_id"], name: "index_subscriptions_on_product_id"
    t.index ["user_id"], name: "index_subscriptions_on_user_id"
  end

  create_table "substitutes", id: :serial, force: :cascade do |t|
    t.string "quantity", default: ""
    t.string "equalable_type"
    t.integer "equalable_id"
    t.integer "portion_id"
    t.index ["equalable_type", "equalable_id"], name: "index_substitutes_on_equalable"
    t.index ["portion_id"], name: "index_substitutes_on_portion_id"
  end

  create_table "suppliers", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
    t.string "name", default: "", null: false
    t.text "address", default: ""
    t.string "tel", default: ""
    t.string "mail", default: ""
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

  create_table "tickets", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t|
    t.bigint "user_id"
    t.date "date"
    t.float "total", default: 0.0
    t.text "comments"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.integer "payment_type", default: 0, comment: "0 Efectivo | 1 Tarjeta | 2 Transferencia"
    t.string "witness", default: ""
    t.float "cash", default: 0.0
    t.float "card", default: 0.0
    t.float "transfer", default: 0.0
    t.float "conekta", default: 0.0
    t.index ["user_id"], name: "index_tickets_on_user_id"
  end

  create_table "users", id: :serial, force: :cascade do |t|
    t.string "email", default: "", null: false
    t.string "encrypted_password", default: "", null: false
    t.string "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer "sign_in_count", default: 0, null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string "current_sign_in_ip"
    t.string "last_sign_in_ip"
    t.boolean "trainer", default: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "provider"
    t.string "uid"
    t.string "full_name", default: "", null: false
    t.date "dob"
    t.text "bio"
    t.string "avatar", default: ""
    t.string "safe_url", default: ""
    t.string "objective", default: ""
    t.string "tel", default: ""
    t.string "height", default: ""
    t.string "sex", default: ""
    t.boolean "presencial", default: true, null: false
    t.string "role", default: "patient", null: false
    t.string "auth_token", default: ""
    t.string "confirmation_token"
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
    t.string "unconfirmed_email"
    t.string "back", default: ""
    t.string "side", default: ""
    t.string "front", default: ""
    t.decimal "corporal_fat"
    t.float "kg", default: 0.0
    t.integer "tmb"
    t.string "customer_id"
    t.date "last_plan"
    t.string "status", default: "inactive"
    t.integer "coach_id"
    t.string "country", default: "México"
    t.string "federal_entity"
    t.string "delegation"
    t.integer "metric_system", default: 0
    t.integer "reference_id"
    t.string "municipality", default: ""
    t.string "address", default: ""
    t.float "mlag"
    t.string "cp", default: ""
    t.string "inbody_id", default: ""
    t.index ["coach_id"], name: "index_users_on_coach_id"
    t.index ["email"], name: "index_users_on_email", unique: true
    t.index ["reference_id"], name: "index_users_on_reference_id"
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
  end

  create_table "workouts", id: :serial, force: :cascade do |t|
    t.string "name", default: "", null: false
    t.string "friendly_url", default: "", null: false
    t.string "image", default: ""
    t.string "group", default: ""
    t.string "sub_group", default: ""
    t.string "category", default: ""
    t.string "video_man", default: ""
    t.string "video_woman", default: ""
    t.text "description"
  end

  add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
  add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
  add_foreign_key "appointments", "users"
  add_foreign_key "cards", "users"
  add_foreign_key "cycle_steroids", "cycles"
  add_foreign_key "cycle_steroids", "steroids"
  add_foreign_key "cycles", "users"
  add_foreign_key "meal_portions", "meals"
  add_foreign_key "meal_portions", "portions"
  add_foreign_key "meals", "plans"
  add_foreign_key "medical_histories", "users"
  add_foreign_key "messages", "users"
  add_foreign_key "photos", "users"
  add_foreign_key "plans", "users"
  add_foreign_key "posts", "users"
  add_foreign_key "programs", "plans"
  add_foreign_key "purchased_items", "products"
  add_foreign_key "purchased_items", "tickets"
  add_foreign_key "routine_workouts", "routines"
  add_foreign_key "routine_workouts", "workouts"
  add_foreign_key "routines", "plans"
  add_foreign_key "subscriptions", "cards"
  add_foreign_key "subscriptions", "products"
  add_foreign_key "subscriptions", "users"
  add_foreign_key "tickets", "users"
end
