@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.
Files changed (134) hide show
  1. package/README.md +480 -0
  2. package/dist/dto/assign-ticket-owner.dto.d.ts +4 -0
  3. package/dist/dto/assign-ticket-owner.dto.d.ts.map +1 -0
  4. package/dist/dto/assign-ticket-owner.dto.js +7 -0
  5. package/dist/dto/assign-ticket-owner.dto.js.map +1 -0
  6. package/dist/dto/create-ticket-channel-account.dto.d.ts +10 -0
  7. package/dist/dto/create-ticket-channel-account.dto.d.ts.map +1 -0
  8. package/dist/dto/create-ticket-channel-account.dto.js +7 -0
  9. package/dist/dto/create-ticket-channel-account.dto.js.map +1 -0
  10. package/dist/dto/create-ticket-channel.dto.d.ts +7 -0
  11. package/dist/dto/create-ticket-channel.dto.d.ts.map +1 -0
  12. package/dist/dto/create-ticket-channel.dto.js +7 -0
  13. package/dist/dto/create-ticket-channel.dto.js.map +1 -0
  14. package/dist/dto/create-ticket-internal-note.dto.d.ts +4 -0
  15. package/dist/dto/create-ticket-internal-note.dto.d.ts.map +1 -0
  16. package/dist/dto/create-ticket-internal-note.dto.js +7 -0
  17. package/dist/dto/create-ticket-internal-note.dto.js.map +1 -0
  18. package/dist/dto/create-ticket-reply.dto.d.ts +5 -0
  19. package/dist/dto/create-ticket-reply.dto.d.ts.map +1 -0
  20. package/dist/dto/create-ticket-reply.dto.js +7 -0
  21. package/dist/dto/create-ticket-reply.dto.js.map +1 -0
  22. package/dist/dto/update-ticket-channel-account.dto.d.ts +8 -0
  23. package/dist/dto/update-ticket-channel-account.dto.d.ts.map +1 -0
  24. package/dist/dto/update-ticket-channel-account.dto.js +7 -0
  25. package/dist/dto/update-ticket-channel-account.dto.js.map +1 -0
  26. package/dist/dto/update-ticket-channel.dto.d.ts +5 -0
  27. package/dist/dto/update-ticket-channel.dto.d.ts.map +1 -0
  28. package/dist/dto/update-ticket-channel.dto.js +7 -0
  29. package/dist/dto/update-ticket-channel.dto.js.map +1 -0
  30. package/dist/dto/update-ticket-priority.dto.d.ts +4 -0
  31. package/dist/dto/update-ticket-priority.dto.d.ts.map +1 -0
  32. package/dist/dto/update-ticket-priority.dto.js +7 -0
  33. package/dist/dto/update-ticket-priority.dto.js.map +1 -0
  34. package/dist/dto/update-ticket-settings.dto.d.ts +13 -0
  35. package/dist/dto/update-ticket-settings.dto.d.ts.map +1 -0
  36. package/dist/dto/update-ticket-settings.dto.js +7 -0
  37. package/dist/dto/update-ticket-settings.dto.js.map +1 -0
  38. package/dist/dto/update-ticket-status.dto.d.ts +4 -0
  39. package/dist/dto/update-ticket-status.dto.d.ts.map +1 -0
  40. package/dist/dto/update-ticket-status.dto.js +7 -0
  41. package/dist/dto/update-ticket-status.dto.js.map +1 -0
  42. package/dist/index.d.ts +19 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +35 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/ticket-ai-review.controller.d.ts +9 -0
  47. package/dist/ticket-ai-review.controller.d.ts.map +1 -0
  48. package/dist/ticket-ai-review.controller.js +36 -0
  49. package/dist/ticket-ai-review.controller.js.map +1 -0
  50. package/dist/ticket-channel-accounts.controller.d.ts +24 -0
  51. package/dist/ticket-channel-accounts.controller.d.ts.map +1 -0
  52. package/dist/ticket-channel-accounts.controller.js +72 -0
  53. package/dist/ticket-channel-accounts.controller.js.map +1 -0
  54. package/dist/ticket-channels.controller.d.ts +21 -0
  55. package/dist/ticket-channels.controller.d.ts.map +1 -0
  56. package/dist/ticket-channels.controller.js +72 -0
  57. package/dist/ticket-channels.controller.js.map +1 -0
  58. package/dist/ticket-data.controller.d.ts +24 -0
  59. package/dist/ticket-data.controller.d.ts.map +1 -0
  60. package/dist/ticket-data.controller.js +81 -0
  61. package/dist/ticket-data.controller.js.map +1 -0
  62. package/dist/ticket-items.controller.d.ts +35 -0
  63. package/dist/ticket-items.controller.d.ts.map +1 -0
  64. package/dist/ticket-items.controller.js +100 -0
  65. package/dist/ticket-items.controller.js.map +1 -0
  66. package/dist/ticket-settings.controller.d.ts +11 -0
  67. package/dist/ticket-settings.controller.d.ts.map +1 -0
  68. package/dist/ticket-settings.controller.js +50 -0
  69. package/dist/ticket-settings.controller.js.map +1 -0
  70. package/dist/ticket.module.d.ts +3 -0
  71. package/dist/ticket.module.d.ts.map +1 -0
  72. package/dist/ticket.module.js +45 -0
  73. package/dist/ticket.module.js.map +1 -0
  74. package/dist/ticket.service.d.ts +88 -0
  75. package/dist/ticket.service.d.ts.map +1 -0
  76. package/dist/ticket.service.js +83 -0
  77. package/dist/ticket.service.js.map +1 -0
  78. package/hedhog/data/menu.yaml +164 -0
  79. package/hedhog/data/role.yaml +23 -0
  80. package/hedhog/data/route.yaml +225 -0
  81. package/hedhog/data/setting_group.yaml +574 -0
  82. package/hedhog/frontend/app/[id]/page.tsx.ejs +360 -0
  83. package/hedhog/frontend/app/_components/ai-draft-editor-dialog.tsx.ejs +67 -0
  84. package/hedhog/frontend/app/_components/ticket-badges.tsx.ejs +65 -0
  85. package/hedhog/frontend/app/_components/ticket-context-card.tsx.ejs +80 -0
  86. package/hedhog/frontend/app/_components/ticket-timeline.tsx.ejs +59 -0
  87. package/hedhog/frontend/app/_lib/mock-data.ts.ejs +474 -0
  88. package/hedhog/frontend/app/_lib/types.ts.ejs +134 -0
  89. package/hedhog/frontend/app/ai-review/page.tsx.ejs +205 -0
  90. package/hedhog/frontend/app/channel-accounts/page.tsx.ejs +476 -0
  91. package/hedhog/frontend/app/channels/page.tsx.ejs +406 -0
  92. package/hedhog/frontend/app/dashboard/page.tsx.ejs +178 -0
  93. package/hedhog/frontend/app/inbox/page.tsx.ejs +500 -0
  94. package/hedhog/frontend/app/page.tsx.ejs +5 -0
  95. package/hedhog/frontend/app/reports/page.tsx.ejs +151 -0
  96. package/hedhog/frontend/app/roles/page.tsx.ejs +110 -0
  97. package/hedhog/frontend/app/settings/page.tsx.ejs +484 -0
  98. package/hedhog/frontend/messages/en.json +412 -0
  99. package/hedhog/frontend/messages/pt.json +412 -0
  100. package/hedhog/table/channel.yaml +23 -0
  101. package/hedhog/table/channel_account.yaml +34 -0
  102. package/hedhog/table/ticket.yaml +73 -0
  103. package/hedhog/table/ticket_ai_draft.yaml +51 -0
  104. package/hedhog/table/ticket_attachment.yaml +40 -0
  105. package/hedhog/table/ticket_category.yaml +22 -0
  106. package/hedhog/table/ticket_context.yaml +64 -0
  107. package/hedhog/table/ticket_message.yaml +49 -0
  108. package/hedhog/table/ticket_message_source.yaml +50 -0
  109. package/hedhog/table/ticket_metadata.yaml +21 -0
  110. package/hedhog/table/ticket_participant.yaml +25 -0
  111. package/hedhog/table/ticket_source.yaml +43 -0
  112. package/hedhog/table/ticket_tag.yaml +22 -0
  113. package/package.json +40 -0
  114. package/src/dto/assign-ticket-owner.dto.ts +3 -0
  115. package/src/dto/create-ticket-channel-account.dto.ts +9 -0
  116. package/src/dto/create-ticket-channel.dto.ts +6 -0
  117. package/src/dto/create-ticket-internal-note.dto.ts +3 -0
  118. package/src/dto/create-ticket-reply.dto.ts +4 -0
  119. package/src/dto/update-ticket-channel-account.dto.ts +7 -0
  120. package/src/dto/update-ticket-channel.dto.ts +4 -0
  121. package/src/dto/update-ticket-priority.dto.ts +3 -0
  122. package/src/dto/update-ticket-settings.dto.ts +12 -0
  123. package/src/dto/update-ticket-status.dto.ts +3 -0
  124. package/src/index.ts +19 -0
  125. package/src/language/en.json +8 -0
  126. package/src/language/pt.json +8 -0
  127. package/src/ticket-ai-review.controller.ts +14 -0
  128. package/src/ticket-channel-accounts.controller.ts +34 -0
  129. package/src/ticket-channels.controller.ts +31 -0
  130. package/src/ticket-data.controller.ts +39 -0
  131. package/src/ticket-items.controller.ts +56 -0
  132. package/src/ticket-settings.controller.ts +20 -0
  133. package/src/ticket.module.ts +32 -0
  134. 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,3 @@
1
+ export class AssignTicketOwnerDto {
2
+ owner_person_id?: number;
3
+ }
@@ -0,0 +1,9 @@
1
+ export class CreateTicketChannelAccountDto {
2
+ channel_id?: number;
3
+ code?: string;
4
+ name?: string;
5
+ external_identifier?: string;
6
+ status?: string;
7
+ ai_enabled?: boolean;
8
+ ai_model?: string;
9
+ }
@@ -0,0 +1,6 @@
1
+ export class CreateTicketChannelDto {
2
+ code?: string;
3
+ name?: string;
4
+ kind?: string;
5
+ status?: string;
6
+ }
@@ -0,0 +1,3 @@
1
+ export class CreateTicketInternalNoteDto {
2
+ body?: string;
3
+ }
@@ -0,0 +1,4 @@
1
+ export class CreateTicketReplyDto {
2
+ subject?: string;
3
+ body?: string;
4
+ }
@@ -0,0 +1,7 @@
1
+ export class UpdateTicketChannelAccountDto {
2
+ name?: string;
3
+ external_identifier?: string;
4
+ status?: string;
5
+ ai_enabled?: boolean;
6
+ ai_model?: string;
7
+ }
@@ -0,0 +1,4 @@
1
+ export class UpdateTicketChannelDto {
2
+ name?: string;
3
+ status?: string;
4
+ }
@@ -0,0 +1,3 @@
1
+ export class UpdateTicketPriorityDto {
2
+ priority?: string;
3
+ }
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ export class UpdateTicketStatusDto {
2
+ status?: string;
3
+ }
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,8 @@
1
+ {
2
+ "HomePage": {
3
+ "title": "Ticket",
4
+ "description": "Manage your ticket.",
5
+ "breadcrumbHome": "Home",
6
+ "breadcrumbCurrent": "Ticket"
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "HomePage": {
3
+ "title": "Ticket",
4
+ "description": "Gerencie seu ticket.",
5
+ "breadcrumbHome": "Inicio",
6
+ "breadcrumbCurrent": "Ticket"
7
+ }
8
+ }
@@ -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 {}