huesos/README.md

6.1 KiB
Executable File

huesos

Basis for developing chat-robots with "Web App" technology for Telegram

Installation

AnangoDB

  1. Configure unix-socket

    Edit the file /etc/arangodb3/arangod.conf
    endpoint = tcp://127.0.0.1:8529 -> endpoint = unix:///var/run/arangodb3/arango.sock (this will disable the web panel)

    To make the web panel work, you can add this to the NGINX server settings:
server {
    ...

    server_name arangodb.domain.zone;

    ...

    allow YOUR_IP_ADDRESS;
    allow 192.168.1.1/24;
    allow 127.0.0.1;
    deny all;

    # ArangoDB
    location / {
        proxy_pass http://arangodb;
    }
}

upstream arangodb {
    server unix:/var/run/arangodb3/arango.sock;
}

here is my solution for "permission denied" problem on Ubuntu (accepted by ArangoDB maintainer)

  1. Configure TCP (instead of unix-socket)

    Edit the file /etc/arangodb3/arangod.conf
    endpoint = tcp://127.0.0.1:8529 -> endpoint = tcp://0.0.0.0:8529

    Edit the file mirzaev/huesos/system/settings/arangodb.php
    unix:///var/run/arangodb3/arango.sock -> tcp://YOUR_IP_ADDRESS:8529 (it is slow and not secure)

  1. Create a Graph with the specified values

    Name: catalog
  • Relation 1
    edgeDefinition: entry
    fromCollections: category, product
    toCollections: category

  • Relation 2
    edgeDefinition: reservation
    fromCollections: product
    toCollections: cart


  1. Create a Graph with the specified values

    Name: users
  • Relation 1
    edgeDefinition: connect
    fromCollections: cart, session
    toCollections: account, session

    Orphan Collections: product

  1. Create indexes for the "product" collection

    Type: "Inverted Index"
    Fields: name.ru
    Analyzer: "text_ru"
    Search field: true
    Name: name_ru

    Add indexes for all search parameters and for all languages (search language is selected based on the user's language,
    otherwise from the default language specified in the active settings from settings collection document)


    See fields in the mirzaev/arming_bot/models/product
    name.ru, description.ru and compatibility.ru


  1. Create a View with the specified values type: search-alias (you can also use "arangosearch")
    name: products_search
    indexes:

    You can copy an example of view file from here: /examples/arangodb/views/products_search.json
"indexes": [
    {
      "collection": "product",
      "index": "title_ru" # THIS IS AN EXAMPLE
    }
  ]

NGINX

  1. Create a NGINX server
    You can copy an example of server file from here: /examples/nginx/server.conf

  2. Add support for javascript modules
    Edit the file /etc/nginx/mime.types
    application/javascript js; -> application/javascript js mjs;

SystemD (or any alternative you like)

You can copy an example of systemd file from here: /examples/systemd/huesos.service

Execute: sudo cp huesos.service /etc/systemd/system/huesos.service && sudo chmod +x /etc/systemd/system/huesos.service

before you execute the command think about what it does and whether the paths are specified correctly
the configuration file is very simple and you can remake it for any alternative to SystemD that you like

Menu

Menu inside the Web App

Make sure you have a menu collection (can be created automatically)
You can copy a clean menu documents without comments from here: /examples/arangodb/collections/menu

{
  "urn": "/", // Link
  "name": {
    "en": "Main page",
    "ru": "Главная страница"
  },
  "style": { // The `style` attribute
    "order": 0
  },
  "class": {},
  "icon": { // Icon from `/themes/default/css/icons`
    "style": { // The `style` attribute
      "rotate": "-135deg"
    },
    "class": "arrow circle" // Classes of the icon
  },
  "image": { // Image at the background @deprecated?
    "storage": null
  }
}

Settings

Settings of chat-robot and Web App

Make sure you have a settings collection (can be created automatically) and at least one document with the "status" parameter set to "active"
You can copy a clean settings document without comments from here: /examples/arangodb/collections/settings.json

{
    "status": "active",
    "project": {
        "name": "PROJECT"
    },
    "language": "en", // Will be converted to an instance of enumeration `mirzaev\arming_bot\models\enumerations\language`
    "currency": "usd", // Will be converted to an instance of enumeration `mirzaev\arming_bot\models\enumerations\currency`
    "company": {
        "identifier": null, // Example: "000000000000000" (string|null) (if `null` it will not be displayed)
        "tax": null, // Example: "000000000000" (string|null) (if `null` it will not be displayed)
        "name": null, // Example: "COMPANY" (string|null) (if `null` it will not be displayed)
        "offer": false, // Display the data of a public offer in the footer? (bool) (does not affect the `/offer` page generation)
        "sim": null, // Examples: "+7 000 000-00-00", "70000000000" (string|null) (if `null` it will not be displayed)
        "mail": null // Example: "name@domain.zone" (string|null) (if `null` it will not be displayed)
    }
}

Suspensions

System of suspensions of chat-robot and Web App

Make sure you have a suspension collection (can be created automatically)
You can copy a clean suspension document without comments from here: /examples/arangodb/collections/suspension.json

{
    "end": 1726068961, // Unixtime
    "targets": {
        "chat-robot": true, // Block chat-robot
        "web app": true // Block "Web App"
    },
    "access": {
        "tester": true, // Account with `"tester": true`
        "developer": true // Account with `"developer": true`
    },
    "description": {
        "ru": "Разрабатываю каталог, поиск и корзину",
        "en": "I am developing a catalog, search and cart"
    }
}