From 9d931e0d96842c7682d5fcbcbc2acf7323ba6b03 Mon Sep 17 00:00:00 2001 From: SauravDhakal Date: Sat, 4 Apr 2026 08:27:34 +0545 Subject: [PATCH] fix: Move mail to src/ --- README.md | 104 ++--------------------------- package.json | 1 + pnpm-lock.yaml | 20 ++++++ roadmap.md | 2 + src/app.module.ts | 6 +- src/auth/auth.module.ts | 2 +- src/auth/auth.service.ts | 2 +- {core => src}/mail/mail.module.ts | 4 +- src/mail/mail.service.spec.ts | 18 +++++ {core => src}/mail/mail.service.ts | 2 +- 10 files changed, 57 insertions(+), 104 deletions(-) rename {core => src}/mail/mail.module.ts (52%) create mode 100644 src/mail/mail.service.spec.ts rename {core => src}/mail/mail.service.ts (96%) diff --git a/README.md b/README.md index 3ae04fd..d76c50a 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,8 @@ -

- Nest Logo -

+## Folder Structure -[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 -[circleci-url]: https://circleci.com/gh/nestjs/nest - -

A progressive Node.js framework for building efficient and scalable server-side applications.

-

-NPM Version -Package License -NPM Downloads -CircleCI -Discord -Backers on Open Collective -Sponsors on Open Collective - Donate us - Support us - Follow us on Twitter -

- - -## Description - -[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. - -## Project setup - -```bash -$ pnpm install -``` - -## Compile and run the project - -```bash -# development -$ pnpm run start - -# watch mode -$ pnpm run start:dev - -# production mode -$ pnpm run start:prod -``` - -## Run tests - -```bash -# unit tests -$ pnpm run test - -# e2e tests -$ pnpm run test:e2e - -# test coverage -$ pnpm run test:cov -``` - -## Deployment - -When you're ready to deploy your NestJS application to production, there are some key steps you can take to ensure it runs as efficiently as possible. Check out the [deployment documentation](https://docs.nestjs.com/deployment) for more information. - -If you are looking for a cloud-based platform to deploy your NestJS application, check out [Mau](https://mau.nestjs.com), our official platform for deploying NestJS applications on AWS. Mau makes deployment straightforward and fast, requiring just a few simple steps: - -```bash -$ pnpm install -g mau -$ mau deploy -``` - -With Mau, you can deploy your application in just a few clicks, allowing you to focus on building features rather than managing infrastructure. - -## Resources - -Check out a few resources that may come in handy when working with NestJS: - -- Visit the [NestJS Documentation](https://docs.nestjs.com) to learn more about the framework. -- For questions and support, please visit our [Discord channel](https://discord.gg/G7Qnnhy). -- To dive deeper and get more hands-on experience, check out our official video [courses](https://courses.nestjs.com/). -- Deploy your application to AWS with the help of [NestJS Mau](https://mau.nestjs.com) in just a few clicks. -- Visualize your application graph and interact with the NestJS application in real-time using [NestJS Devtools](https://devtools.nestjs.com). -- Need help with your project (part-time to full-time)? Check out our official [enterprise support](https://enterprise.nestjs.com). -- To stay in the loop and get updates, follow us on [X](https://x.com/nestframework) and [LinkedIn](https://linkedin.com/company/nestjs). -- Looking for a job, or have a job to offer? Check out our official [Jobs board](https://jobs.nestjs.com). - -## Support - -Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). - -## Stay in touch - -- Author - [Kamil Myśliwiec](https://twitter.com/kammysliwiec) -- Website - [https://nestjs.com](https://nestjs.com/) -- Twitter - [@nestframework](https://twitter.com/nestframework) - -## License - -Nest is [MIT licensed](https://github.com/nestjs/nest/blob/master/LICENSE). +/common + |-> Common stuff thats shared across +/core + |-> Infra/Setup for core functionality thats also shared +/src + |-> Modules, that are service specific diff --git a/package.json b/package.json index 0ad92f9..2b446fa 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@nestjs/cache-manager": "^3.1.0", "@nestjs/common": "^11.0.1", "@nestjs/core": "^11.0.1", + "@nestjs/event-emitter": "^3.0.1", "@nestjs/jwt": "^11.0.2", "@nestjs/platform-express": "^11.0.1", "@nestjs/swagger": "^11.2.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61f295d..73abac0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@nestjs/core': specifier: ^11.0.1 version: 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/event-emitter': + specifier: ^3.0.1 + version: 3.0.1(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13) '@nestjs/jwt': specifier: ^11.0.2 version: 11.0.2(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)) @@ -888,6 +891,12 @@ packages: '@nestjs/websockets': optional: true + '@nestjs/event-emitter@3.0.1': + resolution: {integrity: sha512-0Ln/x+7xkU6AJFOcQI9tIhUMXVF7D5itiaQGOyJbXtlAfAIt8gzDdJm+Im7cFzKoWkiW5nCXCPh6GSvdQd/3Dw==} + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/core': ^10.0.0 || ^11.0.0 + '@nestjs/jwt@11.0.2': resolution: {integrity: sha512-rK8aE/3/Ma45gAWfCksAXUNbOoSOUudU0Kn3rT39htPF7wsYXtKfjALKeKKJbFrIWbLjsbqfXX5bIJNvgBugGA==} peerDependencies: @@ -2127,6 +2136,9 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + eventemitter2@6.4.9: + resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + events-universal@1.0.1: resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} @@ -4775,6 +4787,12 @@ snapshots: optionalDependencies: '@nestjs/platform-express': 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13) + '@nestjs/event-emitter@3.0.1(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)': + dependencies: + '@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2) + eventemitter2: 6.4.9 + '@nestjs/jwt@11.0.2(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))': dependencies: '@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -6141,6 +6159,8 @@ snapshots: etag@1.8.1: {} + eventemitter2@6.4.9: {} + events-universal@1.0.1: dependencies: bare-events: 2.8.2 diff --git a/roadmap.md b/roadmap.md index 4782c6e..1e2808e 100644 --- a/roadmap.md +++ b/roadmap.md @@ -11,8 +11,10 @@ Worker processes it: A separate background worker picks up the job, tries to send the email, and automatically handles retries if it fails. ``` + ``` +2. Also an API of my own # 🏗️ SaaS Architect’s Roadmap: NestJS & DevOps diff --git a/src/app.module.ts b/src/app.module.ts index dd7812c..c766dd6 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -14,7 +14,8 @@ import { OrganizationModule } from './organization/organization.module'; import { OrganizationMembershipModule } from './organization-membership/organization-membership.module'; import { AuthorizationModule } from './authorization/authorization.module'; import { CacheModule } from './cache/cache.module'; -import { MailModule } from 'core/mail/mail.module'; +import { EventEmitterModule } from '@nestjs/event-emitter'; +import { MailModule } from './mail/mail.module'; @Module({ imports: [ @@ -29,7 +30,8 @@ import { MailModule } from 'core/mail/mail.module'; OrganizationMembershipModule, AuthorizationModule, CacheModule, - MailModule + MailModule, + EventEmitterModule.forRoot() ], controllers: [AppController], providers: [ diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 49b8483..7e2b83f 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -6,7 +6,7 @@ import { AuthGuard } from './guards/auth.guard'; import { UserModule } from 'src/user/user.module'; import { JwtModule } from '@nestjs/jwt'; import { RequestContextModule } from 'core/als/request-context.module'; -import { MailModule } from 'core/mail/mail.module'; +import { MailModule } from 'src/mail/mail.module'; @Global() @Module({ diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 94ce549..317bd3a 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -5,8 +5,8 @@ import * as bcrypt from 'bcrypt'; import { UserService } from 'src/user/user.service'; import { TokenInputType } from './types'; import { JwtService } from '@nestjs/jwt'; -import { MailService } from 'core/mail/mail.service'; import EmailTemplates from 'common/emails'; +import { MailService } from 'src/mail/mail.service'; @Injectable() @Public() diff --git a/core/mail/mail.module.ts b/src/mail/mail.module.ts similarity index 52% rename from core/mail/mail.module.ts rename to src/mail/mail.module.ts index 286f471..2631d18 100644 --- a/core/mail/mail.module.ts +++ b/src/mail/mail.module.ts @@ -1,5 +1,5 @@ -import { Module } from "@nestjs/common"; -import { MailService } from "./mail.service"; +import { Module } from '@nestjs/common'; +import { MailService } from './mail.service'; @Module({ providers: [MailService], diff --git a/src/mail/mail.service.spec.ts b/src/mail/mail.service.spec.ts new file mode 100644 index 0000000..4297913 --- /dev/null +++ b/src/mail/mail.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MailService } from './mail.service'; + +describe('MailService', () => { + let service: MailService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [MailService], + }).compile(); + + service = module.get(MailService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/core/mail/mail.service.ts b/src/mail/mail.service.ts similarity index 96% rename from core/mail/mail.service.ts rename to src/mail/mail.service.ts index d823f3d..aaca171 100644 --- a/core/mail/mail.service.ts +++ b/src/mail/mail.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from "@nestjs/common"; +import { Injectable } from '@nestjs/common'; import { ConfigService } from "@nestjs/config"; import * as nodemailer from "nodemailer";