@hed-hog/contact-us 0.0.270 → 0.0.273

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 (2) hide show
  1. package/README.md +373 -0
  2. package/package.json +5 -5
package/README.md ADDED
@@ -0,0 +1,373 @@
1
+ # @hed-hog/contact-us
2
+
3
+ ## 1. Visão geral do módulo
4
+
5
+ O módulo `@hed-hog/contact-us` é responsável pela gestão das mensagens enviadas pelos usuários através do formulário "Contact Us". Ele permite o envio, consulta, atualização de status, resposta e exclusão dessas mensagens, além de fornecer estatísticas e configurações relacionadas ao contato.
6
+
7
+ ## 2. Escopo e responsabilidades
8
+
9
+ - Receber mensagens de contato enviadas por usuários (público).
10
+ - Listar, consultar, atualizar status, responder e excluir mensagens (restrito a administradores).
11
+ - Enviar notificações por e-mail para o usuário e para o time responsável.
12
+ - Fornecer estatísticas sobre as mensagens recebidas.
13
+ - Disponibilizar configurações relacionadas ao contato.
14
+
15
+ ## 3. Endpoints
16
+
17
+ ### GET /contact-us/settings
18
+
19
+ - **Autenticação:** Pública
20
+ - **Descrição:** Retorna as configurações relacionadas ao contato, como telefone e e-mail de contato.
21
+ - **Parâmetros:** Nenhum
22
+ - **Resposta:** Objeto com as configurações `contact-us-phone` e `contact-us-email`.
23
+ - **Erros:** Nenhum específico.
24
+
25
+ ---
26
+
27
+ ### GET /contact-us/stats
28
+
29
+ - **Autenticação:** Requer papel `admin` ou `admin-contact-us`
30
+ - **Descrição:** Retorna estatísticas das mensagens de contato, incluindo totais por status.
31
+ - **Parâmetros:** Nenhum
32
+ - **Resposta:**
33
+ ```json
34
+ {
35
+ "total": number,
36
+ "totalNew": number,
37
+ "totalResponded": number,
38
+ "totalProgress": number,
39
+ "totalArchived": number
40
+ }
41
+ ```
42
+ - **Erros:** Nenhum específico.
43
+
44
+ ---
45
+
46
+ ### GET /contact-us/:id
47
+
48
+ - **Autenticação:** Requer papel `admin` ou `admin-contact-us`
49
+ - **Descrição:** Retorna os detalhes de uma mensagem de contato pelo seu ID.
50
+ - **Parâmetros:**
51
+ - `id` (path): número inteiro identificador da mensagem.
52
+ - **Resposta:** Objeto com os dados completos da mensagem, incluindo usuário e resposta.
53
+ - **Erros:**
54
+ - `404 Not Found`: Mensagem não encontrada.
55
+
56
+ ---
57
+
58
+ ### GET /contact-us
59
+
60
+ - **Autenticação:** Requer papel `admin` ou `admin-contact-us`
61
+ - **Descrição:** Lista mensagens de contato com paginação e filtro opcional por status e busca textual.
62
+ - **Query Parameters:**
63
+ - `status` (string, opcional): filtro por status (`new`, `progress`, `answered`, `archived`, `all`).
64
+ - Parâmetros de paginação via `@hed-hog/api-pagination` (ex: `take`, `skip`, `search`).
65
+ - **Resposta:**
66
+ ```json
67
+ {
68
+ "data": [/* array de mensagens */],
69
+ "total": number,
70
+ "page": number,
71
+ "pageSize": number,
72
+ "prev": number | null,
73
+ "next": number | null,
74
+ "lastPage": number
75
+ }
76
+ ```
77
+ - **Erros:** Nenhum específico.
78
+
79
+ ---
80
+
81
+ ### DELETE /contact-us/:id
82
+
83
+ - **Autenticação:** Requer papel `admin` ou `admin-contact-us`
84
+ - **Descrição:** Exclui uma mensagem de contato pelo seu ID.
85
+ - **Parâmetros:**
86
+ - `id` (path): número inteiro identificador da mensagem.
87
+ - **Resposta:** Objeto da mensagem excluída.
88
+ - **Erros:**
89
+ - `404 Not Found`: Mensagem não encontrada.
90
+
91
+ ---
92
+
93
+ ### PATCH /contact-us/status/:id
94
+
95
+ - **Autenticação:** Requer papel `admin` ou `admin-contact-us`
96
+ - **Descrição:** Atualiza o status de uma mensagem de contato.
97
+ - **Parâmetros:**
98
+ - `id` (path): número inteiro identificador da mensagem.
99
+ - **Body:**
100
+ ```json
101
+ {
102
+ "status": "new" | "progress" | "answered" | "archived"
103
+ }
104
+ ```
105
+ - **Resposta:** Objeto da mensagem atualizada.
106
+ - **Erros:**
107
+ - `404 Not Found`: Mensagem não encontrada.
108
+ - `400 Bad Request`: Status inválido.
109
+
110
+ ---
111
+
112
+ ### POST /contact-us/response/:id
113
+
114
+ - **Autenticação:** Requer papel `admin` ou `admin-contact-us`
115
+ - **Descrição:** Envia uma resposta para uma mensagem de contato e notifica o usuário por e-mail.
116
+ - **Parâmetros:**
117
+ - `id` (path): número inteiro identificador da mensagem.
118
+ - **Body:**
119
+ ```json
120
+ {
121
+ "response": "string"
122
+ }
123
+ ```
124
+ - **Resposta:** Texto da resposta enviada.
125
+ - **Erros:**
126
+ - `404 Not Found`: Mensagem não encontrada.
127
+ - `400 Bad Request`: Resposta inválida.
128
+
129
+ ---
130
+
131
+ ### POST /contact-us
132
+
133
+ - **Autenticação:** Pública
134
+ - **Descrição:** Cria uma nova mensagem de contato.
135
+ - **Body:**
136
+ ```json
137
+ {
138
+ "name": "string",
139
+ "email": "string (email válido)",
140
+ "message": "string"
141
+ }
142
+ ```
143
+ - **Resposta:** Objeto da mensagem criada.
144
+ - **Erros:**
145
+ - `400 Bad Request`: E-mail inválido ou dados inválidos.
146
+
147
+ ## 4. Regras de autenticação e autorização
148
+
149
+ - Endpoints de listagem, consulta, atualização, resposta e exclusão requerem autenticação com papel `admin` ou `admin-contact-us`.
150
+ - Endpoints de criação de mensagem e obtenção de configurações são públicos.
151
+ - O papel `admin-contact-us` é um administrador com acesso total à gestão de mensagens de contato.
152
+
153
+ ## 5. Estruturas de request/response
154
+
155
+ ### ContactUsSendDTO (criação de mensagem)
156
+
157
+ ```ts
158
+ {
159
+ name: string; // obrigatório, string
160
+ email: string; // obrigatório, email válido
161
+ message: string; // obrigatório, string
162
+ }
163
+ ```
164
+
165
+ ### ContactUsResponseDTO (resposta a mensagem)
166
+
167
+ ```ts
168
+ {
169
+ response: string; // obrigatório, string
170
+ }
171
+ ```
172
+
173
+ ### ContactUsStatusDTO (atualização de status)
174
+
175
+ ```ts
176
+ {
177
+ status: 'new' | 'progress' | 'answered' | 'archived'; // obrigatório, enum válido
178
+ }
179
+ ```
180
+
181
+ ### Resposta padrão de listagem
182
+
183
+ ```ts
184
+ {
185
+ data: ContactUsMessage[],
186
+ total: number,
187
+ page: number,
188
+ pageSize: number,
189
+ prev: number | null,
190
+ next: number | null,
191
+ lastPage: number
192
+ }
193
+ ```
194
+
195
+ ### ContactUsMessage (exemplo de objeto mensagem)
196
+
197
+ ```ts
198
+ {
199
+ id: number,
200
+ name: string,
201
+ email: string,
202
+ message: string,
203
+ response?: string | null,
204
+ status: 'new' | 'progress' | 'answered' | 'archived',
205
+ created_at: string (datetime),
206
+ updated_at: string (datetime),
207
+ response_at?: string | null,
208
+ user_id?: number | null,
209
+ response_id?: number | null,
210
+ user_contact_us_response_idTouser?: object,
211
+ user_contact_us_user_idTouser?: object
212
+ }
213
+ ```
214
+
215
+ ## 6. Erros comuns
216
+
217
+ - `404 Not Found`: Mensagem de contato não encontrada para o ID informado.
218
+ - `400 Bad Request`: Dados inválidos, como e-mail mal formatado ou status inválido.
219
+ - `401 Unauthorized` / `403 Forbidden`: Acesso negado para endpoints restritos sem o papel adequado.
220
+
221
+ ## 7. Banco de dados (tabela contact_us)
222
+
223
+ ```yaml
224
+ finalidade: Armazenar mensagens enviadas pelo formulário "Contact Us" e suas respostas.
225
+
226
+ colunas:
227
+ - id: primary key (auto-increment)
228
+ - name: string, não nulo
229
+ - email: string, não nulo
230
+ - message: text, não nulo
231
+ - response: text, nulo permitido
232
+ - status: enum ['new', 'progress', 'answered', 'archived'], padrão 'new', não nulo
233
+ - response_at: datetime, nulo permitido
234
+ - user_id: foreign key para user.id, nulo permitido, onDelete CASCADE
235
+ - response_id: foreign key para user.id, nulo permitido, onDelete SET NULL
236
+ - created_at: datetime, não nulo, timestamp de criação
237
+ - updated_at: datetime, não nulo, timestamp de atualização
238
+
239
+ defaults:
240
+ - status: 'new'
241
+
242
+ nulabilidade:
243
+ - response: nullable
244
+ - response_at: nullable
245
+ - user_id: nullable
246
+ - response_id: nullable
247
+
248
+ integridade:
249
+ - user_id referencia user.id com onDelete CASCADE
250
+ - response_id referencia user.id com onDelete SET NULL
251
+
252
+ indices:
253
+ - primary key em id
254
+
255
+ enums:
256
+ - status: ['new', 'progress', 'answered', 'archived']
257
+ ```
258
+
259
+ ## 8. Regras de negócio relevantes
260
+
261
+ - O status inicial de uma mensagem é sempre `new`.
262
+ - A resposta a uma mensagem atualiza o status para `answered` e registra o usuário que respondeu.
263
+ - Mensagens podem ser filtradas por status e texto em nome, e-mail, mensagem ou resposta.
264
+ - Ao criar uma mensagem, se o e-mail estiver associado a um usuário, o `user_id` é vinculado.
265
+ - Envio automático de e-mails:
266
+ - Confirmação para o cliente que enviou a mensagem.
267
+ - Notificação para o e-mail configurado em `contact-us-email-to`.
268
+ - Resposta enviada ao cliente quando um administrador responde.
269
+ - Validação rigorosa do e-mail no momento da criação da mensagem.
270
+ - Exclusão de mensagens remove o registro do banco.
271
+
272
+ ## 9. Guia rápido de uso (exemplos)
273
+
274
+ ### Criar mensagem (público)
275
+
276
+ ```http
277
+ POST /contact-us
278
+ Content-Type: application/json
279
+
280
+ {
281
+ "name": "João Silva",
282
+ "email": "joao@example.com",
283
+ "message": "Gostaria de mais informações sobre o produto."
284
+ }
285
+ ```
286
+
287
+ Resposta:
288
+
289
+ ```json
290
+ {
291
+ "id": 123,
292
+ "name": "João Silva",
293
+ "email": "joao@example.com",
294
+ "message": "Gostaria de mais informações sobre o produto.",
295
+ "status": "new",
296
+ "created_at": "2024-06-01T12:00:00Z",
297
+ ...
298
+ }
299
+ ```
300
+
301
+ ---
302
+
303
+ ### Listar mensagens com filtro e paginação (admin)
304
+
305
+ ```http
306
+ GET /contact-us?status=new&search=joao&take=10&skip=0
307
+ Authorization: Bearer <token>
308
+ ```
309
+
310
+ Resposta:
311
+
312
+ ```json
313
+ {
314
+ "data": [ /* array de mensagens filtradas */ ],
315
+ "total": 5,
316
+ "page": 1,
317
+ "pageSize": 10,
318
+ "prev": null,
319
+ "next": 2,
320
+ "lastPage": 1
321
+ }
322
+ ```
323
+
324
+ ---
325
+
326
+ ### Atualizar status de mensagem (admin)
327
+
328
+ ```http
329
+ PATCH /contact-us/status/123
330
+ Authorization: Bearer <token>
331
+ Content-Type: application/json
332
+
333
+ {
334
+ "status": "progress"
335
+ }
336
+ ```
337
+
338
+ Resposta: objeto da mensagem atualizada.
339
+
340
+ ---
341
+
342
+ ### Responder mensagem (admin)
343
+
344
+ ```http
345
+ POST /contact-us/response/123
346
+ Authorization: Bearer <token>
347
+ Content-Type: application/json
348
+
349
+ {
350
+ "response": "Olá João, obrigado pelo contato. Vamos enviar as informações solicitadas."
351
+ }
352
+ ```
353
+
354
+ Resposta:
355
+
356
+ ```json
357
+ "Olá João, obrigado pelo contato. Vamos enviar as informações solicitadas."
358
+ ```
359
+
360
+ ---
361
+
362
+ ### Excluir mensagem (admin)
363
+
364
+ ```http
365
+ DELETE /contact-us/123
366
+ Authorization: Bearer <token>
367
+ ```
368
+
369
+ Resposta: objeto da mensagem excluída.
370
+
371
+ ---
372
+
373
+ Este módulo integra-se com os módulos `@hed-hog/api-locale`, `@hed-hog/api-prisma`, `@hed-hog/api-pagination` e `@hed-hog/core` para funcionalidades de localização, acesso ao banco de dados, paginação e envio de e-mails.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/contact-us",
3
- "version": "0.0.270",
3
+ "version": "0.0.273",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "dependencies": {
@@ -9,11 +9,11 @@
9
9
  "@nestjs/core": "^11",
10
10
  "@nestjs/jwt": "^11",
11
11
  "@nestjs/mapped-types": "*",
12
- "@hed-hog/api-locale": "0.0.13",
13
12
  "@hed-hog/api-prisma": "0.0.5",
14
- "@hed-hog/core": "0.0.270",
15
- "@hed-hog/api": "0.0.4",
16
- "@hed-hog/api-pagination": "0.0.6"
13
+ "@hed-hog/api-locale": "0.0.13",
14
+ "@hed-hog/core": "0.0.273",
15
+ "@hed-hog/api-pagination": "0.0.6",
16
+ "@hed-hog/api": "0.0.4"
17
17
  },
18
18
  "exports": {
19
19
  ".": {