@itleanchatbot/shared-models-js-postgres 1.4.91 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/package.json +6 -2
  2. package/src/migrations/2021050204551-create-extension-uuid-ossp.js +12 -0
  3. package/src/migrations/20210503140511-create-channel-types.js +56 -0
  4. package/src/migrations/20210503141113-create-channel-configurations.js +56 -0
  5. package/src/migrations/20210503141528-create-enterprises.js +47 -0
  6. package/src/migrations/20210503142049-create-permissions.js.js +44 -0
  7. package/src/migrations/20210503142205-create-profiles.js.js +33 -0
  8. package/src/migrations/20210503142259-create-profiles-permissions.js +45 -0
  9. package/src/migrations/20210503142433-create-system-users.js +61 -0
  10. package/src/migrations/20210503142528-create-system-users-profiles.js +45 -0
  11. package/src/migrations/20210503142645-create-departments.js +49 -0
  12. package/src/migrations/20210503142739-create-clients.js +44 -0
  13. package/src/migrations/20210503142857-create-intelligences.js +48 -0
  14. package/src/migrations/20210503142959-create-ibm-providers.js +71 -0
  15. package/src/migrations/20210503151909-create-itlean-providers.js +53 -0
  16. package/src/migrations/20210503154612-create-skills.js +114 -0
  17. package/src/migrations/20210503161006-create-files.js +53 -0
  18. package/src/migrations/20210503161236-create-channels.js +66 -0
  19. package/src/migrations/20210503161308-create-sessions.js +67 -0
  20. package/src/migrations/20210503161503-create-subdepartments.js +49 -0
  21. package/src/migrations/20210503161543-create-branches.js +53 -0
  22. package/src/migrations/20210503161909-create-lines.js +55 -0
  23. package/src/migrations/20210503161947-create-entities.js +56 -0
  24. package/src/migrations/20210503162126-create-intentions.js +56 -0
  25. package/src/migrations/20210503162213-create-intentions-values.js +51 -0
  26. package/src/migrations/20210503162618-create-entities-values.js +67 -0
  27. package/src/migrations/20210503162752-create-synonyms.js +71 -0
  28. package/src/migrations/20210503163331-create-responses.js +58 -0
  29. package/src/migrations/20210503163437-create-responses-boxes.js +66 -0
  30. package/src/migrations/20210503163702-create-languages.js +42 -0
  31. package/src/migrations/20210503184109-create-groups.js +53 -0
  32. package/src/migrations/20210503185846-create-contacts.js +55 -0
  33. package/src/migrations/20210503190220-create-groups-contacts.js +47 -0
  34. package/src/migrations/20210503190338-create-fields.js +40 -0
  35. package/src/migrations/20210503190515-create-apis.js +65 -0
  36. package/src/migrations/20210503191041-create-apis-resources-body.js +46 -0
  37. package/src/migrations/20210503191107-create-apis-resources.js +74 -0
  38. package/src/migrations/20210503191253-create-apis-resources-headers.js +53 -0
  39. package/src/migrations/20210503193228-create-apis-resources-query-string-params.js +61 -0
  40. package/src/migrations/20210503193425-create-apis-resources-path-params.js +52 -0
  41. package/src/migrations/20210503193511-create-dialog-nodes.js +121 -0
  42. package/src/migrations/20210503193629-create-response-dialog-nodes.js +46 -0
  43. package/src/migrations/20210503193905-create-system-users-lines.js +45 -0
  44. package/src/migrations/20210503194004-create-attendances.js +80 -0
  45. package/src/migrations/20210503194036-create-tranship-conversations.js +65 -0
  46. package/src/migrations/20210503194204-create-line-configurations.js +75 -0
  47. package/src/migrations/20210504133611-create-templates.js +68 -0
  48. package/src/migrations/20210504133647-create-socket-clients.js +73 -0
  49. package/src/migrations/20210504143703-create-dialog-nodes-multiple-responses.js +47 -0
  50. package/src/migrations/20210504144332-create-messages-hsm.js +72 -0
  51. package/src/migrations/20210504144657-create-dialog-nodes-api-resources.js +54 -0
  52. package/src/migrations/20210504144730-create-send-hsm.js +62 -0
  53. package/src/migrations/20210504144859-create-messages-hsm-channels.js +48 -0
  54. package/src/migrations/20210504144931-create-open-faqs.js +55 -0
  55. package/src/migrations/20210504145032-create-return-hsm.js +50 -0
  56. package/src/migrations/20210504160623-create-group-send-hsm.js +52 -0
  57. package/src/migrations/20210504164445-create-extension-unaccent.js +11 -0
  58. package/src/migrations/20210504164516-create-extension-fuzzy.js +11 -0
  59. package/src/migrations/20210504164553-create-attendance-scale.js +48 -0
  60. package/src/migrations/20210504164613-create-attendance-scale-off.js +58 -0
  61. package/src/migrations/20210504165351-create-comments.js +42 -0
  62. package/src/migrations/20210504165421-create-quick-messages.js +49 -0
  63. package/src/migrations/20210504165514-create-bot-iterables.js +60 -0
  64. package/src/migrations/20210504165900-create-tranship-triggers.js +114 -0
  65. package/src/migrations/20210505025504-create-send-hsm-return-hsm.js +34 -0
  66. package/src/migrations/20210507012938-create-faq-triggers.js +68 -0
  67. package/src/migrations/20210518122431-alter-responses.js +17 -0
  68. package/src/migrations/20210524150418-create-faq-questions.js +51 -0
  69. package/src/migrations/20210524173157-alter-table-open-faq.js +17 -0
  70. package/src/migrations/20210526115430-alter-attendances.js +14 -0
  71. package/src/migrations/20210528101030-alter-attendances.js +82 -0
  72. package/src/migrations/20210609103918-create-table-postbakGupshup.js +46 -0
  73. package/src/migrations/20210613125036-unnamed-migration.js +21 -0
  74. package/src/migrations/20210614194609-alter-channels.js +14 -0
  75. package/src/migrations/20210618101840-alter-table-MessagesHsms.js +14 -0
  76. package/src/migrations/20210622132643-alter-table-postbackGupshup.js +11 -0
  77. package/src/migrations/20210623110159-alter-table-botinterable.js +176 -0
  78. package/src/migrations/20210623180356-alter-dialog-nodes-api-resources.js +15 -0
  79. package/src/migrations/20210625165930-alter-dialog-nodes-api-resources.js +15 -0
  80. package/src/migrations/20210708142712-alter-table-entity-values.js +17 -0
  81. package/src/migrations/20210708145259-alter-table-synonyms.js +25 -0
  82. package/src/migrations/20210719161230-alter-attendances.js +14 -0
  83. package/src/migrations/20210727095921-alter-name-size.js +39 -0
  84. package/src/migrations/20210727110430-create-endSessionTriggers.js +71 -0
  85. package/src/migrations/20210728140327-create-table-online-editing.js +42 -0
  86. package/src/migrations/20210810152747-alter-botIterables.js +26 -0
  87. package/src/migrations/20210812110330-create-indexes.js +101 -0
  88. package/src/migrations/20210816124430-create-inactivityTriggers.js +60 -0
  89. package/src/migrations/20210819155330-create-function.js +123 -0
  90. package/src/migrations/20210823145424-remove-names-botiterables.js +74 -0
  91. package/src/migrations/20210902145430-create-apiKeys.js +40 -0
  92. package/src/migrations/20210906092430-create-customPostback.js +44 -0
  93. package/src/migrations/20210906144034-alter-api-body-migration.js +74 -0
  94. package/src/migrations/20210910081430-create-transhipInactivityTriggers.js +48 -0
  95. package/src/migrations/20210923131530-alter-attendances.js +14 -0
  96. package/src/migrations/20210923140130-create-function.js +85 -0
  97. package/src/migrations/20210927141630-alter-attendances.js +32 -0
  98. package/src/migrations/20211020130541-alter-table-session-hasTranship.js +14 -0
  99. package/src/migrations/20211025155825-create-stopwords.js +52 -0
  100. package/src/models/index.js +45 -0
  101. package/src/{stopwords.js → models/stopwords.js} +0 -6
  102. package/src/seeders/20210414180447-change-ChannelTypes.js +47 -0
  103. package/src/seeders/20210505130137-insert-channel-types.js +65 -0
  104. package/src/seeders/20210505132612-insert-intelligence.js +27 -0
  105. package/src/seeders/20210505134121-insert-enterprise.js +15 -0
  106. package/src/seeders/20210505134345-insert-permissions.js +125 -0
  107. package/src/seeders/20210505134549-insert-profiles.js +39 -0
  108. package/src/seeders/20210505134700-insert-profiles-permissions.js +80 -0
  109. package/src/seeders/20210505135931-insert-system-users.js +52 -0
  110. package/src/seeders/20210505140025-insert-system-users-profiles.js +26 -0
  111. package/src/seeders/20210505140049-insert-language.js +21 -0
  112. package/src/seeders/20210505140259-insert-itlean-provider.js +34 -0
  113. package/src/seeders/20210505140343-insert-templates.js +229 -0
  114. package/src/seeders/20210505140658-insert-channel-configurations.js +146 -0
  115. package/src/seeders/20210618132740-add-new-channel-configutations.js +45 -0
  116. package/src/seeders/20210817081230-insert-profiles-permissions.js +105 -0
  117. package/src/seeders/20210830131930-insert-profiles-permissions.js +71 -0
  118. package/src/seeders/20210902160430-insert-apiKey.js +30 -0
  119. package/src/seeders/20211005135921-edit-gupshup-reponseTypes.js +47 -0
  120. package/index.js +0 -125
  121. /package/src/{apiKeys.js → models/apiKeys.js} +0 -0
  122. /package/src/{apiResourceBodies.js → models/apiResourceBodies.js} +0 -0
  123. /package/src/{apiResourceHeaders.js → models/apiResourceHeaders.js} +0 -0
  124. /package/src/{apiResourcePathParams.js → models/apiResourcePathParams.js} +0 -0
  125. /package/src/{apiResourceQueryStringParams.js → models/apiResourceQueryStringParams.js} +0 -0
  126. /package/src/{apiResources.js → models/apiResources.js} +0 -0
  127. /package/src/{apis.js → models/apis.js} +0 -0
  128. /package/src/{attendanceScale.js → models/attendanceScale.js} +0 -0
  129. /package/src/{attendanceScaleOff.js → models/attendanceScaleOff.js} +0 -0
  130. /package/src/{attendances.js → models/attendances.js} +0 -0
  131. /package/src/{botIterable.js → models/botIterable.js} +0 -0
  132. /package/src/{branches.js → models/branches.js} +0 -0
  133. /package/src/{channelConfigurations.js → models/channelConfigurations.js} +0 -0
  134. /package/src/{channelTypes.js → models/channelTypes.js} +0 -0
  135. /package/src/{channels.js → models/channels.js} +0 -0
  136. /package/src/{client.js → models/client.js} +0 -0
  137. /package/src/{comments.js → models/comments.js} +0 -0
  138. /package/src/{customPostbacks.js → models/customPostbacks.js} +0 -0
  139. /package/src/{departments.js → models/departments.js} +0 -0
  140. /package/src/{dialogNodes.js → models/dialogNodes.js} +0 -0
  141. /package/src/{dialogNodes_MultipleResponses.js → models/dialogNodes_MultipleResponses.js} +0 -0
  142. /package/src/{dialogNodes_apiResources.js → models/dialogNodes_apiResources.js} +0 -0
  143. /package/src/{endSessionTriggers.js → models/endSessionTriggers.js} +0 -0
  144. /package/src/{enterprises.js → models/enterprises.js} +0 -0
  145. /package/src/{entity.js → models/entity.js} +0 -0
  146. /package/src/{entityValues.js → models/entityValues.js} +0 -0
  147. /package/src/{faqQuestions.js → models/faqQuestions.js} +0 -0
  148. /package/src/{faqTriggers.js → models/faqTriggers.js} +0 -0
  149. /package/src/{files.js → models/files.js} +0 -0
  150. /package/src/{ibmProvider.js → models/ibmProvider.js} +0 -0
  151. /package/src/{inactivityTriggers.js → models/inactivityTriggers.js} +0 -0
  152. /package/src/{intelligence.js → models/intelligence.js} +0 -0
  153. /package/src/{intention.js → models/intention.js} +0 -0
  154. /package/src/{intentionValue.js → models/intentionValue.js} +0 -0
  155. /package/src/{itleanProvider.js → models/itleanProvider.js} +0 -0
  156. /package/src/{lineConfigurations.js → models/lineConfigurations.js} +0 -0
  157. /package/src/{lines.js → models/lines.js} +0 -0
  158. /package/src/{messagesHsm.js → models/messagesHsm.js} +0 -0
  159. /package/src/{openFaqs.js → models/openFaqs.js} +0 -0
  160. /package/src/{permissions.js → models/permissions.js} +0 -0
  161. /package/src/{postbackGupshup.js → models/postbackGupshup.js} +0 -0
  162. /package/src/{profile.js → models/profile.js} +0 -0
  163. /package/src/{profiles_permission.js → models/profiles_permission.js} +0 -0
  164. /package/src/{quickMessages.js → models/quickMessages.js} +0 -0
  165. /package/src/{response_DialogNodes.js → models/response_DialogNodes.js} +0 -0
  166. /package/src/{responses.js → models/responses.js} +0 -0
  167. /package/src/{responsesBoxes.js → models/responsesBoxes.js} +0 -0
  168. /package/src/{returnHsm.js → models/returnHsm.js} +0 -0
  169. /package/src/{sessions.js → models/sessions.js} +0 -0
  170. /package/src/{skill.js → models/skill.js} +0 -0
  171. /package/src/{socketClients.js → models/socketClients.js} +0 -0
  172. /package/src/{subDepartments.js → models/subDepartments.js} +0 -0
  173. /package/src/{synonyms.js → models/synonyms.js} +0 -0
  174. /package/src/{systemUsers.js → models/systemUsers.js} +0 -0
  175. /package/src/{systemUsers_Lines.js → models/systemUsers_Lines.js} +0 -0
  176. /package/src/{systemUsers_profiles.js → models/systemUsers_profiles.js} +0 -0
  177. /package/src/{templates.js → models/templates.js} +0 -0
  178. /package/src/{transhipConversations.js → models/transhipConversations.js} +0 -0
  179. /package/src/{transhipInactivityTriggers.js → models/transhipInactivityTriggers.js} +0 -0
  180. /package/src/{transhipTriggers.js → models/transhipTriggers.js} +0 -0
@@ -0,0 +1,123 @@
1
+ 'use strict'
2
+
3
+ module.exports = {
4
+ up: async (queryInterface, Sequelize) => {
5
+ await queryInterface.addIndex('BotIterables', {
6
+ fields: [
7
+ {
8
+ attribute: 'SessionId',
9
+ },
10
+ {
11
+ attribute: 'createdAt',
12
+ order: 'DESC',
13
+ },
14
+ ],
15
+ })
16
+
17
+ await queryInterface.addIndex('InactivityTriggers', ['SkillId', 'order'])
18
+
19
+ await queryInterface.addIndex('Sessions', ['ChannelId'])
20
+
21
+ await queryInterface.addIndex('Sessions', ['ClientId'])
22
+
23
+ await queryInterface.sequelize.query(
24
+ `
25
+ CREATE OR REPLACE FUNCTION get_inactive_sessions(first_call boolean, records_per_page int, starter_page int, maximun int, current_page int DEFAULT 1)
26
+ RETURNS TABLE ("id" uuid) AS $$
27
+ declare r RECORD;
28
+ declare last_iterable "BotIterables"%ROWTYPE;
29
+ declare min_diff INT;
30
+ declare counter INT := 0;
31
+ BEGIN
32
+
33
+ IF ((records_per_page * current_page) > maximun) THEN
34
+ RETURN;
35
+ END IF;
36
+
37
+ IF (first_call) THEN
38
+ DROP TABLE IF EXISTS _tmp_get_inactive_sessions;
39
+ CREATE TEMPORARY TABLE _tmp_get_inactive_sessions (
40
+ "id" uuid
41
+ );
42
+ END IF;
43
+
44
+ FOR r IN (
45
+ select "Sessions"."id",
46
+ "InactivityTriggers"."min"
47
+ from "Sessions"
48
+ inner join "Clients"
49
+ on "Clients"."id" = "Sessions"."ClientId"
50
+ inner join "Channels"
51
+ on "Channels"."id" = "Sessions"."ChannelId"
52
+ inner join "ChannelTypes"
53
+ on "ChannelTypes"."id" = "Channels"."ChannelTypeId"
54
+ inner join "InactivityTriggers"
55
+ on "InactivityTriggers"."SkillId" = "Channels"."SkillId"
56
+ and "InactivityTriggers"."order" = "Sessions"."inactivityCounter"
57
+ where "Sessions"."status" = 'open'
58
+ and "Sessions"."tranship" = false
59
+ order by "Sessions"."createdAt"
60
+ limit records_per_page
61
+ offset ((starter_page - 1)*records_per_page)
62
+ ) LOOP
63
+
64
+ select * into last_iterable
65
+ from "BotIterables"
66
+ where "BotIterables"."SessionId" = r."id"
67
+ order by "BotIterables"."createdAt" DESC
68
+ limit 1;
69
+
70
+ min_diff := (
71
+ (SELECT DATE_PART('day', current_timestamp - last_iterable."createdAt") * 24 * 60) +
72
+ (SELECT DATE_PART('hour', current_timestamp - last_iterable."createdAt") * 60) +
73
+ (SELECT DATE_PART('minute', current_timestamp - last_iterable."createdAt"))
74
+ );
75
+
76
+ IF (last_iterable."action" = 'bot' and min_diff >= r."min") THEN
77
+
78
+ INSERT INTO _tmp_get_inactive_sessions ("id")
79
+ VALUES (r."id");
80
+
81
+ END IF;
82
+
83
+ counter := counter + 1;
84
+
85
+ END LOOP;
86
+
87
+ IF (counter = records_per_page) THEN
88
+ PERFORM get_inactive_sessions(false, records_per_page, starter_page + 1, maximun, current_page + 1);
89
+ END IF;
90
+
91
+ RETURN QUERY
92
+ SELECT * FROM _tmp_get_inactive_sessions;
93
+
94
+ END;
95
+ $$ LANGUAGE plpgsql;
96
+ `
97
+ )
98
+ },
99
+
100
+ down: async (queryInterface, Sequelize) => {
101
+ await queryInterface.sequelize.query(
102
+ `DROP FUNCTION get_inactive_sessions(first_call boolean, records_per_page int, starter_page int, maximun int, current_page int)`
103
+ )
104
+
105
+ await queryInterface.removeIndex('BotIterables', {
106
+ fields: [
107
+ {
108
+ attribute: 'SessionId',
109
+ },
110
+ {
111
+ attribute: 'createdAt',
112
+ order: 'DESC',
113
+ },
114
+ ],
115
+ })
116
+
117
+ await queryInterface.removeIndex('InactivityTriggers', ['SkillId', 'order'])
118
+
119
+ await queryInterface.removeIndex('Sessions', ['ChannelId'])
120
+
121
+ await queryInterface.removeIndex('Sessions', ['ClientId'])
122
+ },
123
+ }
@@ -0,0 +1,74 @@
1
+ 'use strict'
2
+
3
+ module.exports = {
4
+ up: async (queryInterface, Sequelize) => {
5
+ await queryInterface.removeColumn('BotIterables', 'responseName')
6
+ await queryInterface.removeColumn('BotIterables', 'openFaqName')
7
+ await queryInterface.removeColumn('BotIterables', 'dialogNodeName')
8
+
9
+ await queryInterface.changeColumn('BotIterables', 'ResponseId', {
10
+ type: Sequelize.UUID,
11
+ references: {
12
+ model: 'Responses',
13
+ key: 'id',
14
+ },
15
+ allowNull: true,
16
+ onDelete: 'SET NULL',
17
+ })
18
+
19
+ await queryInterface.changeColumn('BotIterables', 'OpenFAQId', {
20
+ type: Sequelize.UUID,
21
+ references: {
22
+ model: 'OpenFAQs',
23
+ key: 'id',
24
+ },
25
+ allowNull: true,
26
+ onDelete: 'SET NULL',
27
+ })
28
+
29
+ await queryInterface.changeColumn('BotIterables', 'DialogNodeId', {
30
+ type: Sequelize.UUID,
31
+ references: {
32
+ model: 'DialogNodes',
33
+ key: 'id',
34
+ },
35
+ allowNull: true,
36
+ onDelete: 'SET NULL',
37
+ })
38
+
39
+ await queryInterface.changeColumn('BotIterables', 'EntityId', {
40
+ type: Sequelize.UUID,
41
+ references: {
42
+ model: 'Entities',
43
+ key: 'id',
44
+ },
45
+ allowNull: true,
46
+ onDelete: 'SET NULL',
47
+ })
48
+
49
+ await queryInterface.changeColumn('BotIterables', 'IntentionId', {
50
+ type: Sequelize.UUID,
51
+ references: {
52
+ model: 'Intentions',
53
+ key: 'id',
54
+ },
55
+ allowNull: true,
56
+ onDelete: 'SET NULL',
57
+ })
58
+ },
59
+
60
+ down: async (queryInterface, Sequelize) => {
61
+ await queryInterface.addColumn('BotIterables', 'responseName', {
62
+ type: Sequelize.STRING(255),
63
+ allowNull: true,
64
+ })
65
+ await queryInterface.addColumn('BotIterables', 'openFaqName', {
66
+ type: Sequelize.STRING(255),
67
+ allowNull: true,
68
+ })
69
+ await queryInterface.addColumn('BotIterables', 'dialogNodeName', {
70
+ type: Sequelize.STRING(255),
71
+ allowNull: true,
72
+ })
73
+ },
74
+ }
@@ -0,0 +1,40 @@
1
+ 'use strict'
2
+
3
+ module.exports = {
4
+ up: async (queryInterface, Sequelize) => {
5
+ await queryInterface.createTable('ApiKeys', {
6
+ id: {
7
+ allowNull: false,
8
+ defaultValue: Sequelize.literal('uuid_generate_v4()'),
9
+ primaryKey: true,
10
+ type: Sequelize.UUID,
11
+ },
12
+ EnterpriseId: {
13
+ allowNull: false,
14
+ type: Sequelize.UUID,
15
+ references: {
16
+ model: 'Enterprises',
17
+ key: 'id',
18
+ },
19
+ onDelete: 'RESTRICT',
20
+ onUpdate: 'CASCADE',
21
+ },
22
+ key: {
23
+ allowNull: false,
24
+ type: Sequelize.STRING(255),
25
+ },
26
+ createdAt: {
27
+ allowNull: false,
28
+ type: Sequelize.DATE,
29
+ },
30
+ updatedAt: {
31
+ allowNull: false,
32
+ type: Sequelize.DATE,
33
+ },
34
+ })
35
+ },
36
+
37
+ down: async (queryInterface, Sequelize) => {
38
+ await queryInterface.dropTable('ApiKeys')
39
+ },
40
+ }
@@ -0,0 +1,44 @@
1
+ 'use strict'
2
+
3
+ module.exports = {
4
+ up: async (queryInterface, Sequelize) => {
5
+ await queryInterface.createTable('CustomPostbacks', {
6
+ id: {
7
+ allowNull: false,
8
+ defaultValue: Sequelize.literal('uuid_generate_v4()'),
9
+ primaryKey: true,
10
+ type: Sequelize.UUID,
11
+ },
12
+ EnterpriseId: {
13
+ allowNull: false,
14
+ type: Sequelize.UUID,
15
+ references: {
16
+ model: 'Enterprises',
17
+ key: 'id',
18
+ },
19
+ onDelete: 'RESTRICT',
20
+ onUpdate: 'CASCADE',
21
+ },
22
+ url: {
23
+ allowNull: false,
24
+ type: Sequelize.STRING(255),
25
+ },
26
+ headers: {
27
+ allowNull: true,
28
+ type: Sequelize.JSON,
29
+ },
30
+ createdAt: {
31
+ allowNull: false,
32
+ type: Sequelize.DATE,
33
+ },
34
+ updatedAt: {
35
+ allowNull: false,
36
+ type: Sequelize.DATE,
37
+ },
38
+ })
39
+ },
40
+
41
+ down: async (queryInterface, Sequelize) => {
42
+ await queryInterface.dropTable('CustomPostbacks')
43
+ },
44
+ }
@@ -0,0 +1,74 @@
1
+ 'use strict'
2
+
3
+ const {
4
+ apiResourceBodies: { APIS_RESOURCES_BODY_TYPES },
5
+ } = require('@itleanchatbot/shared-models-js-postgres')
6
+
7
+ const oldEnumString = `'${APIS_RESOURCES_BODY_TYPES.JSON}', '${APIS_RESOURCES_BODY_TYPES.TEXT}', '${APIS_RESOURCES_BODY_TYPES.XML}', '${APIS_RESOURCES_BODY_TYPES.HTML}'`
8
+ const newEnumString = `'${APIS_RESOURCES_BODY_TYPES.JSON}', '${APIS_RESOURCES_BODY_TYPES.TEXT}', '${APIS_RESOURCES_BODY_TYPES.XML}', '${APIS_RESOURCES_BODY_TYPES.HTML}', '${APIS_RESOURCES_BODY_TYPES.URL_ENCODE}'`
9
+
10
+ const replaceEnum = async (replaceTo, queryInterface) => {
11
+ const transaction = await queryInterface.sequelize.transaction()
12
+ try {
13
+ await queryInterface.sequelize.query(
14
+ `
15
+ CREATE TYPE "enum_ApiResourcesBodies_type_new"
16
+ AS ENUM (${replaceTo})
17
+ `,
18
+ { transaction }
19
+ )
20
+ await queryInterface.sequelize.query(
21
+ `
22
+ ALTER TABLE "ApiResourcesBodies"
23
+ ALTER COLUMN "type"
24
+ DROP DEFAULT
25
+ `,
26
+ { transaction }
27
+ )
28
+ await queryInterface.sequelize.query(
29
+ `
30
+ ALTER TABLE "ApiResourcesBodies"
31
+ ALTER COLUMN "type"
32
+ TYPE "enum_ApiResourcesBodies_type_new"
33
+ USING ("type"::text::"enum_ApiResourcesBodies_type_new")
34
+ `,
35
+ { transaction }
36
+ )
37
+ await queryInterface.sequelize.query(
38
+ `
39
+ DROP TYPE "enum_ApiResourcesBodies_type"
40
+ `,
41
+ { transaction }
42
+ )
43
+ await queryInterface.sequelize.query(
44
+ `
45
+ ALTER TYPE "enum_ApiResourcesBodies_type_new"
46
+ RENAME TO "enum_ApiResourcesBodies_type"
47
+ `,
48
+ { transaction }
49
+ )
50
+ await queryInterface.sequelize.query(
51
+ `
52
+ ALTER TABLE "ApiResourcesBodies"
53
+ ALTER COLUMN "type"
54
+ SET DEFAULT 'json'::"enum_ApiResourcesBodies_type"
55
+ `,
56
+ { transaction }
57
+ )
58
+ await transaction.commit()
59
+ } catch (error) {
60
+ console.error(error)
61
+ transaction.rollback()
62
+ throw error
63
+ }
64
+ }
65
+
66
+ module.exports = {
67
+ up: async (queryInterface) => {
68
+ await replaceEnum(newEnumString, queryInterface)
69
+ },
70
+
71
+ down: async (queryInterface) => {
72
+ await replaceEnum(oldEnumString, queryInterface)
73
+ },
74
+ }
@@ -0,0 +1,48 @@
1
+ 'use strict'
2
+
3
+ module.exports = {
4
+ up: async (queryInterface, Sequelize) => {
5
+ await queryInterface.createTable('TranshipInactivityTriggers', {
6
+ id: {
7
+ allowNull: false,
8
+ defaultValue: Sequelize.literal('uuid_generate_v4()'),
9
+ primaryKey: true,
10
+ type: Sequelize.UUID,
11
+ },
12
+ LineId: {
13
+ allowNull: false,
14
+ type: Sequelize.UUID,
15
+ references: {
16
+ model: 'Lines',
17
+ key: 'id',
18
+ },
19
+ onDelete: 'SET NULL',
20
+ onUpdate: 'CASCADE',
21
+ },
22
+ min: {
23
+ allowNull: false,
24
+ type: Sequelize.INTEGER,
25
+ },
26
+ response: {
27
+ allowNull: false,
28
+ type: Sequelize.TEXT,
29
+ },
30
+ order: {
31
+ allowNull: false,
32
+ type: Sequelize.INTEGER,
33
+ },
34
+ createdAt: {
35
+ allowNull: false,
36
+ type: Sequelize.DATE,
37
+ },
38
+ updatedAt: {
39
+ allowNull: false,
40
+ type: Sequelize.DATE,
41
+ },
42
+ })
43
+ },
44
+
45
+ down: async (queryInterface, Sequelize) => {
46
+ await queryInterface.dropTable('TranshipInactivityTriggers')
47
+ },
48
+ }
@@ -0,0 +1,14 @@
1
+ 'use strict'
2
+
3
+ module.exports = {
4
+ up: async (queryInterface, Sequelize) => {
5
+ await queryInterface.addColumn('Attendances', 'inactivityCounter', {
6
+ type: Sequelize.INTEGER,
7
+ allowNull: true,
8
+ })
9
+ },
10
+
11
+ down: async (queryInterface, Sequelize) => {
12
+ await queryInterface.removeColumn('Attendances', 'inactivityCounter')
13
+ },
14
+ }
@@ -0,0 +1,85 @@
1
+ 'use strict'
2
+
3
+ module.exports = {
4
+ up: async (queryInterface, Sequelize) => {
5
+ await queryInterface.sequelize.query(
6
+ `
7
+ CREATE OR REPLACE FUNCTION get_inactive_attendances(first_call boolean, records_per_page int, starter_page int, maximun int, current_page int DEFAULT 1)
8
+ RETURNS TABLE ("id" uuid) AS $$
9
+ declare r RECORD;
10
+ declare last_iterable "TranshipConversations"%ROWTYPE;
11
+ declare min_diff INT;
12
+ declare counter INT := 0;
13
+ BEGIN
14
+
15
+ IF ((records_per_page * current_page) > maximun) THEN
16
+ RETURN;
17
+ END IF;
18
+
19
+ IF (first_call) THEN
20
+ DROP TABLE IF EXISTS _tmp_get_inactive_attendances;
21
+ CREATE TEMPORARY TABLE _tmp_get_inactive_attendances (
22
+ "id" uuid
23
+ );
24
+ END IF;
25
+
26
+ FOR r IN (
27
+ select "Sessions"."id",
28
+ "Attendances"."id" as "AttendanceId",
29
+ "TranshipInactivityTriggers"."min"
30
+ from "Sessions"
31
+ inner join "Attendances"
32
+ on "Attendances"."SessionId" = "Sessions"."id"
33
+ and "Attendances"."status" = 'started'
34
+ inner join "TranshipInactivityTriggers"
35
+ on "Attendances"."LineId" = "TranshipInactivityTriggers"."LineId"
36
+ and "TranshipInactivityTriggers"."order" = "Attendances"."inactivityCounter"
37
+ where "Sessions"."tranship" = true
38
+ and "Sessions"."status" = 'open'
39
+ order by "Sessions"."createdAt"
40
+ limit records_per_page
41
+ offset ((starter_page - 1)*records_per_page)
42
+ ) LOOP
43
+
44
+ select * into last_iterable
45
+ from "TranshipConversations"
46
+ where "TranshipConversations"."AttendanceId" = r."AttendanceId"
47
+ order by "TranshipConversations"."createdAt" DESC
48
+ limit 1;
49
+
50
+ min_diff := (
51
+ (SELECT DATE_PART('day', current_timestamp - last_iterable."createdAt") * 24 * 60) +
52
+ (SELECT DATE_PART('hour', current_timestamp - last_iterable."createdAt") * 60) +
53
+ (SELECT DATE_PART('minute', current_timestamp - last_iterable."createdAt"))
54
+ );
55
+
56
+ IF (last_iterable."action" = 'tranship' and min_diff >= r."min") THEN
57
+
58
+ INSERT INTO _tmp_get_inactive_attendances ("id")
59
+ VALUES (r."id");
60
+
61
+ END IF;
62
+
63
+ counter := counter + 1;
64
+
65
+ END LOOP;
66
+
67
+ IF (counter = records_per_page) THEN
68
+ PERFORM get_inactive_attendances(false, records_per_page, starter_page + 1, maximun, current_page + 1);
69
+ END IF;
70
+
71
+ RETURN QUERY
72
+ SELECT * FROM _tmp_get_inactive_attendances;
73
+
74
+ END;
75
+ $$ LANGUAGE plpgsql;
76
+ `
77
+ )
78
+ },
79
+
80
+ down: async (queryInterface, Sequelize) => {
81
+ await queryInterface.sequelize.query(
82
+ `DROP FUNCTION get_inactive_attendances(first_call boolean, records_per_page int, starter_page int, maximun int, current_page int)`
83
+ )
84
+ },
85
+ }
@@ -0,0 +1,32 @@
1
+ 'use strict'
2
+
3
+ const { replaceEnum } = require('../../presenters/database/migrationHelpers')
4
+
5
+ module.exports = {
6
+ up: async (queryInterface, Sequelize) => {
7
+ await replaceEnum(
8
+ queryInterface,
9
+ 'Attendances',
10
+ 'status',
11
+ 'waiting',
12
+ 'started',
13
+ 'closed',
14
+ 'transfered',
15
+ 'abandoned',
16
+ 'inactive'
17
+ )
18
+ },
19
+
20
+ down: async (queryInterface, Sequelize) => {
21
+ await replaceEnum(
22
+ queryInterface,
23
+ 'Attendances',
24
+ 'status',
25
+ 'waiting',
26
+ 'started',
27
+ 'closed',
28
+ 'transfered',
29
+ 'abandoned'
30
+ )
31
+ },
32
+ }
@@ -0,0 +1,14 @@
1
+ 'use strict'
2
+
3
+ module.exports = {
4
+ up: async (queryInterface, Sequelize) => {
5
+ await queryInterface.addColumn('Sessions', 'hasTranshipment', {
6
+ type: Sequelize.BOOLEAN,
7
+ defaultValue: false,
8
+ allowNull: false,
9
+ })
10
+ },
11
+ down: async (queryInterface) => {
12
+ await queryInterface.removeColumn('Sessions', 'hasTranshipment')
13
+ },
14
+ }
@@ -0,0 +1,52 @@
1
+ 'use strict'
2
+
3
+ const models = require('./../models')
4
+
5
+ module.exports = {
6
+ up: async (queryInterface, Sequelize) => {
7
+ await queryInterface.createTable('Stopwords', {
8
+ id: {
9
+ allowNull: false,
10
+ defaultValue: Sequelize.literal('uuid_generate_v4()'),
11
+ primaryKey: true,
12
+ type: Sequelize.UUID,
13
+ },
14
+ SkillId: {
15
+ allowNull: true,
16
+ type: Sequelize.UUID,
17
+ references: {
18
+ model: 'Skills',
19
+ key: 'id',
20
+ },
21
+ onDelete: 'SET NULL',
22
+ onUpdate: 'CASCADE',
23
+ },
24
+ EnterpriseId: {
25
+ allowNull: true,
26
+ type: Sequelize.UUID,
27
+ references: {
28
+ model: 'Enterprises',
29
+ key: 'id',
30
+ },
31
+ onDelete: 'SET NULL',
32
+ onUpdate: 'CASCADE',
33
+ },
34
+ words: {
35
+ allowNull: false,
36
+ type: Sequelize.ARRAY(Sequelize.STRING),
37
+ },
38
+ createdAt: {
39
+ allowNull: false,
40
+ type: Sequelize.DATE,
41
+ },
42
+ updatedAt: {
43
+ allowNull: false,
44
+ type: Sequelize.DATE,
45
+ },
46
+ })
47
+ },
48
+
49
+ down: async (queryInterface) => {
50
+ await queryInterface.dropTable('Stopwords')
51
+ },
52
+ }
@@ -0,0 +1,45 @@
1
+ const fs = require('fs')
2
+ const path = require('path')
3
+ const Sequelize = require('sequelize')
4
+ const basename = path.basename(__filename)
5
+
6
+ module.exports = (config) => {
7
+ const db = {}
8
+ let sequelize
9
+
10
+ if (config.use_env_variable) {
11
+ sequelize = new Sequelize(process.env[config.use_env_variable], config)
12
+ } else {
13
+ sequelize = new Sequelize(
14
+ config.database,
15
+ config.username,
16
+ config.password,
17
+ config
18
+ )
19
+ }
20
+
21
+ fs.readdirSync(__dirname)
22
+ .filter((file) => {
23
+ return (
24
+ file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js'
25
+ )
26
+ })
27
+ .forEach((file) => {
28
+ const model = require(path.join(__dirname, file))(
29
+ sequelize,
30
+ Sequelize.DataTypes
31
+ )
32
+ db[model.name] = model
33
+ })
34
+
35
+ Object.keys(db).forEach((modelName) => {
36
+ if (db[modelName].associate) {
37
+ db[modelName].associate(db)
38
+ }
39
+ })
40
+
41
+ db.sequelize = sequelize
42
+ db.Sequelize = Sequelize
43
+
44
+ return db
45
+ }
@@ -1,12 +1,6 @@
1
1
 
2
2
  const StopwordsModel = (sequelize, types) => {
3
3
  const Stopwords = sequelize.define('Stopwords', {
4
- id: {
5
- allowNull: false,
6
- defaultValue: types.UUID,
7
- primaryKey: true,
8
- type: types.UUID,
9
- },
10
4
  SkillId: {
11
5
  allowNull: true,
12
6
  type: types.UUID,