@hed-hog/ticket 0.0.285
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.
- package/README.md +480 -0
- package/dist/dto/assign-ticket-owner.dto.d.ts +4 -0
- package/dist/dto/assign-ticket-owner.dto.d.ts.map +1 -0
- package/dist/dto/assign-ticket-owner.dto.js +7 -0
- package/dist/dto/assign-ticket-owner.dto.js.map +1 -0
- package/dist/dto/create-ticket-channel-account.dto.d.ts +10 -0
- package/dist/dto/create-ticket-channel-account.dto.d.ts.map +1 -0
- package/dist/dto/create-ticket-channel-account.dto.js +7 -0
- package/dist/dto/create-ticket-channel-account.dto.js.map +1 -0
- package/dist/dto/create-ticket-channel.dto.d.ts +7 -0
- package/dist/dto/create-ticket-channel.dto.d.ts.map +1 -0
- package/dist/dto/create-ticket-channel.dto.js +7 -0
- package/dist/dto/create-ticket-channel.dto.js.map +1 -0
- package/dist/dto/create-ticket-internal-note.dto.d.ts +4 -0
- package/dist/dto/create-ticket-internal-note.dto.d.ts.map +1 -0
- package/dist/dto/create-ticket-internal-note.dto.js +7 -0
- package/dist/dto/create-ticket-internal-note.dto.js.map +1 -0
- package/dist/dto/create-ticket-reply.dto.d.ts +5 -0
- package/dist/dto/create-ticket-reply.dto.d.ts.map +1 -0
- package/dist/dto/create-ticket-reply.dto.js +7 -0
- package/dist/dto/create-ticket-reply.dto.js.map +1 -0
- package/dist/dto/update-ticket-channel-account.dto.d.ts +8 -0
- package/dist/dto/update-ticket-channel-account.dto.d.ts.map +1 -0
- package/dist/dto/update-ticket-channel-account.dto.js +7 -0
- package/dist/dto/update-ticket-channel-account.dto.js.map +1 -0
- package/dist/dto/update-ticket-channel.dto.d.ts +5 -0
- package/dist/dto/update-ticket-channel.dto.d.ts.map +1 -0
- package/dist/dto/update-ticket-channel.dto.js +7 -0
- package/dist/dto/update-ticket-channel.dto.js.map +1 -0
- package/dist/dto/update-ticket-priority.dto.d.ts +4 -0
- package/dist/dto/update-ticket-priority.dto.d.ts.map +1 -0
- package/dist/dto/update-ticket-priority.dto.js +7 -0
- package/dist/dto/update-ticket-priority.dto.js.map +1 -0
- package/dist/dto/update-ticket-settings.dto.d.ts +13 -0
- package/dist/dto/update-ticket-settings.dto.d.ts.map +1 -0
- package/dist/dto/update-ticket-settings.dto.js +7 -0
- package/dist/dto/update-ticket-settings.dto.js.map +1 -0
- package/dist/dto/update-ticket-status.dto.d.ts +4 -0
- package/dist/dto/update-ticket-status.dto.d.ts.map +1 -0
- package/dist/dto/update-ticket-status.dto.js +7 -0
- package/dist/dto/update-ticket-status.dto.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/ticket-ai-review.controller.d.ts +9 -0
- package/dist/ticket-ai-review.controller.d.ts.map +1 -0
- package/dist/ticket-ai-review.controller.js +36 -0
- package/dist/ticket-ai-review.controller.js.map +1 -0
- package/dist/ticket-channel-accounts.controller.d.ts +24 -0
- package/dist/ticket-channel-accounts.controller.d.ts.map +1 -0
- package/dist/ticket-channel-accounts.controller.js +72 -0
- package/dist/ticket-channel-accounts.controller.js.map +1 -0
- package/dist/ticket-channels.controller.d.ts +21 -0
- package/dist/ticket-channels.controller.d.ts.map +1 -0
- package/dist/ticket-channels.controller.js +72 -0
- package/dist/ticket-channels.controller.js.map +1 -0
- package/dist/ticket-data.controller.d.ts +24 -0
- package/dist/ticket-data.controller.d.ts.map +1 -0
- package/dist/ticket-data.controller.js +81 -0
- package/dist/ticket-data.controller.js.map +1 -0
- package/dist/ticket-items.controller.d.ts +35 -0
- package/dist/ticket-items.controller.d.ts.map +1 -0
- package/dist/ticket-items.controller.js +100 -0
- package/dist/ticket-items.controller.js.map +1 -0
- package/dist/ticket-settings.controller.d.ts +11 -0
- package/dist/ticket-settings.controller.d.ts.map +1 -0
- package/dist/ticket-settings.controller.js +50 -0
- package/dist/ticket-settings.controller.js.map +1 -0
- package/dist/ticket.module.d.ts +3 -0
- package/dist/ticket.module.d.ts.map +1 -0
- package/dist/ticket.module.js +45 -0
- package/dist/ticket.module.js.map +1 -0
- package/dist/ticket.service.d.ts +88 -0
- package/dist/ticket.service.d.ts.map +1 -0
- package/dist/ticket.service.js +83 -0
- package/dist/ticket.service.js.map +1 -0
- package/hedhog/data/menu.yaml +164 -0
- package/hedhog/data/role.yaml +23 -0
- package/hedhog/data/route.yaml +225 -0
- package/hedhog/data/setting_group.yaml +574 -0
- package/hedhog/frontend/app/[id]/page.tsx.ejs +360 -0
- package/hedhog/frontend/app/_components/ai-draft-editor-dialog.tsx.ejs +67 -0
- package/hedhog/frontend/app/_components/ticket-badges.tsx.ejs +65 -0
- package/hedhog/frontend/app/_components/ticket-context-card.tsx.ejs +80 -0
- package/hedhog/frontend/app/_components/ticket-timeline.tsx.ejs +59 -0
- package/hedhog/frontend/app/_lib/mock-data.ts.ejs +474 -0
- package/hedhog/frontend/app/_lib/types.ts.ejs +134 -0
- package/hedhog/frontend/app/ai-review/page.tsx.ejs +205 -0
- package/hedhog/frontend/app/channel-accounts/page.tsx.ejs +476 -0
- package/hedhog/frontend/app/channels/page.tsx.ejs +406 -0
- package/hedhog/frontend/app/dashboard/page.tsx.ejs +178 -0
- package/hedhog/frontend/app/inbox/page.tsx.ejs +500 -0
- package/hedhog/frontend/app/page.tsx.ejs +5 -0
- package/hedhog/frontend/app/reports/page.tsx.ejs +151 -0
- package/hedhog/frontend/app/roles/page.tsx.ejs +110 -0
- package/hedhog/frontend/app/settings/page.tsx.ejs +484 -0
- package/hedhog/frontend/messages/en.json +412 -0
- package/hedhog/frontend/messages/pt.json +412 -0
- package/hedhog/table/channel.yaml +23 -0
- package/hedhog/table/channel_account.yaml +34 -0
- package/hedhog/table/ticket.yaml +73 -0
- package/hedhog/table/ticket_ai_draft.yaml +51 -0
- package/hedhog/table/ticket_attachment.yaml +40 -0
- package/hedhog/table/ticket_category.yaml +22 -0
- package/hedhog/table/ticket_context.yaml +64 -0
- package/hedhog/table/ticket_message.yaml +49 -0
- package/hedhog/table/ticket_message_source.yaml +50 -0
- package/hedhog/table/ticket_metadata.yaml +21 -0
- package/hedhog/table/ticket_participant.yaml +25 -0
- package/hedhog/table/ticket_source.yaml +43 -0
- package/hedhog/table/ticket_tag.yaml +22 -0
- package/package.json +40 -0
- package/src/dto/assign-ticket-owner.dto.ts +3 -0
- package/src/dto/create-ticket-channel-account.dto.ts +9 -0
- package/src/dto/create-ticket-channel.dto.ts +6 -0
- package/src/dto/create-ticket-internal-note.dto.ts +3 -0
- package/src/dto/create-ticket-reply.dto.ts +4 -0
- package/src/dto/update-ticket-channel-account.dto.ts +7 -0
- package/src/dto/update-ticket-channel.dto.ts +4 -0
- package/src/dto/update-ticket-priority.dto.ts +3 -0
- package/src/dto/update-ticket-settings.dto.ts +12 -0
- package/src/dto/update-ticket-status.dto.ts +3 -0
- package/src/index.ts +19 -0
- package/src/language/en.json +8 -0
- package/src/language/pt.json +8 -0
- package/src/ticket-ai-review.controller.ts +14 -0
- package/src/ticket-channel-accounts.controller.ts +34 -0
- package/src/ticket-channels.controller.ts +31 -0
- package/src/ticket-data.controller.ts +39 -0
- package/src/ticket-items.controller.ts +56 -0
- package/src/ticket-settings.controller.ts +20 -0
- package/src/ticket.module.ts +32 -0
- package/src/ticket.service.ts +102 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: ticket_id
|
|
4
|
+
type: fk
|
|
5
|
+
references:
|
|
6
|
+
table: ticket
|
|
7
|
+
column: id
|
|
8
|
+
onDelete: CASCADE
|
|
9
|
+
- name: channel_account_id
|
|
10
|
+
type: fk
|
|
11
|
+
isNullable: true
|
|
12
|
+
references:
|
|
13
|
+
table: channel_account
|
|
14
|
+
column: id
|
|
15
|
+
onDelete: SET NULL
|
|
16
|
+
- name: context_type
|
|
17
|
+
type: enum
|
|
18
|
+
values: [course_lesson, course, video, page, email_thread, whatsapp_chat, contact_form, other]
|
|
19
|
+
- name: external_context_id
|
|
20
|
+
type: varchar
|
|
21
|
+
length: 255
|
|
22
|
+
isNullable: true
|
|
23
|
+
- name: external_url
|
|
24
|
+
type: varchar
|
|
25
|
+
length: 500
|
|
26
|
+
isNullable: true
|
|
27
|
+
- name: course_name
|
|
28
|
+
type: varchar
|
|
29
|
+
length: 180
|
|
30
|
+
isNullable: true
|
|
31
|
+
- name: section_name
|
|
32
|
+
type: varchar
|
|
33
|
+
length: 180
|
|
34
|
+
isNullable: true
|
|
35
|
+
- name: lesson_name
|
|
36
|
+
type: varchar
|
|
37
|
+
length: 180
|
|
38
|
+
isNullable: true
|
|
39
|
+
- name: video_name
|
|
40
|
+
type: varchar
|
|
41
|
+
length: 180
|
|
42
|
+
isNullable: true
|
|
43
|
+
- name: page_name
|
|
44
|
+
type: varchar
|
|
45
|
+
length: 180
|
|
46
|
+
isNullable: true
|
|
47
|
+
- name: source_label
|
|
48
|
+
type: varchar
|
|
49
|
+
length: 120
|
|
50
|
+
isNullable: true
|
|
51
|
+
- type: created_at
|
|
52
|
+
- type: updated_at
|
|
53
|
+
|
|
54
|
+
indices:
|
|
55
|
+
- columns: [ticket_id]
|
|
56
|
+
isUnique: true
|
|
57
|
+
- columns: [channel_account_id]
|
|
58
|
+
- columns: [context_type]
|
|
59
|
+
- columns: [course_name]
|
|
60
|
+
- columns: [section_name]
|
|
61
|
+
- columns: [lesson_name]
|
|
62
|
+
- columns: [video_name]
|
|
63
|
+
- columns: [page_name]
|
|
64
|
+
- columns: [source_label]
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: ticket_id
|
|
4
|
+
type: fk
|
|
5
|
+
references:
|
|
6
|
+
table: ticket
|
|
7
|
+
column: id
|
|
8
|
+
onDelete: CASCADE
|
|
9
|
+
- name: author_person_id
|
|
10
|
+
type: fk
|
|
11
|
+
isNullable: true
|
|
12
|
+
references:
|
|
13
|
+
table: person
|
|
14
|
+
column: id
|
|
15
|
+
onDelete: SET NULL
|
|
16
|
+
- name: parent_message_id
|
|
17
|
+
type: fk
|
|
18
|
+
isNullable: true
|
|
19
|
+
references:
|
|
20
|
+
table: ticket_message
|
|
21
|
+
column: id
|
|
22
|
+
onDelete: SET NULL
|
|
23
|
+
- name: direction
|
|
24
|
+
type: enum
|
|
25
|
+
values: [inbound, outbound, internal, system]
|
|
26
|
+
- name: audience
|
|
27
|
+
type: enum
|
|
28
|
+
values: [public, internal]
|
|
29
|
+
default: public
|
|
30
|
+
- name: body_html
|
|
31
|
+
type: text
|
|
32
|
+
isNullable: true
|
|
33
|
+
- name: body_text
|
|
34
|
+
type: text
|
|
35
|
+
isNullable: true
|
|
36
|
+
- name: source_created_at
|
|
37
|
+
type: datetime
|
|
38
|
+
isNullable: true
|
|
39
|
+
- type: created_at
|
|
40
|
+
- type: updated_at
|
|
41
|
+
|
|
42
|
+
indices:
|
|
43
|
+
- columns: [ticket_id]
|
|
44
|
+
- columns: [author_person_id]
|
|
45
|
+
- columns: [parent_message_id]
|
|
46
|
+
- columns: [direction]
|
|
47
|
+
- columns: [audience]
|
|
48
|
+
- columns: [created_at]
|
|
49
|
+
- columns: [ticket_id, created_at]
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: ticket_message_id
|
|
4
|
+
type: fk
|
|
5
|
+
references:
|
|
6
|
+
table: ticket_message
|
|
7
|
+
column: id
|
|
8
|
+
onDelete: CASCADE
|
|
9
|
+
- name: channel_account_id
|
|
10
|
+
type: fk
|
|
11
|
+
isNullable: true
|
|
12
|
+
references:
|
|
13
|
+
table: channel_account
|
|
14
|
+
column: id
|
|
15
|
+
onDelete: SET NULL
|
|
16
|
+
- name: provider_message_id
|
|
17
|
+
type: varchar
|
|
18
|
+
length: 255
|
|
19
|
+
isNullable: true
|
|
20
|
+
- name: provider_thread_id
|
|
21
|
+
type: varchar
|
|
22
|
+
length: 255
|
|
23
|
+
isNullable: true
|
|
24
|
+
- name: direction
|
|
25
|
+
type: enum
|
|
26
|
+
values: [inbound, outbound]
|
|
27
|
+
- name: delivery_status
|
|
28
|
+
type: enum
|
|
29
|
+
values: [pending, sent, delivered, failed, received, read]
|
|
30
|
+
default: pending
|
|
31
|
+
- name: payload_json
|
|
32
|
+
type: json
|
|
33
|
+
isNullable: true
|
|
34
|
+
- name: sent_at
|
|
35
|
+
type: datetime
|
|
36
|
+
isNullable: true
|
|
37
|
+
- name: received_at
|
|
38
|
+
type: datetime
|
|
39
|
+
isNullable: true
|
|
40
|
+
- type: created_at
|
|
41
|
+
- type: updated_at
|
|
42
|
+
|
|
43
|
+
indices:
|
|
44
|
+
- columns: [ticket_message_id]
|
|
45
|
+
- columns: [channel_account_id]
|
|
46
|
+
- columns: [provider_message_id]
|
|
47
|
+
- columns: [provider_thread_id]
|
|
48
|
+
- columns: [direction]
|
|
49
|
+
- columns: [delivery_status]
|
|
50
|
+
- columns: [created_at]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: ticket_id
|
|
4
|
+
type: fk
|
|
5
|
+
references:
|
|
6
|
+
table: ticket
|
|
7
|
+
column: id
|
|
8
|
+
onDelete: CASCADE
|
|
9
|
+
- name: key
|
|
10
|
+
type: varchar
|
|
11
|
+
length: 120
|
|
12
|
+
- name: value
|
|
13
|
+
type: text
|
|
14
|
+
isNullable: true
|
|
15
|
+
- type: created_at
|
|
16
|
+
- type: updated_at
|
|
17
|
+
|
|
18
|
+
indices:
|
|
19
|
+
- columns: [ticket_id]
|
|
20
|
+
- columns: [key]
|
|
21
|
+
- columns: [ticket_id, key]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: ticket_id
|
|
4
|
+
type: fk
|
|
5
|
+
references:
|
|
6
|
+
table: ticket
|
|
7
|
+
column: id
|
|
8
|
+
onDelete: CASCADE
|
|
9
|
+
- name: person_id
|
|
10
|
+
type: fk
|
|
11
|
+
references:
|
|
12
|
+
table: person
|
|
13
|
+
column: id
|
|
14
|
+
onDelete: CASCADE
|
|
15
|
+
- name: role
|
|
16
|
+
type: enum
|
|
17
|
+
values: [requester, agent, collaborator, watcher]
|
|
18
|
+
- type: created_at
|
|
19
|
+
- type: updated_at
|
|
20
|
+
|
|
21
|
+
indices:
|
|
22
|
+
- columns: [ticket_id, person_id]
|
|
23
|
+
isUnique: true
|
|
24
|
+
- columns: [ticket_id, role]
|
|
25
|
+
- columns: [person_id, role]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: ticket_id
|
|
4
|
+
type: fk
|
|
5
|
+
references:
|
|
6
|
+
table: ticket
|
|
7
|
+
column: id
|
|
8
|
+
onDelete: CASCADE
|
|
9
|
+
- name: channel_account_id
|
|
10
|
+
type: fk
|
|
11
|
+
isNullable: true
|
|
12
|
+
references:
|
|
13
|
+
table: channel_account
|
|
14
|
+
column: id
|
|
15
|
+
onDelete: SET NULL
|
|
16
|
+
- name: external_thread_id
|
|
17
|
+
type: varchar
|
|
18
|
+
length: 255
|
|
19
|
+
isNullable: true
|
|
20
|
+
- name: external_message_id
|
|
21
|
+
type: varchar
|
|
22
|
+
length: 255
|
|
23
|
+
isNullable: true
|
|
24
|
+
- name: external_url
|
|
25
|
+
type: varchar
|
|
26
|
+
length: 500
|
|
27
|
+
isNullable: true
|
|
28
|
+
- name: status
|
|
29
|
+
type: enum
|
|
30
|
+
values: [active, archived, sync_error]
|
|
31
|
+
default: active
|
|
32
|
+
- name: metadata_json
|
|
33
|
+
type: json
|
|
34
|
+
isNullable: true
|
|
35
|
+
- type: created_at
|
|
36
|
+
- type: updated_at
|
|
37
|
+
|
|
38
|
+
indices:
|
|
39
|
+
- columns: [ticket_id]
|
|
40
|
+
- columns: [channel_account_id]
|
|
41
|
+
- columns: [status]
|
|
42
|
+
- columns: [external_thread_id]
|
|
43
|
+
- columns: [external_message_id]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: ticket_id
|
|
4
|
+
type: fk
|
|
5
|
+
references:
|
|
6
|
+
table: ticket
|
|
7
|
+
column: id
|
|
8
|
+
onDelete: CASCADE
|
|
9
|
+
- name: tag_id
|
|
10
|
+
type: fk
|
|
11
|
+
references:
|
|
12
|
+
table: tag
|
|
13
|
+
column: id
|
|
14
|
+
onDelete: CASCADE
|
|
15
|
+
- type: created_at
|
|
16
|
+
- type: updated_at
|
|
17
|
+
|
|
18
|
+
indices:
|
|
19
|
+
- columns: [ticket_id, tag_id]
|
|
20
|
+
isUnique: true
|
|
21
|
+
- columns: [ticket_id]
|
|
22
|
+
- columns: [tag_id]
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hed-hog/ticket",
|
|
3
|
+
"version": "0.0.285",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"@nestjs/common": "*",
|
|
8
|
+
"@nestjs/config": "^4.0.2",
|
|
9
|
+
"@nestjs/core": "^11",
|
|
10
|
+
"@nestjs/jwt": "^11",
|
|
11
|
+
"@nestjs/mapped-types": "*",
|
|
12
|
+
"@hed-hog/api": "0.0.4",
|
|
13
|
+
"@hed-hog/api-locale": "0.0.13",
|
|
14
|
+
"@hed-hog/category": "0.0.285",
|
|
15
|
+
"@hed-hog/api-prisma": "0.0.5",
|
|
16
|
+
"@hed-hog/api-pagination": "0.0.6",
|
|
17
|
+
"@hed-hog/contact": "0.0.285",
|
|
18
|
+
"@hed-hog/tag": "0.0.285",
|
|
19
|
+
"@hed-hog/api-types": "0.0.1"
|
|
20
|
+
},
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"import": "./dist/index.js",
|
|
24
|
+
"require": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./package.json": "./package.json"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist",
|
|
30
|
+
"src",
|
|
31
|
+
"hedhog"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\"",
|
|
35
|
+
"prebuild": "pnpm exec ts-node ../../scripts/build-dependencies.ts libraries/ticket",
|
|
36
|
+
"build": "tsc --project tsconfig.production.json",
|
|
37
|
+
"patch": "pnpm exec ts-node ../../scripts/patch.ts libraries/ticket",
|
|
38
|
+
"prod": "pnpm run patch && pnpm run build && pnpm publish --access public --no-git-checks"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class UpdateTicketSettingsDto {
|
|
2
|
+
enabled?: boolean;
|
|
3
|
+
code_prefix?: string;
|
|
4
|
+
default_ai_review_mode?: string;
|
|
5
|
+
default_visibility?: string;
|
|
6
|
+
auto_assign_enabled?: boolean;
|
|
7
|
+
default_owner_person_id?: number;
|
|
8
|
+
allow_public_reply?: boolean;
|
|
9
|
+
allow_internal_notes?: boolean;
|
|
10
|
+
default_reopen_on_customer_reply?: boolean;
|
|
11
|
+
default_close_after_days_without_reply?: number;
|
|
12
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export * from './dto/assign-ticket-owner.dto';
|
|
2
|
+
export * from './dto/create-ticket-channel-account.dto';
|
|
3
|
+
export * from './dto/create-ticket-channel.dto';
|
|
4
|
+
export * from './dto/create-ticket-internal-note.dto';
|
|
5
|
+
export * from './dto/create-ticket-reply.dto';
|
|
6
|
+
export * from './dto/update-ticket-channel-account.dto';
|
|
7
|
+
export * from './dto/update-ticket-channel.dto';
|
|
8
|
+
export * from './dto/update-ticket-priority.dto';
|
|
9
|
+
export * from './dto/update-ticket-settings.dto';
|
|
10
|
+
export * from './dto/update-ticket-status.dto';
|
|
11
|
+
export * from './ticket-ai-review.controller';
|
|
12
|
+
export * from './ticket-channel-accounts.controller';
|
|
13
|
+
export * from './ticket-channels.controller';
|
|
14
|
+
export * from './ticket-data.controller';
|
|
15
|
+
export * from './ticket-items.controller';
|
|
16
|
+
export * from './ticket-settings.controller';
|
|
17
|
+
export * from './ticket.module';
|
|
18
|
+
export * from './ticket.service';
|
|
19
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Role } from '@hed-hog/api';
|
|
2
|
+
import { Controller, Get } from '@nestjs/common';
|
|
3
|
+
import { TicketService } from './ticket.service';
|
|
4
|
+
|
|
5
|
+
@Role()
|
|
6
|
+
@Controller('ticket/ai-review')
|
|
7
|
+
export class TicketAiReviewController {
|
|
8
|
+
constructor(private readonly ticketService: TicketService) {}
|
|
9
|
+
|
|
10
|
+
@Get()
|
|
11
|
+
async getAiReviewQueue() {
|
|
12
|
+
return this.ticketService.getAiReviewQueue();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Role } from '@hed-hog/api';
|
|
2
|
+
import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common';
|
|
3
|
+
import { CreateTicketChannelAccountDto } from './dto/create-ticket-channel-account.dto';
|
|
4
|
+
import { UpdateTicketChannelAccountDto } from './dto/update-ticket-channel-account.dto';
|
|
5
|
+
import { TicketService } from './ticket.service';
|
|
6
|
+
|
|
7
|
+
@Role()
|
|
8
|
+
@Controller('ticket/channel-accounts')
|
|
9
|
+
export class TicketChannelAccountsController {
|
|
10
|
+
constructor(private readonly ticketService: TicketService) {}
|
|
11
|
+
|
|
12
|
+
@Get()
|
|
13
|
+
async getChannelAccounts() {
|
|
14
|
+
return this.ticketService.getChannelAccounts();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@Post()
|
|
18
|
+
async createChannelAccount(@Body() data: CreateTicketChannelAccountDto) {
|
|
19
|
+
return this.ticketService.createChannelAccount(data);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@Patch(':id')
|
|
23
|
+
async updateChannelAccount(
|
|
24
|
+
@Param('id') id: string,
|
|
25
|
+
@Body() data: UpdateTicketChannelAccountDto,
|
|
26
|
+
) {
|
|
27
|
+
return this.ticketService.updateChannelAccount(Number(id), data);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@Delete(':id')
|
|
31
|
+
async deleteChannelAccount(@Param('id') id: string) {
|
|
32
|
+
return this.ticketService.deleteChannelAccount(Number(id));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Role } from '@hed-hog/api';
|
|
2
|
+
import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common';
|
|
3
|
+
import { CreateTicketChannelDto } from './dto/create-ticket-channel.dto';
|
|
4
|
+
import { UpdateTicketChannelDto } from './dto/update-ticket-channel.dto';
|
|
5
|
+
import { TicketService } from './ticket.service';
|
|
6
|
+
|
|
7
|
+
@Role()
|
|
8
|
+
@Controller('ticket/channels')
|
|
9
|
+
export class TicketChannelsController {
|
|
10
|
+
constructor(private readonly ticketService: TicketService) {}
|
|
11
|
+
|
|
12
|
+
@Get()
|
|
13
|
+
async getChannels() {
|
|
14
|
+
return this.ticketService.getChannels();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@Post()
|
|
18
|
+
async createChannel(@Body() data: CreateTicketChannelDto) {
|
|
19
|
+
return this.ticketService.createChannel(data);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@Patch(':id')
|
|
23
|
+
async updateChannel(@Param('id') id: string, @Body() data: UpdateTicketChannelDto) {
|
|
24
|
+
return this.ticketService.updateChannel(Number(id), data);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@Delete(':id')
|
|
28
|
+
async deleteChannel(@Param('id') id: string) {
|
|
29
|
+
return this.ticketService.deleteChannel(Number(id));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Role } from '@hed-hog/api';
|
|
2
|
+
import { Controller, Get } from '@nestjs/common';
|
|
3
|
+
import { TicketService } from './ticket.service';
|
|
4
|
+
|
|
5
|
+
@Role()
|
|
6
|
+
@Controller('ticket')
|
|
7
|
+
export class TicketDataController {
|
|
8
|
+
constructor(private readonly ticketService: TicketService) {}
|
|
9
|
+
|
|
10
|
+
@Get('dashboard')
|
|
11
|
+
async getDashboard() {
|
|
12
|
+
return this.ticketService.getDashboard();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@Get('inbox')
|
|
16
|
+
async getInbox() {
|
|
17
|
+
return this.ticketService.getInbox();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@Get('ai-review')
|
|
21
|
+
async getAiReviewQueue() {
|
|
22
|
+
return this.ticketService.getAiReviewQueue();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@Get('reports')
|
|
26
|
+
async getReports() {
|
|
27
|
+
return this.ticketService.getReports();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@Get('roles')
|
|
31
|
+
async getRoleMatrix() {
|
|
32
|
+
return this.ticketService.getRoleMatrix();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@Get()
|
|
36
|
+
async listTickets() {
|
|
37
|
+
return this.ticketService.listTickets();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Role } from '@hed-hog/api';
|
|
2
|
+
import { Body, Controller, Get, Param, Patch, Post } from '@nestjs/common';
|
|
3
|
+
import { AssignTicketOwnerDto } from './dto/assign-ticket-owner.dto';
|
|
4
|
+
import { CreateTicketInternalNoteDto } from './dto/create-ticket-internal-note.dto';
|
|
5
|
+
import { CreateTicketReplyDto } from './dto/create-ticket-reply.dto';
|
|
6
|
+
import { UpdateTicketPriorityDto } from './dto/update-ticket-priority.dto';
|
|
7
|
+
import { UpdateTicketStatusDto } from './dto/update-ticket-status.dto';
|
|
8
|
+
import { TicketService } from './ticket.service';
|
|
9
|
+
|
|
10
|
+
@Role()
|
|
11
|
+
@Controller('ticket')
|
|
12
|
+
export class TicketItemsController {
|
|
13
|
+
constructor(private readonly ticketService: TicketService) {}
|
|
14
|
+
|
|
15
|
+
@Get(':id')
|
|
16
|
+
async getTicketById(@Param('id') id: string) {
|
|
17
|
+
return this.ticketService.getTicketById(Number(id));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@Post(':id/reply')
|
|
21
|
+
async createPublicReply(
|
|
22
|
+
@Param('id') id: string,
|
|
23
|
+
@Body() data: CreateTicketReplyDto,
|
|
24
|
+
) {
|
|
25
|
+
return this.ticketService.createPublicReply(Number(id), data);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@Post(':id/internal-note')
|
|
29
|
+
async createInternalNote(
|
|
30
|
+
@Param('id') id: string,
|
|
31
|
+
@Body() data: CreateTicketInternalNoteDto,
|
|
32
|
+
) {
|
|
33
|
+
return this.ticketService.createInternalNote(Number(id), data);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Patch(':id/assign')
|
|
37
|
+
async assignOwner(@Param('id') id: string, @Body() data: AssignTicketOwnerDto) {
|
|
38
|
+
return this.ticketService.assignOwner(Number(id), data);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@Patch(':id/status')
|
|
42
|
+
async updateStatus(
|
|
43
|
+
@Param('id') id: string,
|
|
44
|
+
@Body() data: UpdateTicketStatusDto,
|
|
45
|
+
) {
|
|
46
|
+
return this.ticketService.updateStatus(Number(id), data);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@Patch(':id/priority')
|
|
50
|
+
async updatePriority(
|
|
51
|
+
@Param('id') id: string,
|
|
52
|
+
@Body() data: UpdateTicketPriorityDto,
|
|
53
|
+
) {
|
|
54
|
+
return this.ticketService.updatePriority(Number(id), data);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Role } from '@hed-hog/api';
|
|
2
|
+
import { Body, Controller, Get, Patch } from '@nestjs/common';
|
|
3
|
+
import { UpdateTicketSettingsDto } from './dto/update-ticket-settings.dto';
|
|
4
|
+
import { TicketService } from './ticket.service';
|
|
5
|
+
|
|
6
|
+
@Role()
|
|
7
|
+
@Controller('ticket/settings')
|
|
8
|
+
export class TicketSettingsController {
|
|
9
|
+
constructor(private readonly ticketService: TicketService) {}
|
|
10
|
+
|
|
11
|
+
@Get()
|
|
12
|
+
async getSettings() {
|
|
13
|
+
return this.ticketService.getSettings();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Patch()
|
|
17
|
+
async updateSettings(@Body() data: UpdateTicketSettingsDto) {
|
|
18
|
+
return this.ticketService.updateSettings(data);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { LocaleModule } from '@hed-hog/api-locale';
|
|
2
|
+
import { PaginationModule } from '@hed-hog/api-pagination';
|
|
3
|
+
import { PrismaModule } from '@hed-hog/api-prisma';
|
|
4
|
+
import { forwardRef, Module } from '@nestjs/common';
|
|
5
|
+
import { ConfigModule } from '@nestjs/config';
|
|
6
|
+
import { TicketAiReviewController } from './ticket-ai-review.controller';
|
|
7
|
+
import { TicketChannelAccountsController } from './ticket-channel-accounts.controller';
|
|
8
|
+
import { TicketChannelsController } from './ticket-channels.controller';
|
|
9
|
+
import { TicketDataController } from './ticket-data.controller';
|
|
10
|
+
import { TicketItemsController } from './ticket-items.controller';
|
|
11
|
+
import { TicketSettingsController } from './ticket-settings.controller';
|
|
12
|
+
import { TicketService } from './ticket.service';
|
|
13
|
+
|
|
14
|
+
@Module({
|
|
15
|
+
imports: [
|
|
16
|
+
ConfigModule.forRoot(),
|
|
17
|
+
forwardRef(() => PaginationModule),
|
|
18
|
+
forwardRef(() => PrismaModule),
|
|
19
|
+
forwardRef(() => LocaleModule)
|
|
20
|
+
],
|
|
21
|
+
controllers: [
|
|
22
|
+
TicketDataController,
|
|
23
|
+
TicketItemsController,
|
|
24
|
+
TicketChannelsController,
|
|
25
|
+
TicketChannelAccountsController,
|
|
26
|
+
TicketSettingsController,
|
|
27
|
+
TicketAiReviewController,
|
|
28
|
+
],
|
|
29
|
+
providers: [TicketService],
|
|
30
|
+
exports: [TicketService],
|
|
31
|
+
})
|
|
32
|
+
export class TicketModule {}
|