@startuml
skinparam linetype ortho
'============================================================================================
'===========================================Микросервисы=====================================
'============================================================================================
package Microservices <<cloud>> {
    abstract "Shcat" as shcat {
     +request: POST
     +endpoint: http://shcat.vseinstrumenti.ru/rpc
     --
     *Method: rests.get
     *nomenclature - guid товара
     *source - guid магазина
     --
     +response
     --
     *nomenclature - guid товара
     *source - guid офиса
     *quntity - количество остатков
     *quality - качество, по умолчанию 1
    }

    abstract "HamletX10" as hamlet {
     +request: POST
     +enpoint: http://hamlet-v2.vseinstrumenti.ru/rpc
     --
     *Method: availability.chain
     *store - guid офиса
     *nomenclature - guid товара
     *filter_zero_chain - скрывать или нет ЛЦ по которым нет наличия
     --
     +response
     --
     *available - Признак наличия
     *store - guid офиса
     *free - количество остатков
    }

    abstract "Officer" as officer {
     +request: POST
     +endpoint: https://officer2go.vseinstrumenti.ru/query
     --
     *Method: availability.get_offices
     *locality_areg_id - areg_id города
     --
     +response
     --
     *id - guid офиса
     *created_at - Дата создания
    }

    abstract "Scrooge_sync" as scrooge {
     +request: GET
     +endpoint: http://exporter.scrooge-v2.vseinstrumenti.ru/file/price?after-id=
     --
     +response
     --
    *price
    *price_type
    }

    abstract "Scrooge_graphQL" as Scrooge_graphQL {
    +request: POST
    +endpoint: http://exporter.scrooge-v2.vseinstrumenti.ru/query
    --
    *method: priceTypeBinding
    --
    +response
    --
    *priceTypeId
    *priceCategory
    *localityID
    }
}


package MySql <<database>> {
    entity "search_availability_flag_{guid_office}" as availability {
      * id : int auto_increment "PK"
      --
      *product : char(36)
      *is_availability : tinyint(1)
      *create_at : timestamp
      *update_at : timestamp
      --
      unique (product)
    }


    entity "search_remaining_{guid_office}" as remaining {
      * id: int auto_increment "PK"
      --
      *product: char(36)
      *remaining: int
      *create_at: timestamp
      *update_at: timestamp
      --
      unique (product)
    }

    entity "search_localities_offices" as localities_offices {
        *id: int auto_increment "PK"
        --
        *locality_guid: char(36)
        *office_guid: char(36)
        *is_active: tinyint(1)
        --
        unique (office_guid)
    }

    entity "search_prices_types_localities_2" as prices_types_localities {
        *id: int auto_increment "PK"
        --
        *hash: char(40)
        *locality_guid: char(36)
        *price_type_guid: char(36)
        *type: varchar(128)
        --
        unique (hash)
    }


    entity "search_prices_types_products_2" as prices_types_products {
            *id: int auto_increment "PK"
            --
            *hash: char(40)
            *product_guid: char(36)
            *price_type_guid: char(36)
            *price: decimal(10, 2)
            *updated_at: timestamp
            --
            unique (hash)
        }
}

    shcat -d-----> remaining
    hamlet -d-----> availability
    officer -d-----> localities_offices
    scrooge -d-----> prices_types_products
    Scrooge_graphQL -d--> prices_types_localities

@enduml