diff --git a/package.json b/package.json index 13f8220a..5b7791d9 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "dev:server": "tsnd --respawn --transpile-only --ignore-watch node_modules --exit-child --clear -r tsconfig-paths/register src/infra/http/server.ts", "dev:worker": "tsnd --respawn --transpile-only --ignore-watch node_modules --exit-child --clear -r tsconfig-paths/register src/infra/queue/worker.ts", "dev:kafka": "tsnd --respawn --transpile-only --ignore-watch node_modules --exit-child --clear -r tsconfig-paths/register src/infra/kafka/app.ts", + "dev:webhook": "tsnd --respawn --transpile-only --ignore-watch node_modules --exit-child --clear -r tsconfig-paths/register src/infra/sns-webhook/server.ts", "start": "node dist/infra/http/server.js", "lint": "eslint src --ext ts,tsx", "test": "jest", diff --git a/scripts/webhook.sh b/scripts/webhook.sh new file mode 100644 index 00000000..f121427c --- /dev/null +++ b/scripts/webhook.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +(cd /home/node/app && node_modules/.bin/prisma migrate deploy) +(cd /home/node/app && node_modules/.bin/prisma generate) +(cd /home/node/app && node dist/infra/sns-webhook/server.js) diff --git a/src/infra/http/adapters/ExpressMiddlewareAdapter.ts b/src/core/infra/adapters/ExpressMiddlewareAdapter.ts similarity index 100% rename from src/infra/http/adapters/ExpressMiddlewareAdapter.ts rename to src/core/infra/adapters/ExpressMiddlewareAdapter.ts diff --git a/src/infra/http/adapters/ExpressRouteAdapter.ts b/src/core/infra/adapters/ExpressRouteAdapter.ts similarity index 100% rename from src/infra/http/adapters/ExpressRouteAdapter.ts rename to src/core/infra/adapters/ExpressRouteAdapter.ts diff --git a/src/infra/http/routes/contacts.routes.ts b/src/infra/http/routes/contacts.routes.ts index 68446b3a..eace3ea3 100644 --- a/src/infra/http/routes/contacts.routes.ts +++ b/src/infra/http/routes/contacts.routes.ts @@ -1,7 +1,8 @@ import express from 'express' -import { adaptMiddleware } from '../adapters/ExpressMiddlewareAdapter' -import { adaptRoute } from '../adapters/ExpressRouteAdapter' +import { adaptMiddleware } from '@core/infra/adapters/ExpressMiddlewareAdapter' +import { adaptRoute } from '@core/infra/adapters/ExpressRouteAdapter' + import { makeBlockContactController } from '../factories/controllers/BlockContactControllerFactory' import { makeCreateContactController } from '../factories/controllers/CreateContactControllerFactory' import { makeGetContactDetailsController } from '../factories/controllers/GetContactDetailsControllerFactory' diff --git a/src/infra/http/routes/events.routes.ts b/src/infra/http/routes/events.routes.ts deleted file mode 100644 index b1db2409..00000000 --- a/src/infra/http/routes/events.routes.ts +++ /dev/null @@ -1,16 +0,0 @@ -import express from 'express' - -import { adaptMiddleware } from '../adapters/ExpressMiddlewareAdapter' -import { adaptRoute } from '../adapters/ExpressRouteAdapter' -import { makeRegisterEventController } from '../factories/controllers/RegisterEventControllerFactory' -import { makeAmazonSNSValidatorMiddleware } from '../factories/middlewares/AmazonSNSValidatorMiddlewareFactory' - -const eventsRouter = express.Router() - -eventsRouter.post( - '/notifications', - adaptMiddleware(makeAmazonSNSValidatorMiddleware()), - adaptRoute(makeRegisterEventController()) -) - -export { eventsRouter } diff --git a/src/infra/http/routes/index.ts b/src/infra/http/routes/index.ts index 174efbff..0b5c3e8b 100644 --- a/src/infra/http/routes/index.ts +++ b/src/infra/http/routes/index.ts @@ -1,7 +1,6 @@ import { Router } from 'express' import { contactsRouter } from './contacts.routes' -import { eventsRouter } from './events.routes' import { messagesRouter } from './messages.routes' import { recipientsRouter } from './recipients.routes' import { sendersRouter } from './senders.routes' @@ -15,7 +14,6 @@ const router = Router() router.use('/users', usersRouter) router.use('/sessions', sessionsRouter) router.use('/messages', messagesRouter) -router.use('/events', eventsRouter) router.use('/contacts', contactsRouter) router.use('/senders', sendersRouter) router.use('/tags', tagsRouter) diff --git a/src/infra/http/routes/messages.routes.ts b/src/infra/http/routes/messages.routes.ts index 5c90bc29..3ff87bb6 100644 --- a/src/infra/http/routes/messages.routes.ts +++ b/src/infra/http/routes/messages.routes.ts @@ -1,7 +1,8 @@ import express from 'express' -import { adaptMiddleware } from '../adapters/ExpressMiddlewareAdapter' -import { adaptRoute } from '../adapters/ExpressRouteAdapter' +import { adaptMiddleware } from '@core/infra/adapters/ExpressMiddlewareAdapter' +import { adaptRoute } from '@core/infra/adapters/ExpressRouteAdapter' + import { makeCreateMessageController } from '../factories/controllers/CreateMessageControllerFactory' import { makeGetMessageDetailsController } from '../factories/controllers/GetMessageDetailsControllerFactory' import { makeGetMessageStatsController } from '../factories/controllers/GetMessageStatsControllerFactory' diff --git a/src/infra/http/routes/recipients.routes.ts b/src/infra/http/routes/recipients.routes.ts index cb9190a5..a331abd5 100644 --- a/src/infra/http/routes/recipients.routes.ts +++ b/src/infra/http/routes/recipients.routes.ts @@ -1,7 +1,8 @@ import express from 'express' -import { adaptMiddleware } from '../adapters/ExpressMiddlewareAdapter' -import { adaptRoute } from '../adapters/ExpressRouteAdapter' +import { adaptMiddleware } from '@core/infra/adapters/ExpressMiddlewareAdapter' +import { adaptRoute } from '@core/infra/adapters/ExpressRouteAdapter' + import { makeCountRecipientsFromTagsController } from '../factories/controllers/CountRecipientsFromTagsControllerFactory' import { makeEnsureAuthenticatedMiddleware } from '../factories/middlewares/EnsureAuthenticatedMiddlewareFactory' diff --git a/src/infra/http/routes/senders.routes.ts b/src/infra/http/routes/senders.routes.ts index 94ccd5c5..182e7f6d 100644 --- a/src/infra/http/routes/senders.routes.ts +++ b/src/infra/http/routes/senders.routes.ts @@ -1,7 +1,8 @@ import express from 'express' -import { adaptMiddleware } from '../adapters/ExpressMiddlewareAdapter' -import { adaptRoute } from '../adapters/ExpressRouteAdapter' +import { adaptMiddleware } from '@core/infra/adapters/ExpressMiddlewareAdapter' +import { adaptRoute } from '@core/infra/adapters/ExpressRouteAdapter' + import { makeCreateSenderController } from '../factories/controllers/CreateSenderControllerFactory' import { makeGetAllSendersController } from '../factories/controllers/GetAllSendersControllerFactory' import { makeRemoveSenderController } from '../factories/controllers/RemoveSenderControllerFactory' diff --git a/src/infra/http/routes/sessions.routes.ts b/src/infra/http/routes/sessions.routes.ts index 301ec31f..c42b06a1 100644 --- a/src/infra/http/routes/sessions.routes.ts +++ b/src/infra/http/routes/sessions.routes.ts @@ -1,6 +1,7 @@ import express from 'express' -import { adaptRoute } from '../adapters/ExpressRouteAdapter' +import { adaptRoute } from '@core/infra/adapters/ExpressRouteAdapter' + import { makeAuthenticateUserController } from '../factories/controllers/AuthenticateUserControllerFactory' const sessionsRouter = express.Router() diff --git a/src/infra/http/routes/tags.routes.ts b/src/infra/http/routes/tags.routes.ts index 481bc5fb..a4497ec1 100644 --- a/src/infra/http/routes/tags.routes.ts +++ b/src/infra/http/routes/tags.routes.ts @@ -1,7 +1,7 @@ import express from 'express' -import { adaptMiddleware } from '../adapters/ExpressMiddlewareAdapter' -import { adaptRoute } from '../adapters/ExpressRouteAdapter' +import { adaptMiddleware } from '@core/infra/adapters/ExpressMiddlewareAdapter' +import { adaptRoute } from '@core/infra/adapters/ExpressRouteAdapter' import { makeCreateTagController } from '../factories/controllers/CreateTagControllerFactory' import { makeGetAllTagsController } from '../factories/controllers/GetAllTagsControllerFactory' import { makeSearchTagsController } from '../factories/controllers/SearchTagsControllerFactory' diff --git a/src/infra/http/routes/templates.routes.ts b/src/infra/http/routes/templates.routes.ts index fbbc5c82..052ae85d 100644 --- a/src/infra/http/routes/templates.routes.ts +++ b/src/infra/http/routes/templates.routes.ts @@ -1,7 +1,7 @@ import express from 'express' -import { adaptMiddleware } from '../adapters/ExpressMiddlewareAdapter' -import { adaptRoute } from '../adapters/ExpressRouteAdapter' +import { adaptMiddleware } from '@core/infra/adapters/ExpressMiddlewareAdapter' +import { adaptRoute } from '@core/infra/adapters/ExpressRouteAdapter' import { makeCreateTemplateController } from '../factories/controllers/CreateTemplateControllerFactory' import { makeGetAllTemplatesController } from '../factories/controllers/GetAllTemplatesControllerFactory' import { makePreviewTemplateController } from '../factories/controllers/PreviewTemplateControllerFactory' diff --git a/src/infra/http/routes/users.routes.ts b/src/infra/http/routes/users.routes.ts index 88cbd629..d13f9102 100644 --- a/src/infra/http/routes/users.routes.ts +++ b/src/infra/http/routes/users.routes.ts @@ -1,7 +1,7 @@ import express from 'express' -import { adaptMiddleware } from '../adapters/ExpressMiddlewareAdapter' -import { adaptRoute } from '../adapters/ExpressRouteAdapter' +import { adaptMiddleware } from '@core/infra/adapters/ExpressMiddlewareAdapter' +import { adaptRoute } from '@core/infra/adapters/ExpressRouteAdapter' import { makeRegisterUserController } from '../factories/controllers/RegisterUserControllerFactory' import { makeEnsureAuthenticatedMiddleware } from '../factories/middlewares/EnsureAuthenticatedMiddlewareFactory' diff --git a/src/infra/sns-webhook/app.ts b/src/infra/sns-webhook/app.ts new file mode 100644 index 00000000..6685f20e --- /dev/null +++ b/src/infra/sns-webhook/app.ts @@ -0,0 +1,25 @@ +import cors from 'cors' +import { config } from 'dotenv-flow' +import express from 'express' + +config({ silent: true }) + +import { router } from './routes' // eslint-disable-line + +const app = express() + +app.use( + cors({ + exposedHeaders: ['x-total-count', 'Content-Type', 'Content-Length'], + }) +) + +app.use( + express.json({ + type: ['application/json', 'text/plain'], + }) +) + +app.use(router) + +export { app } diff --git a/src/infra/http/factories/controllers/RegisterEventControllerFactory.ts b/src/infra/sns-webhook/factories/controllers/RegisterEventControllerFactory.ts similarity index 100% rename from src/infra/http/factories/controllers/RegisterEventControllerFactory.ts rename to src/infra/sns-webhook/factories/controllers/RegisterEventControllerFactory.ts diff --git a/src/infra/http/factories/middlewares/AmazonSNSValidatorMiddlewareFactory.ts b/src/infra/sns-webhook/factories/middlewares/AmazonSNSValidatorMiddlewareFactory.ts similarity index 68% rename from src/infra/http/factories/middlewares/AmazonSNSValidatorMiddlewareFactory.ts rename to src/infra/sns-webhook/factories/middlewares/AmazonSNSValidatorMiddlewareFactory.ts index b41a5936..884d7bc9 100644 --- a/src/infra/http/factories/middlewares/AmazonSNSValidatorMiddlewareFactory.ts +++ b/src/infra/sns-webhook/factories/middlewares/AmazonSNSValidatorMiddlewareFactory.ts @@ -1,5 +1,5 @@ import { Middleware } from '@core/infra/Middleware' -import { AmazonSNSValidatorMiddleware } from '@infra/http/middlewares/AmazonSNSValidatorMiddleware' +import { AmazonSNSValidatorMiddleware } from '@infra/sns-webhook/middlewares/AmazonSNSValidatorMiddleware' export function makeAmazonSNSValidatorMiddleware(): Middleware { const amazonSNSValidatorMiddleware = new AmazonSNSValidatorMiddleware() diff --git a/src/infra/http/middlewares/AmazonSNSValidatorMiddleware.ts b/src/infra/sns-webhook/middlewares/AmazonSNSValidatorMiddleware.ts similarity index 100% rename from src/infra/http/middlewares/AmazonSNSValidatorMiddleware.ts rename to src/infra/sns-webhook/middlewares/AmazonSNSValidatorMiddleware.ts diff --git a/src/infra/sns-webhook/routes.ts b/src/infra/sns-webhook/routes.ts new file mode 100644 index 00000000..0945c093 --- /dev/null +++ b/src/infra/sns-webhook/routes.ts @@ -0,0 +1,17 @@ +import express from 'express' + +import { adaptMiddleware } from '@core/infra/adapters/ExpressMiddlewareAdapter' +import { adaptRoute } from '@core/infra/adapters/ExpressRouteAdapter' + +import { makeRegisterEventController } from './factories/controllers/RegisterEventControllerFactory' +import { makeAmazonSNSValidatorMiddleware } from './factories/middlewares/AmazonSNSValidatorMiddlewareFactory' + +const router = express.Router() + +router.post( + '/events/notifications', + adaptMiddleware(makeAmazonSNSValidatorMiddleware()), + adaptRoute(makeRegisterEventController()) +) + +export { router } diff --git a/src/infra/sns-webhook/server.ts b/src/infra/sns-webhook/server.ts new file mode 100644 index 00000000..05d3d97b --- /dev/null +++ b/src/infra/sns-webhook/server.ts @@ -0,0 +1,5 @@ +import { app } from './app' + +app.listen(process.env.PORT, () => { + console.log(`Server running on http://localhost:${process.env.PORT}`) +}) diff --git a/src/modules/broadcasting/useCases/RegisterEvent/RegisterEventController.spec.ts b/src/modules/broadcasting/useCases/RegisterEvent/RegisterEventController.spec.ts index 6b620b02..4ec9272c 100644 --- a/src/modules/broadcasting/useCases/RegisterEvent/RegisterEventController.spec.ts +++ b/src/modules/broadcasting/useCases/RegisterEvent/RegisterEventController.spec.ts @@ -5,9 +5,9 @@ import request from 'supertest' import { v4 as uuid } from 'uuid' -import { app } from '@infra/http/app' import { prisma } from '@infra/prisma/client' import { redisConnection } from '@infra/redis/connection' +import { app } from '@infra/sns-webhook/app' import { validEventTypes } from '../../domain/event/type'