@hed-hog/contact-us 0.0.266 → 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.
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.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-us.module.d.ts","sourceRoot":"","sources":["../src/contact-us.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contact-us.module.d.ts","sourceRoot":"","sources":["../src/contact-us.module.ts"],"names":[],"mappings":"AAOA,qBAYa,eAAe;CAAG"}
|
|
@@ -11,7 +11,6 @@ const api_locale_1 = require("@hed-hog/api-locale");
|
|
|
11
11
|
const api_pagination_1 = require("@hed-hog/api-pagination");
|
|
12
12
|
const api_prisma_1 = require("@hed-hog/api-prisma");
|
|
13
13
|
const core_1 = require("@hed-hog/core");
|
|
14
|
-
const mail_module_1 = require("@hed-hog/core/mail/mail.module");
|
|
15
14
|
const common_1 = require("@nestjs/common");
|
|
16
15
|
const contact_us_controller_1 = require("./contact-us.controller");
|
|
17
16
|
const contact_us_service_1 = require("./contact-us.service");
|
|
@@ -25,7 +24,7 @@ exports.ContactUsModule = ContactUsModule = __decorate([
|
|
|
25
24
|
(0, common_1.forwardRef)(() => api_prisma_1.PrismaModule),
|
|
26
25
|
(0, common_1.forwardRef)(() => api_pagination_1.PaginationModule),
|
|
27
26
|
(0, common_1.forwardRef)(() => core_1.CoreModule),
|
|
28
|
-
(0, common_1.forwardRef)(() =>
|
|
27
|
+
(0, common_1.forwardRef)(() => core_1.MailModule),
|
|
29
28
|
],
|
|
30
29
|
controllers: [contact_us_controller_1.ContactUsController],
|
|
31
30
|
providers: [contact_us_service_1.ContactUsService],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-us.module.js","sourceRoot":"","sources":["../src/contact-us.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAmD;AACnD,4DAA2D;AAC3D,oDAAmD;AACnD,
|
|
1
|
+
{"version":3,"file":"contact-us.module.js","sourceRoot":"","sources":["../src/contact-us.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAmD;AACnD,4DAA2D;AAC3D,oDAAmD;AACnD,wCAAuD;AACvD,2CAAoD;AACpD,mEAA8D;AAC9D,6DAAwD;AAajD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAZ3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,iCAAgB,CAAC;YAClC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,iBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,iBAAU,CAAC;SAC7B;QACD,WAAW,EAAE,CAAC,2CAAmB,CAAC;QAClC,SAAS,EAAE,CAAC,qCAAgB,CAAC;QAC7B,OAAO,EAAE,CAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,qCAAgB,CAAC,CAAC;KAC9C,CAAC;GACW,eAAe,CAAG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hed-hog/contact-us",
|
|
3
|
-
"version": "0.0.
|
|
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
|
-
"@hed-hog/core": "0.0.266",
|
|
14
|
-
"@hed-hog/api": "0.0.4",
|
|
15
12
|
"@hed-hog/api-prisma": "0.0.5",
|
|
16
|
-
"@hed-hog/api-
|
|
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
|
".": {
|
package/src/contact-us.module.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { LocaleModule } from '@hed-hog/api-locale';
|
|
2
2
|
import { PaginationModule } from '@hed-hog/api-pagination';
|
|
3
3
|
import { PrismaModule } from '@hed-hog/api-prisma';
|
|
4
|
-
import { CoreModule } from '@hed-hog/core';
|
|
5
|
-
import { MailModule } from '@hed-hog/core/mail/mail.module';
|
|
4
|
+
import { CoreModule, MailModule } from '@hed-hog/core';
|
|
6
5
|
import { forwardRef, Module } from '@nestjs/common';
|
|
7
6
|
import { ContactUsController } from './contact-us.controller';
|
|
8
7
|
import { ContactUsService } from './contact-us.service';
|