diff --git a/DSL/Resql/training/GET/empty.sql b/DSL/Resql/training/GET/empty.sql deleted file mode 100644 index 531c7647c..000000000 --- a/DSL/Resql/training/GET/empty.sql +++ /dev/null @@ -1,2 +0,0 @@ --- This is a empty sql for Buerokratt DSL delivery method -SELECT current_date; diff --git a/DSL/Resql/training/POST/add-service-trigger.sql b/DSL/Resql/training/POST/add-service-trigger.sql deleted file mode 100644 index 174ab0533..000000000 --- a/DSL/Resql/training/POST/add-service-trigger.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO service_trigger (intent, service, status, author_role, service_name) -VALUES (:intent, :serviceId, :status::trigger_status, :authorRole::author_role, :serviceName) diff --git a/DSL/Resql/training/POST/delete-service-trigger.sql b/DSL/Resql/training/POST/delete-service-trigger.sql deleted file mode 100644 index 90e2aa9b1..000000000 --- a/DSL/Resql/training/POST/delete-service-trigger.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO service_trigger (intent, service, status, author_role, service_name) -VALUES (:intent, :serviceId, 'deleted'::trigger_status, :authorRole::author_role, :serviceName) diff --git a/DSL/Resql/training/POST/get-approved-tiggers.sql b/DSL/Resql/training/POST/get-approved-tiggers.sql deleted file mode 100644 index c9bca9adf..000000000 --- a/DSL/Resql/training/POST/get-approved-tiggers.sql +++ /dev/null @@ -1,18 +0,0 @@ - -SELECT intent, - service, - created -FROM service_trigger -WHERE (intent, - service, - service_name, - created) IN - (SELECT intent, - service, - service_name, - max(created) - FROM service_trigger - GROUP BY intent, - service, - service_name) - AND status = 'approved'; diff --git a/DSL/Resql/training/POST/get-available-intents.sql b/DSL/Resql/training/POST/get-available-intents.sql deleted file mode 100644 index c8ea18621..000000000 --- a/DSL/Resql/training/POST/get-available-intents.sql +++ /dev/null @@ -1,46 +0,0 @@ -WITH connected_intents AS ( - SELECT intent, - service, - service_name, - status, - created - FROM service_trigger - WHERE (intent, - service, - service_name, - created) IN ( - SELECT intent, - service, - service_name, - max(created) - FROM service_trigger - GROUP BY intent, - service, - service_name) - AND status IN ('pending', 'approved') -), -latest_intent_status AS ( - SELECT intent, - isforservice, - created, - status, - ROW_NUMBER() OVER (PARTITION BY intent ORDER BY created DESC) AS rn - FROM intent -) -SELECT intent, - status, - CEIL(COUNT(*) OVER() / :page_size::DECIMAL) AS total_pages, - created -FROM latest_intent_status -WHERE rn = 1 - AND isforservice = true - AND intent NOT IN ( - SELECT intent - FROM connected_intents - ) - AND (:search IS NULL OR intent ILIKE '%' || :search || '%') - AND status = 'ACTIVE' -ORDER BY - CASE WHEN :sorting = 'intent asc' THEN intent END ASC, - CASE WHEN :sorting = 'intent desc' THEN intent END DESC -OFFSET ((GREATEST(:page, 1) - 1) * :page_size) LIMIT :page_size; \ No newline at end of file diff --git a/DSL/Resql/training/POST/get-requested-service-triggers.sql b/DSL/Resql/training/POST/get-requested-service-triggers.sql deleted file mode 100644 index 3510b0bf5..000000000 --- a/DSL/Resql/training/POST/get-requested-service-triggers.sql +++ /dev/null @@ -1,19 +0,0 @@ -SELECT intent, - service, - MAX(service_name) AS service_name, - MAX(created) AS requested_at, - MAX(author_role) as author_role, - CEIL(COUNT(*) OVER() / :page_size::DECIMAL) AS total_pages -FROM service_trigger -GROUP BY intent, - service -HAVING MAX(status) = 'pending' -AND MAX("author_role") != 'service_manager' -ORDER BY - CASE WHEN :sorting = 'intent asc' THEN intent END ASC, - CASE WHEN :sorting = 'intent desc' THEN intent END DESC, - CASE WHEN :sorting = 'serviceName asc' THEN MAX(service_name) END ASC, - CASE WHEN :sorting = 'serviceName desc' THEN MAX(service_name) END DESC, - CASE WHEN :sorting = 'requestedAt asc' THEN MAX(created) END ASC, - CASE WHEN :sorting = 'requestedAt desc' THEN MAX(created) END DESC -OFFSET ((GREATEST(:page, 1) - 1) * :page_size) LIMIT :page_size; diff --git a/DSL/Resql/training/POST/get-service-trigger.sql b/DSL/Resql/training/POST/get-service-trigger.sql deleted file mode 100644 index 818f831a7..000000000 --- a/DSL/Resql/training/POST/get-service-trigger.sql +++ /dev/null @@ -1,9 +0,0 @@ -SELECT id, intent, service, service_name, status, author_role, created -FROM service_trigger -WHERE service = :serviceId - AND id = ( - SELECT MAX(id) - FROM service_trigger - WHERE service = :serviceId - ) - AND status NOT IN ('deleted', 'declined'); diff --git a/DSL/Ruuter/services/POST/services.yml b/DSL/Ruuter/services/POST/services.yml index 472329cd1..8188fac22 100644 --- a/DSL/Ruuter/services/POST/services.yml +++ b/DSL/Ruuter/services/POST/services.yml @@ -37,17 +37,7 @@ assign_services_result: assign: services: ${services_res.response.body} -get_approved_triggers: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/get-approved-tiggers" - result: triggers_res - -assign_training_result: - assign: - triggers: ${triggers_res.response.body} - return_ok: status: 200 - return: ${[services, triggers]} + return: ${[services]} next: end diff --git a/DSL/Ruuter/services/POST/services/available-intents.yml b/DSL/Ruuter/services/POST/services/available-intents.yml deleted file mode 100644 index 715388d85..000000000 --- a/DSL/Ruuter/services/POST/services/available-intents.yml +++ /dev/null @@ -1,36 +0,0 @@ -declaration: - call: declare - version: 0.1 - description: "Decription placeholder for 'AVAILABLE-INTENTS'" - method: post - accepts: json - returns: json - namespace: service - allowlist: - body: - - field: page - type: number - description: "Body field 'page'" - - field: page_size - type: number - description: "Body field 'page_size'" - - field: sorting - type: string - description: "Body field 'sorting'" - - field: search - type: string - description: "Body field 'search'" - -get_available_intents: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/get-available-intents" - body: - page: ${incoming.body.page} - page_size: ${incoming.body.page_size} - sorting: ${incoming.body.sorting} - search: ${incoming.body.search} - result: res - -return_result: - return: ${res.response.body} diff --git a/DSL/Ruuter/services/POST/services/check-intent-connection.yml b/DSL/Ruuter/services/POST/services/check-intent-connection.yml deleted file mode 100644 index 548026abc..000000000 --- a/DSL/Ruuter/services/POST/services/check-intent-connection.yml +++ /dev/null @@ -1,29 +0,0 @@ -declaration: - call: declare - version: 0.1 - description: "Decription placeholder for 'CHECK-INTENT-CONNECTION'" - method: post - accepts: json - returns: json - namespace: service - allowlist: - body: - - field: serviceId - type: string - description: "Body field 'serviceId'" - -extract_request_data: - assign: - serviceId: ${incoming.body.serviceId} - -check_for_intent_connection: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/get-service-trigger" - body: - serviceId: ${serviceId} - result: res - -return_result: - status: 200 - return: ${res.response.body[0]} diff --git a/DSL/Ruuter/services/POST/services/connection-requests.yml b/DSL/Ruuter/services/POST/services/connection-requests.yml deleted file mode 100644 index 117c028ae..000000000 --- a/DSL/Ruuter/services/POST/services/connection-requests.yml +++ /dev/null @@ -1,32 +0,0 @@ -declaration: - call: declare - version: 0.1 - description: "Decription placeholder for 'CONNECTION-REQUESTS'" - method: post - accepts: json - returns: json - namespace: service - allowlist: - body: - - field: page - type: number - description: "Body field 'page'" - - field: page_size - type: number - description: "Body field 'page_size'" - - field: sorting - type: string - description: "Body field 'sorting'" - -get_connection_requests: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/get-requested-service-triggers" - body: - page: ${incoming.body.page} - page_size: ${incoming.body.page_size} - sorting: ${incoming.body.sorting} - result: res - -return_result: - return: ${res.response.body} diff --git a/DSL/Ruuter/services/POST/services/delete.yml b/DSL/Ruuter/services/POST/services/delete.yml index 455fc6828..c9a7bef54 100644 --- a/DSL/Ruuter/services/POST/services/delete.yml +++ b/DSL/Ruuter/services/POST/services/delete.yml @@ -131,34 +131,7 @@ delete_mcq_files: body: path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}" keyword: "${name_res.response.body[0].name}_" - result: check_for_intent_connection - -check_for_intent_connection: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/get-service-trigger" - body: - serviceId: ${id} - result: connection_res - next: check_is_connected_to_intents_or_has_requests - -check_is_connected_to_intents_or_has_requests: - switch: - - condition: ${connection_res.response.body.length > 0} - next: delete_intent_connection - next: return_ok - -delete_intent_connection: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/add-service-trigger" - body: - serviceId: ${id} - intent: ${connection_res.response.body[0].intent} - status: "deleted" - authorRole: ${connection_res.response.body[0].authorRole} - serviceName: ${connection_res.response.body[0].serviceName} - result: return_ok + result: deleted_mcq return_ok: reloadDsl: true diff --git a/DSL/Ruuter/services/POST/services/request-service-intent-connection.yml b/DSL/Ruuter/services/POST/services/request-service-intent-connection.yml deleted file mode 100644 index e926e6bb0..000000000 --- a/DSL/Ruuter/services/POST/services/request-service-intent-connection.yml +++ /dev/null @@ -1,75 +0,0 @@ -declaration: - call: declare - version: 0.1 - description: "Decription placeholder for 'REQUEST-SERVICE-INTENT-CONNECTION'" - method: post - accepts: json - returns: json - namespace: service - allowlist: - body: - - field: intent - type: string - description: "Body field 'intent'" - - field: serviceId - type: string - description: "Body field 'serviceId'" - - field: serviceName - type: string - description: "Body field 'serviceName'" - - field: serviceMethod - type: string - description: "Body field 'serviceMethod'" - - field: serviceSlot - type: string - description: "Slot input" - headers: - - field: cookie - type: string - description: "Cookie field" - -extract_request_data: - assign: - serviceId: ${incoming.body.serviceId} - serviceName: ${incoming.body.serviceName || ""} - serviceMethod: ${incoming.body.serviceMethod || 'POST'} - serviceSlot: ${incoming.body.serviceSlot ?? ""} - intent: ${incoming.body.intent} - -link_intent_to_service_in_rasa_domain: - call: http.post - args: - url: "[#SERVICE_RUUTER]/services/domain-intent-service-link" - headers: - cookie: ${incoming.headers.cookie} - body: - serviceMethod: ${serviceMethod} - serviceName: ${serviceName} - serviceSlot: ${serviceSlot} - intent: ${intent} - type: "Add" - result: link_res - error: return_intent_does_not_exist - -add_connection_request: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/add-service-trigger" - body: - serviceId: ${serviceId} - intent: ${intent} - status: "approved" - authorRole: "service_manager" - serviceName: ${serviceName} - result: res - next: return_result - -return_result: - status: 200 - return: "Connection request sent successfully" - next: end - -return_intent_does_not_exist: - status: 400 - return: "does not exists" - next: end diff --git a/DSL/Ruuter/services/POST/services/respond-to-connection-request.yml b/DSL/Ruuter/services/POST/services/respond-to-connection-request.yml deleted file mode 100644 index 02548f2fa..000000000 --- a/DSL/Ruuter/services/POST/services/respond-to-connection-request.yml +++ /dev/null @@ -1,87 +0,0 @@ -declaration: - call: declare - version: 0.1 - description: "Decription placeholder for 'RESPOND-TO-CONNECTION-REQUEST'" - method: post - accepts: json - returns: json - namespace: service - allowlist: - body: - - field: authorRole - type: string - description: "Body field 'authorRole'" - - field: intent - type: string - description: "Body field 'intent'" - - field: serviceId - type: string - description: "Body field 'serviceId'" - - field: serviceName - type: string - description: "Body field 'serviceName'" - - field: serviceSlot - type: string - description: "Slot input" - - field: status - type: string - description: "Body field 'status'" - headers: - - field: cookie - type: string - description: "Cookie field" - -extract_request_data: - assign: - serviceId: ${incoming.body.serviceId} - serviceName: ${incoming.body.serviceName} - serviceMethod: ${incoming.body.serviceMethod} - serviceSlot: ${incoming.body.serviceSlot} - authorRole: ${incoming.body.authorRole} - intent: ${incoming.body.intent} - status: ${incoming.body.status} - -check_status: - switch: - - condition: ${status === "approved"} - next: link_intent_to_service_in_rasa_domain - next: add_connection_request - -link_intent_to_service_in_rasa_domain: - call: http.post - args: - url: "[#SERVICE_RUUTER]/services/domain-intent-service-link" - headers: - cookie: ${incoming.headers.cookie} - body: - serviceName: ${serviceName} - serviceMethod: ${serviceMethod} - intent: ${intent} - type: "Add" - serviceSlot: ${serviceSlot} - result: link_res - error: return_intent_does_not_exist - next: add_connection_request - -add_connection_request: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/add-service-trigger" - body: - serviceId: ${serviceId} - intent: ${intent} - status: ${status} - authorRole: ${authorRole} - serviceName: ${serviceName} - result: res - next: return_result - -return_result: - status: 200 - return: "Response to connection request" - next: end - -return_intent_does_not_exist: - status: 400 - return: "does not exists" - next: end diff --git a/DSL/Ruuter/services/POST/services/status.yml b/DSL/Ruuter/services/POST/services/status.yml index dea8cc8d9..cbd2d273e 100644 --- a/DSL/Ruuter/services/POST/services/status.yml +++ b/DSL/Ruuter/services/POST/services/status.yml @@ -269,51 +269,8 @@ draft_all_mcq_services: keyword: "${name}_" format: "tmp" result: inactive_move_results - next: check_for_intent_connection - -check_for_intent_connection: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/get-service-trigger" - body: - serviceId: ${id} - result: connection_res - next: check_is_connected_to_intents_or_has_requests - -check_is_connected_to_intents_or_has_requests: - switch: - - condition: ${connection_res.response.body.length > 0} - next: unlink_service_from_intent_in_rasa_domain next: return_ok -unlink_service_from_intent_in_rasa_domain: - call: http.post - args: - url: "[#SERVICE_RUUTER]/services/domain-intent-service-link" - headers: - cookie: ${incoming.headers.cookie} - body: - serviceName: ${connection_res.response.body[0].serviceName} - intent: ${connection_res.response.body[0].intent} - serviceMethod: ${ruuter_type} - type: "Remove" - serviceSlot: "" - result: link_res - error: return_intent_does_not_exist - next: delete_intent_connection - -delete_intent_connection: - call: http.post - args: - url: "[#SERVICE_TRAINING_RESQL]/add-service-trigger" - body: - serviceId: ${id} - intent: ${connection_res.response.body[0].intent} - status: "deleted" - authorRole: ${connection_res.response.body[0].authorRole} - serviceName: ${connection_res.response.body[0].serviceName} - result: return_ok - return_ok: reloadDsl: true status: 200 diff --git a/GUI/.env.development b/GUI/.env.development index ef42174ff..a2aa4b75a 100644 --- a/GUI/.env.development +++ b/GUI/.env.development @@ -9,12 +9,10 @@ REACT_APP_APP_PORT=3006 REACT_APP_LOCAL=true REACT_APP_API_URL=http://localhost:8086/services REACT_APP_RUUTER_PRIVATE_API_URL=http://localhost:8086/services -REACT_APP_TRAINING_MODULE_GUI_BASE_URL=http://localhost:3001 REACT_APP_NOTIFICATION_NODE_URL=http://localhost:4040 PORT=3006 REACT_APP_NOTIFICATION_NODE_URL=http://localhost:4040 REACT_APP_CONVERSATIONS_BASE_URL=http://localhost:8080/chat -REACT_APP_TRAINING_BASE_URL=http://localhost:8080/training REACT_APP_ANALYTICS_BASE_URL=http://localhost:8080/analytics REACT_APP_SERVICES_BASE_URL=http://localhost:8080/services REACT_APP_SETTINGS_BASE_URL=http://localhost:8080/settings @@ -34,4 +32,4 @@ REACT_APP_VALIDATIONS_ENABLED=FALSE REACT_APP_INTENT_CREATION_PATH=http://localhost:3001/training/training/intents REACT_APP_MULTI_CHOICE_QUESTION_MAX_BUTTONS=4 REACT_APP_CURRENT_VERSION=Version 1.0.0 -REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ootel","en":"Pending"},"path":"/pending"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"},{"label":{"et":"Automatic Teenused","en":"Automatic Services"},"path":"/auto-services"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Nõustajad","en":"Advisors"},"path":"/advisors"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"Automatic Teenused","en":"Automatic Services"},"path":"/auto-services"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"}]},{"id":"monitoring","label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] +REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ootel","en":"Pending"},"path":"/pending"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Nõustajad","en":"Advisors"},"path":"/advisors"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"}]},{"id":"monitoring","label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] diff --git a/GUI/src/RootComponent.tsx b/GUI/src/RootComponent.tsx index 335877ed0..382c4f86b 100644 --- a/GUI/src/RootComponent.tsx +++ b/GUI/src/RootComponent.tsx @@ -1,4 +1,3 @@ -import ConnectionRequestsPage from 'pages/ConnectionRequestsPage'; import React from 'react'; import { Navigate, Route, Routes } from 'react-router-dom'; @@ -24,7 +23,6 @@ const RootComponent: React.FC = () => { }> } /> } /> - } /> } /> } /> } /> diff --git a/GUI/src/components/ServicesTable/columns.tsx b/GUI/src/components/ServicesTable/columns.tsx index f1d9c3724..b2e7abdd1 100644 --- a/GUI/src/components/ServicesTable/columns.tsx +++ b/GUI/src/components/ServicesTable/columns.tsx @@ -4,8 +4,9 @@ import Label from 'components/Label'; import Tooltip from 'components/Tooltip'; import i18n from 'i18n'; import { AiOutlineExport } from 'react-icons/ai'; +import { AiOutlineInfoCircle } from 'react-icons/ai'; import { IoCopyOutline } from 'react-icons/io5'; -import { MdDeleteOutline, MdOutlineArrowForward, MdOutlineDescription, MdOutlineEdit } from 'react-icons/md'; +import { MdDeleteOutline, MdOutlineDescription, MdOutlineEdit } from 'react-icons/md'; import { NavigateFunction } from 'react-router-dom'; import { ROUTES } from 'resources/routes-constants'; import useServiceListStore from 'store/services.store'; @@ -17,20 +18,11 @@ import { exportServices } from 'utils/service-export'; interface GetColumnsConfig { isCommon: boolean; navigate: NavigateFunction; - checkIntentConnection: () => void; hideDeletePopup: () => void; showReadyPopup: () => void; - showIntentConnectionModal: () => void; } -export const getColumns = ({ - isCommon, - navigate, - checkIntentConnection, - hideDeletePopup, - showReadyPopup, - showIntentConnectionModal, -}: GetColumnsConfig) => { +export const getColumns = ({ isCommon, navigate, hideDeletePopup, showReadyPopup }: GetColumnsConfig) => { const columnHelper = createColumnHelper(); const userInfo = useStore.getState().userInfo; @@ -81,44 +73,63 @@ export const getColumns = ({ ), }), - columnHelper.accessor('linkedIntent', { - header: i18n.t('overview.service.linkedIntent') ?? '', + columnHelper.accessor('description', { + header: i18n.t('overview.service.description') ?? '', meta: { size: 200, }, - cell: (props) => ( - - {props.cell.getValue() ? ( - - ) : ( - + + } > - } /> - {i18n.t('overview.popup.connectToIntent')} - - )} - - ), +
+ {isLong && ( + } + size="medium" + /> + )} +
+ + + ); + }, }), columnHelper.accessor('state', { header: i18n.t('overview.service.state') ?? '', @@ -131,8 +142,7 @@ export const getColumns = ({ onClick={() => { useServiceListStore.getState().setSelectedService(props.row.original); const state = props.row.original.state; - if (state === ServiceState.Ready && props.row.original.linkedIntent != '') { - checkIntentConnection(); + if (state === ServiceState.Ready) { showReadyPopup(); } }} diff --git a/GUI/src/components/ServicesTable/index.tsx b/GUI/src/components/ServicesTable/index.tsx index 012707cd8..2daff8cf4 100644 --- a/GUI/src/components/ServicesTable/index.tsx +++ b/GUI/src/components/ServicesTable/index.tsx @@ -1,10 +1,8 @@ import { PaginationState, SortingState } from '@tanstack/react-table'; -import ConnectServiceToIntentModel from 'pages/Integration/ConnectServiceToIntentModel'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; import useServiceListStore from 'store/services.store'; -import { Trigger } from 'types/Trigger'; import { Button, Card, Modal, Track } from '..'; import DataTable from '../DataTable'; @@ -20,19 +18,13 @@ type ServicesTableProps = { const ServicesTable: FC = ({ isCommon = false }) => { const { t } = useTranslation(); const [isDeletePopupVisible, setIsDeletePopupVisible] = useState(false); - const [isReadyPopupVisible, setIsReadyPopupVisible] = useState(false); - const [isIntentConnectionPopupVisible, setIsIntentConnectionPopupVisible] = useState(false); - const [readyPopupText, setReadyPopupText] = useState(''); - const [isReadyStatusChecking, setIsReadyStatusChecking] = useState(false); const services = useServiceListStore((state) => (isCommon ? state.commonServices : state.notCommonServices)); const navigate = useNavigate(); - const [selectedConnectionTrigger, setSelectedConnectionTrigger] = useState(); const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10, }); const [sorting, setSorting] = useState([{ id: 'name', desc: false }]); - const [isActivating, setIsActivating] = useState(false); const loadServices = (paginationState: PaginationState, sortingState: SortingState) => { void useServiceListStore.getState().loadServicesList(paginationState, sortingState); @@ -57,9 +49,7 @@ const ServicesTable: FC = ({ isCommon = false }) => { useServiceListStore .getState() .changeServiceState( - () => { - setIsReadyPopupVisible(false); - }, + () => {}, t('overview.service.toast.updated'), t('overview.service.toast.failed.state'), activate, @@ -67,49 +57,24 @@ const ServicesTable: FC = ({ isCommon = false }) => { pagination, sorting, ) - .then(() => { - setIsActivating(false); - }) - .catch(() => { - setIsActivating(false); + .then(() => {}) + .catch((e) => { + console.error(e); }); }, [t, pagination, sorting], ); const columns = useMemo(() => { - const checkIntentConnection = () => { - void useServiceListStore.getState().checkServiceIntentConnection( - (response) => { - setSelectedConnectionTrigger(response); - setIsReadyStatusChecking(false); - if (response.status === 'pending') { - setReadyPopupText(t('overview.popup.connectionPending').toString()); - } else { - setReadyPopupText(t('overview.popup.setActive').toString()); - } - }, - () => { - setIsReadyStatusChecking(false); - setReadyPopupText(t('overview.popup.intentNotConnected').toString()); - }, - ); - }; - return getColumns({ isCommon, navigate, - checkIntentConnection, hideDeletePopup: () => setIsDeletePopupVisible(true), showReadyPopup: () => { - setIsReadyStatusChecking(true); - setIsReadyPopupVisible(true); - }, - showIntentConnectionModal: () => { - setIsIntentConnectionPopupVisible(true); + changeServiceState(true); }, }); - }, [isCommon, navigate, t]); + }, [isCommon, changeServiceState, navigate]); const deleteSelectedService = () => { setIsDeletingService(true); @@ -134,48 +99,6 @@ const ServicesTable: FC = ({ isCommon = false }) => { }); }; - const cancelConnectionRequest = () => { - if (selectedConnectionTrigger) { - void useServiceListStore - .getState() - .cancelConnectionRequest( - () => setIsReadyPopupVisible(false), - t('overview.service.toast.cancelledConnection'), - t('overview.service.toast.failed.cancelledConnection'), - selectedConnectionTrigger, - ); - } - }; - - const getActiveAndConnectionButton = () => { - if (readyPopupText === t('overview.popup.setActive')) { - return ( - - ); - } - if (readyPopupText === t('overview.popup.connectionPending')) { - return ; - } - return ( - - ); - }; - return ( {isDeletePopupVisible && ( @@ -190,34 +113,6 @@ const ServicesTable: FC = ({ isCommon = false }) => { )} - {isReadyPopupVisible && ( - setIsReadyPopupVisible(false)}> - {isReadyStatusChecking ? ( - - -
- - ) : ( - - - {readyPopupText != t('overview.popup.connectionPending').toString() && - readyPopupText != t('overview.popup.setActive').toString() && - readyPopupText != t('overview.popup.intentNotConnected').toString() && ( - - )} - {getActiveAndConnectionButton()} - - )} - - )} - {isIntentConnectionPopupVisible && ( - setIsIntentConnectionPopupVisible(false)} - onConnect={() => setIsIntentConnectionPopupVisible(false)} - /> - )} { - const { t } = useTranslation(); - const [triggers, setTriggers] = useState(undefined); - const [pagination, setPagination] = useState({ - pageIndex: 0, - pageSize: 10, - }); - const [sorting, setSorting] = useState([]); - - const loadConnectionRequests = useCallback( - (pagination: PaginationState, sorting: SortingState) => { - void useServiceStore - .getState() - .loadRequestsList( - (requests: Trigger[]) => setTriggers(requests), - t('connectionRequests.toast.failed.requests'), - pagination, - sorting, - ); - }, - [t], - ); - - useEffect(() => { - loadConnectionRequests(pagination, sorting); - }, [loadConnectionRequests, pagination, sorting]); - - const respondToConnectionRequest = useCallback( - async (status: boolean, request: Trigger) => { - await useServiceStore - .getState() - .respondToConnectionRequest( - () => loadConnectionRequests(pagination, sorting), - t('connectionRequests.approvedConnection'), - t('connectionRequests.declinedConnection'), - status, - request, - ); - }, - [loadConnectionRequests, pagination, sorting, t], - ); - - const appRequestColumns = useMemo(() => getColumns(respondToConnectionRequest), [respondToConnectionRequest]); - - if (!triggers) return Loading ...; - - return ( - <> -

{t('connectionRequests.title')}

- - { - if (state.pageIndex === pagination.pageIndex && state.pageSize === pagination.pageSize) return; - setPagination(state); - loadConnectionRequests(state, sorting); - }} - setSorting={(state: SortingState) => { - setSorting(state); - loadConnectionRequests(pagination, state); - }} - isClientSide={false} - pagesCount={triggers[triggers.length - 1]?.totalPages ?? 1} - /> - - - ); -}; - -const getColumns = (respondToConnectionRequest: (result: boolean, tigger: Trigger) => void) => { - const appRequestColumnHelper = createColumnHelper(); - - return [ - appRequestColumnHelper.accessor('intent', { - header: 'Intent', - cell: (uniqueIdentifier) => uniqueIdentifier.getValue(), - }), - appRequestColumnHelper.accessor('serviceName', { - header: 'Service', - cell: (uniqueIdentifier) => uniqueIdentifier.getValue(), - }), - appRequestColumnHelper.accessor('requestedAt', { - header: 'Requested At', - cell: (props) => {format(new Date(props.getValue()), 'dd-MM-yyyy HH:mm:ss')}, - }), - appRequestColumnHelper.display({ - header: '', - cell: (props) => ( - respondToConnectionRequest(true, props.row.original)} - /> - } - size="medium" - /> - ), - id: 'approve', - meta: { - size: '1%', - }, - }), - appRequestColumnHelper.display({ - header: '', - cell: (props) => ( - respondToConnectionRequest(false, props.row.original)} - /> - } - size="medium" - /> - ), - id: 'reject', - meta: { - size: '1%', - }, - }), - appRequestColumnHelper.display({ - header: '', - id: 'space', - meta: { - size: '1%', - }, - }), - ]; -}; - -const AuthorizedConnectionRequestsPage = withAuthorization(ConnectionRequestsPage, [ - ROLES.ROLE_ADMINISTRATOR, - ROLES.ROLE_SERVICE_MANAGER, -]); -export default AuthorizedConnectionRequestsPage; diff --git a/GUI/src/pages/Integration/ConnectServiceToIntentModel.tsx b/GUI/src/pages/Integration/ConnectServiceToIntentModel.tsx deleted file mode 100644 index a12d539d1..000000000 --- a/GUI/src/pages/Integration/ConnectServiceToIntentModel.tsx +++ /dev/null @@ -1,199 +0,0 @@ -import { createColumnHelper, PaginationState, SortingState } from '@tanstack/react-table'; -import { Button, DataTable, Dialog, FormInput, Icon, Modal, Track } from 'components'; -import i18n from 'i18n'; -import { FC, useCallback, useEffect, useMemo, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { MdOutlineArrowForward } from 'react-icons/md'; -import { Link } from 'react-router-dom'; -import useServiceStore from 'store/services.store'; -import { Intent } from 'types/Intent'; - -type ConnectServiceToIntentModelProps = { - onModalClose: () => void; - onConnect: () => void; - canCancel?: boolean; - canSkip?: boolean; - onSkip?: () => void; -}; - -const ConnectServiceToIntentModel: FC = ({ - onModalClose, - onConnect, - canCancel = true, - canSkip = false, - onSkip, -}) => { - const { t } = useTranslation(); - const [filter, setFilter] = useState(''); - const [pagination, setPagination] = useState({ - pageIndex: 0, - pageSize: 8, - }); - const [sorting, setSorting] = useState([]); - const [intents, setIntents] = useState(undefined); - const [selectedIntent, setSelectedIntent] = useState(); - const [showConfirmationModal, setShowConfirmationModal] = useState(false); - const [isConnecting, setIsConnecting] = useState(false); - - const loadAvailableIntents = useCallback( - (pagination: PaginationState, sorting: SortingState, search: string) => { - void useServiceStore - .getState() - .loadAvailableIntentsList( - (requests: Intent[]) => setIntents(requests), - t('overview.service.toast.failed.availableIntents'), - pagination, - sorting, - search, - ); - }, - [t], - ); - - useEffect(() => { - const intialPagination = { pageIndex: 0, pageSize: 10 }; - loadAvailableIntents(filter ? intialPagination : pagination, sorting, filter); - }, [filter, loadAvailableIntents, pagination, sorting]); - - const intentColumns = useMemo( - () => - getColumns((intent) => { - setSelectedIntent(intent); - setShowConfirmationModal(true); - }), - [], - ); - - return ( - - - setFilter(e.target.value)} - /> - - {!intents && ( - -
- - )} - {intents && intents.length === 0 && ( - - - - )} - {intents && intents.length > 0 && ( - { - if (state.pageIndex === pagination.pageIndex && state.pageSize === pagination.pageSize) return; - setPagination(state); - loadAvailableIntents(state, sorting, filter); - }} - setSorting={(state: SortingState) => { - setSorting(state); - loadAvailableIntents(pagination, state, filter); - }} - isClientSide={false} - pagesCount={intents[intents.length - 1]?.totalPages ?? 1} - /> - )} - - - {`+ ${t('overview.popup.createNewIntent')}`} - - - {canCancel && ( - - )} - {canSkip && } - - - {showConfirmationModal && ( - setShowConfirmationModal(false)}> - - - - - - )} -
- ); -}; - -const getColumns = (onClick: (intent: Intent) => void) => { - const columnHelper = createColumnHelper(); - - return [ - columnHelper.accessor('intent', { - header: i18n.t('overview.popup.intent') ?? '', - }), - columnHelper.display({ - id: 'connect', - cell: (props) => ( - - ), - meta: { - size: '1%', - }, - }), - ]; -}; - -export default ConnectServiceToIntentModel; diff --git a/GUI/src/pages/OverviewPage.tsx b/GUI/src/pages/OverviewPage.tsx index 143b24f31..3d0128450 100644 --- a/GUI/src/pages/OverviewPage.tsx +++ b/GUI/src/pages/OverviewPage.tsx @@ -5,7 +5,6 @@ import { useNavigate } from 'react-router-dom'; import { Button, ExportServicesModal, Track } from '../components'; import ServicesTable from '../components/ServicesTable'; -import { trainingModuleTraining } from '../resources/api-constants'; import { ROUTES } from '../resources/routes-constants'; const OverviewPage: React.FC = () => { @@ -27,10 +26,6 @@ const OverviewPage: React.FC = () => {

{t('overview.commonServices')}

-

- {t('overview.trainingModuleLink.text')}{' '} - {t('overview.trainingModuleLink.train')}. -

setIsExportModalVisible(false)} /> ); diff --git a/GUI/src/resources/api-constants.ts b/GUI/src/resources/api-constants.ts index c20c1829c..51475c97e 100644 --- a/GUI/src/resources/api-constants.ts +++ b/GUI/src/resources/api-constants.ts @@ -1,7 +1,6 @@ import { ServiceState } from 'types'; const baseUrl = import.meta.env.REACT_APP_API_URL; -const trainingModuleBaseUrl = import.meta.env.REACT_APP_TRAINING_MODULE_GUI_BASE_URL; export const getOpenApiSpec = (): string => `${baseUrl}/services/open-api-spec`; export const servicesRequestsExplain = (): string => `${baseUrl}/services/requests/explain`; @@ -14,9 +13,6 @@ export const getEndpointValidationMock = (): string => `${baseUrl}/mocks/validat export const getEndpointValidation = (): string => `${baseUrl}/services/endpoint-url-validation`; export const deleteService = (): string => `${baseUrl}/services/delete`; export const changeServiceStatus = (): string => `${baseUrl}/services/status`; -export const changeIntentConnection = (): string => `${baseUrl}/services/check-intent-connection`; -export const requestServiceIntentConnection = (): string => `${baseUrl}/services/request-service-intent-connection`; -export const respondToConnectionRequest = (): string => `${baseUrl}/services/respond-to-connection-request`; export const createNewService = (): string => `${baseUrl}/services/add`; export const testService = (state: ServiceState, serviceName: string): string => `${baseUrl}/services/${state.toLowerCase()}/${serviceName}`; @@ -27,7 +23,6 @@ export const getAvailableIntents = (): string => `${baseUrl}/services/available- export const jsonToYml = (): string => `${baseUrl}/saveJsonToYml`; export const getFaultyServices = (page: number, pageSize: number, sort: string, order: string): string => `${baseUrl}/services/services-detailed/nok?page=${page}&page_size=${pageSize}&sort=${sort}&order=${order}`; -export const trainingModuleTraining = (): string => `${trainingModuleBaseUrl}/treening/treeni-uus-mudel`; export const getServiceById = (id: string): string => `${baseUrl}/service-by-id?id=${id}`; export const createEndpoint = (): string => `${baseUrl}/services/create-endpoint`; export const updateEndpoint = (id: string): string => `${baseUrl}/services/update-endpoint?id=${id}`; diff --git a/GUI/src/store/services.store.ts b/GUI/src/store/services.store.ts index 606b50558..d31cdd666 100644 --- a/GUI/src/store/services.store.ts +++ b/GUI/src/store/services.store.ts @@ -1,17 +1,6 @@ import { PaginationState, SortingState } from '@tanstack/react-table'; -import { - changeIntentConnection, - changeServiceStatus, - deleteService as deleteServiceApi, - getAvailableIntents, - getConnectionRequests, - getServicesList, - requestServiceIntentConnection, - respondToConnectionRequest, -} from 'resources/api-constants'; +import { changeServiceStatus, deleteService as deleteServiceApi, getServicesList } from 'resources/api-constants'; import { Service, ServiceState } from 'types'; -import { Intent } from 'types/Intent'; -import { Trigger } from 'types/Trigger'; import { create } from 'zustand'; import { persist } from 'zustand/middleware'; @@ -40,7 +29,6 @@ interface ServiceStoreState { pagination: PaginationState, sorting: SortingState, ) => Promise; - checkServiceIntentConnection: (onConnected: (response: Trigger) => void, onNotConnected: () => void) => Promise; deleteSelectedService: ( onEnd: () => void, successMessage: string, @@ -48,40 +36,6 @@ interface ServiceStoreState { pagination: PaginationState, sorting: SortingState, ) => Promise; - requestServiceIntentConnection: ( - onEnd: () => void, - successMessage: string, - errorMessage: string, - intent: string, - pagination: PaginationState, - sorting: SortingState, - ) => Promise; - loadRequestsList: ( - onEnd: (requests: Trigger[]) => void, - errorMessage: string, - pagination: PaginationState, - sorting: SortingState, - ) => Promise; - loadAvailableIntentsList: ( - onEnd: (requests: Intent[]) => void, - errorMessage: string, - pagination: PaginationState, - sorting: SortingState, - search: string, - ) => Promise; - respondToConnectionRequest: ( - onEnd: () => void, - successMessage: string, - errorMessage: string, - status: boolean, - request: Trigger, - ) => Promise; - cancelConnectionRequest: ( - onEnd: () => void, - successMessage: string, - errorMessage: string, - request: Trigger, - ) => Promise; } const useServiceListStore = create()( @@ -109,7 +63,6 @@ const useServiceListStore = create()( sorting: sort, is_common: false, }); - const triggers = result.data.response[1]; const services = result.data.response[0].map?.((item: any) => ({ id: item.id, @@ -122,7 +75,6 @@ const useServiceListStore = create()( serviceId: item.serviceId, usedCount: 0, totalPages: item.totalPages, - linkedIntent: triggers.find((e: Trigger) => e.service === item.serviceId)?.intent ?? '', endpoints: [], structure: item.structure, })) ?? []; @@ -139,7 +91,6 @@ const useServiceListStore = create()( sorting: sort, is_common: true, }); - const triggers = result.data.response[1]; const services = result.data.response[0].map?.((item: any) => ({ id: item.id, @@ -151,7 +102,6 @@ const useServiceListStore = create()( serviceId: item.serviceId, totalPages: item.totalPages, usedCount: 0, - linkedIntent: triggers.find((e: Trigger) => e.service === item.serviceId)?.intent ?? '', endpoints: [], slot: '', structure: item.structure, @@ -164,8 +114,8 @@ const useServiceListStore = create()( deleteService: (id) => { const services = get().services.filter((e: Service) => e.serviceId !== id); set({ - commonServices: services.filter((e: Service) => e.isCommon === true), - notCommonServices: services.filter((e: Service) => e.isCommon === false), + commonServices: services.filter((e: Service) => e.isCommon), + notCommonServices: services.filter((e: Service) => !e.isCommon), }); }, selectedService: undefined, @@ -208,24 +158,6 @@ const useServiceListStore = create()( }); onEnd(); }, - checkServiceIntentConnection: async (onConnected, onNotConnected) => { - const selectedService = get().selectedService; - if (!selectedService) return; - - try { - const res = await api.post<{ response: Trigger }>(changeIntentConnection(), { - serviceId: selectedService.serviceId, - }); - if (res.data.response) { - onConnected(res.data.response); - } else { - onNotConnected(); - } - } catch (error) { - console.error(error); - onNotConnected(); - } - }, deleteSelectedService: async (onEnd, successMessage, errorMessage) => { const selectedService = get().selectedService; if (!selectedService) return; @@ -245,94 +177,6 @@ const useServiceListStore = create()( }); onEnd(); }, - requestServiceIntentConnection: async (onEnd, successMessage, errorMessage, intent, pagination, sorting) => { - const selectedService = get().selectedService; - if (!selectedService) return; - - try { - await api.post(requestServiceIntentConnection(), { - serviceId: selectedService.serviceId, - serviceName: selectedService.name, - serviceMethod: selectedService.type, - serviceSlot: selectedService.slot ?? '', - intent: intent, - }); - useToastStore.getState().success({ title: successMessage }); - await useServiceListStore.getState().loadServicesList(pagination, sorting); - await useServiceListStore.getState().loadCommonServicesList(pagination, sorting); - } catch (error) { - console.error(error); - useToastStore.getState().error({ title: errorMessage }); - } - onEnd(); - }, - loadRequestsList: async (onEnd, errorMessage, pagination, sorting) => { - try { - const order = sorting[0]?.desc ? 'desc' : 'asc'; - const sort = sorting.length === 0 ? 'requestedAt desc' : sorting[0]?.id + ' ' + order; - const requests = await api.post<{ response: Trigger[] }>(getConnectionRequests(), { - page: pagination.pageIndex + 1, - page_size: pagination.pageSize, - sorting: sort, - }); - onEnd(requests.data.response); - } catch (error) { - console.error(error); - onEnd([]); - useToastStore.getState().error({ title: errorMessage }); - } - }, - loadAvailableIntentsList: async (onEnd, errorMessage, pagination, sorting, search) => { - try { - const order = sorting[0]?.desc ? 'desc' : 'asc'; - const sort = sorting.length === 0 ? 'intent asc' : sorting[0]?.id + ' ' + order; - const requests = await api.post<{ response: Intent[] }>(getAvailableIntents(), { - page: pagination.pageIndex + 1, - page_size: pagination.pageSize, - sorting: sort, - search: search, - }); - onEnd(requests.data.response); - } catch (error) { - console.error(error); - onEnd([]); - useToastStore.getState().error({ title: errorMessage }); - } - }, - respondToConnectionRequest: async (onEnd, successMessage, errorMessage, status, request) => { - try { - await api.post(respondToConnectionRequest(), { - serviceId: request.service, - serviceName: request.serviceName, - serviceMethod: 'POST', - intent: request.intent, - authorRole: request.authorRole, - status: status === true ? 'approved' : 'declined', - }); - useToastStore.getState().success({ title: successMessage }); - } catch (error) { - console.error(error); - useToastStore.getState().error({ title: errorMessage }); - } - onEnd(); - }, - cancelConnectionRequest: async (onEnd, successMessage, errorMessage, request) => { - try { - await api.post(respondToConnectionRequest(), { - serviceId: request.service, - serviceName: request.serviceName, - serviceMethod: 'POST', - intent: request.intent, - authorRole: request.authorRole, - status: 'deleted', - }); - useToastStore.getState().success({ title: successMessage }); - } catch (error) { - console.error(error); - useToastStore.getState().error({ title: errorMessage }); - } - onEnd(); - }, }), { name: 'state-configs', diff --git a/GUI/src/types/Intent.ts b/GUI/src/types/Intent.ts deleted file mode 100644 index dde5e2c66..000000000 --- a/GUI/src/types/Intent.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface Intent { - readonly id: number; - intent: string; - readonly totalPages: number; -} diff --git a/GUI/src/types/service.ts b/GUI/src/types/service.ts index cd24840c9..967719fee 100644 --- a/GUI/src/types/service.ts +++ b/GUI/src/types/service.ts @@ -25,6 +25,5 @@ export interface Service { } >; readonly serviceId: string; - readonly linkedIntent: string; readonly totalPages: number; } diff --git a/constants.ini b/constants.ini index e3f8b3dd2..8261f76bb 100644 --- a/constants.ini +++ b/constants.ini @@ -4,8 +4,6 @@ SERVICE_RESQL=http://resql:8087/services SERVICE_USERS_RESQL=http://resql-users:8088/users -SERVICE_TRAINING_RESQL=http://resql-training:8089/training - SERVICE_DOCKER_INT=http://host.docker.internal:8080 SERVICE_OPENSEARCH=http://opensearch:9200 diff --git a/docker-compose.yml b/docker-compose.yml index 078c8ae94..dcd029fc8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -79,26 +79,6 @@ services: networks: - bykstack - resql_training: - container_name: resql-training - image: resql - depends_on: - - database - environment: - - server.port=8089 - - sqlms.datasources.[0].name=byk - # - sqlms.datasources.[0].jdbcUrl=jdbc:postgresql://database:5432/training_db # For Local Use - - sqlms.datasources.[0].jdbcUrl=jdbc:postgresql://171.22.247.13:5434/train_db - - sqlms.datasources.[0].username=byk - - sqlms.datasources.[0].password=01234 - - logging.level.org.springframework.boot=INFO - ports: - - 8089:8089 - volumes: - - ./DSL/Resql:/DSL - networks: - - bykstack - data-mapper: container_name: data-mapper image: data-mapper @@ -151,13 +131,13 @@ services: - REACT_APP_RUUTER_SERVICES_PATH=/Ruuter/services - REACT_APP_RUUTER_SERVICES_DIR_PATH=services - REACT_APP_CURRENT_VERSION=Version 1.0.0 - - REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"},{"label":{"et":"Valideerimised","en":"Validations"},"path":"/validations"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"},{"label":{"et":"Automatic Teenused","en":"Automatic Services"},"path":"/auto-services"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Bürokratt","en":"Burokratt"},"path":"/burokratt"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Nõustajad","en":"Advisors"},"path":"/advisors"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"Automatic Teenused","en":"Automatic Services"},"path":"/auto-services"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"}]},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"},{"label":{"et":"SKMi konfiguratsioon","en":"SKM Configuration"},"path":"/skm-configuration"},{"label":{"et":"Multidomeenid","en":"Multi-Domains"},"path":"/multi-domains"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"id":"monitoring","label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] + - REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"},{"label":{"et":"Valideerimised","en":"Validations"},"path":"/validations"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Bürokratt","en":"Burokratt"},"path":"/burokratt"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Nõustajad","en":"Advisors"},"path":"/advisors"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"}]},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"},{"label":{"et":"SKMi konfiguratsioon","en":"SKM Configuration"},"path":"/skm-configuration"},{"label":{"et":"Multidomeenid","en":"Multi-Domains"},"path":"/multi-domains"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"id":"monitoring","label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] - REACT_APP_PROJECT_LAYER=services - REACT_APP_VALIDATIONS_ENABLED=FALSE - REACT_APP_INTENT_CREATION_PATH=http://localhost:3001/training/training/intents - REACT_APP_MULTI_CHOICE_QUESTION_MAX_BUTTONS=4 # # for production use this one: - # - REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ootel","en":"Pending"},"path":"/pending"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"},{"label":{"et":"Valideerimised","en":"Validations"},"path":"/validations"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"hidden":true,"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"hidden":true,"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"},{"hidden":true,"label":{"et":"Automatic Teenused","en":"Automatic Services"},"path":"/auto-services"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"hidden":true,"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"hidden":true,"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Nõustajad","en":"Advisors"},"path":"/advisors"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","hidden":true,"label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"Automatic Teenused","en":"Automatic Services"},"path":"/auto-services"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"}]},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"},{"label":{"et":"SKMi konfiguratsioon","en":"SKM Configuration"},"path":"/skm-configuration"},{"hidden": false,"label":{"et":"Multidomeenid","en":"Multi-Domains"},"path":"/multi-domains"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"id":"monitoring","hidden":true,"label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] + # - REACT_APP_MENU_JSON=[{"id":"conversations","label":{"et":"Vestlused","en":"Conversations"},"path":"/chat","children":[{"label":{"et":"Vastamata","en":"Unanswered"},"path":"/unanswered"},{"label":{"et":"Aktiivsed","en":"Active"},"path":"/active"},{"label":{"et":"Ootel","en":"Pending"},"path":"/pending"},{"label":{"et":"Ajalugu","en":"History"},"path":"/history"},{"label":{"et":"Valideerimised","en":"Validations"},"path":"/validations"}]},{"id":"training","label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Treening","en":"Training"},"path":"/training","children":[{"label":{"et":"Teemad","en":"Themes"},"path":"/training/intents"},{"hidden":true,"label":{"et":"Avalikud teemad","en":"Public themes"},"path":"/training/common-intents"},{"label":{"et":"Teemade järeltreenimine","en":"Post training themes"},"path":"/training/intents-followup-training"},{"label":{"et":"Vastused","en":"Answers"},"path":"/training/responses"},{"label":{"et":"Reeglid","en":"Rules"},"path":"/training/rules"},{"hidden":true,"label":{"et":"Konfiguratsioon","en":"Configuration"},"path":"/training/configuration"},{"label":{"et":"Vormid","en":"Forms"},"path":"/training/forms"},{"label":{"et":"Mälukohad","en":"Slots"},"path":"/training/slots"}]},{"label":{"et":"Ajaloolised vestlused","en":"Historical conversations"},"path":"/history","children":[{"label":{"et":"Ajalugu","en":"History"},"path":"/history/history"},{"hidden":true,"label":{"et":"Pöördumised","en":"Appeals"},"path":"/history/appeal"}]},{"label":{"et":"Mudelipank ja analüütika","en":"Modelbank and analytics"},"path":"/analytics","children":[{"label":{"et":"Teemade ülevaade","en":"Overview of topics"},"path":"/analytics/overview"},{"label":{"et":"Mudelite võrdlus","en":"Comparison of models"},"path":"/analytics/models"},{"hidden":true,"label":{"et":"Testlood","en":"testTracks"},"path":"/analytics/testcases"}]},{"label":{"et":"Treeni uus mudel","en":"Train new model"},"path":"/train-new-model"}]},{"id":"analytics","label":{"et":"Analüütika","en":"Analytics"},"path":"/analytics","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Vestlused","en":"Chats"},"path":"/chats"},{"label":{"et":"Tagasiside","en":"Feedback"},"path":"/feedback"},{"label":{"et":"Nõustajad","en":"Advisors"},"path":"/advisors"},{"label":{"et":"Avaandmed","en":"Reports"},"path":"/reports"}]},{"id":"services","hidden":true,"label":{"et":"Teenused","en":"Services"},"path":"/services","children":[{"label":{"et":"Ülevaade","en":"Overview"},"path":"/overview"},{"label":{"et":"Uus teenus","en":"New Service"},"path":"/newService"},{"label":{"et":"Probleemsed teenused","en":"Faulty Services"},"path":"/faultyServices"}]},{"id":"settings","label":{"et":"Haldus","en":"Administration"},"path":"/settings","children":[{"label":{"et":"Kasutajad","en":"Users"},"path":"/users"},{"label":{"et":"Vestlusbot","en":"Chatbot"},"path":"/chatbot","children":[{"label":{"et":"Seaded","en":"Settings"},"path":"/chatbot/settings"},{"label":{"et":"Tervitussõnum","en":"Welcome message"},"path":"/chatbot/welcome-message"},{"label":{"et":"Välimus ja käitumine","en":"Appearance and behavior"},"path":"/chatbot/appearance"},{"label":{"et":"Erakorralised teated","en":"Emergency notices"},"path":"/chatbot/emergency-notices"}]},{"label":{"et":"Asutuse tööaeg","en":"Office opening hours"},"path":"/working-time"},{"label":{"et":"Sessiooni pikkus","en":"Session length"},"path":"/session-length"},{"label":{"et":"SKMi konfiguratsioon","en":"SKM Configuration"},"path":"/skm-configuration"},{"hidden": false,"label":{"et":"Multidomeenid","en":"Multi-Domains"},"path":"/multi-domains"},{"label":{"et":"Anonümiseerija","en":"Anonymizer"},"path":"/anonymizer"}]},{"id":"monitoring","hidden":true,"label":{"et":"Seire","en":"Monitoring"},"path":"/monitoring","children":[{"label":{"et":"Aktiivaeg","en":"Working hours"},"path":"/uptime"}]}] build: context: ./GUI dockerfile: Dockerfile.dev