Skip to content

Commit

Permalink
feat: 🔥 support deleting a user
Browse files Browse the repository at this point in the history
support deleting a user
  • Loading branch information
Tal Rofe committed May 30, 2022
1 parent 21d8cfb commit fac46bb
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 3 deletions.
1 change: 1 addition & 0 deletions apps/backend/envs/.env.development
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
NODE_ENV="development"
PORT="3000"
DATABASE_URL="mongodb://localhost:27017/dashboard?retryWrites=true&w=majority"
ACCESS_TOKEN_JWT_KEY="ACCESS"
REFRESH_TOKEN_JWT_KEY="REFRESH"
GOOGLE_OAUTH_CLIENT_ID="DUMMY"
Expand Down
4 changes: 2 additions & 2 deletions apps/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
"start": "dotenv -e ./envs/.env.production nest start",
"start:dev": "dotenv -e ./envs/.env.development nest start --watch",
"start:prod": "dotenv -e ./envs/.env.production node dist/main",
"prisma-gen:dev": "dotenv -e ./prisma/.env.development prisma generate --schema ./prisma/schema.prisma",
"prisma-gen:dev": "prisma generate --schema ./prisma/schema.prisma",
"prisma-gen:prod": "prisma generate --schema ./prisma/schema.prisma",
"prisma-push:dev": "dotenv -e ./prisma/.env.development prisma db push --schema ./prisma/schema.prisma",
"prisma-gen:prod": "dotenv -e ./prisma/.env.production prisma generate --schema ./prisma/schema.prisma",
"prisma-push:prod": "dotenv -e ./prisma/.env.production prisma db push --schema ./prisma/schema.prisma",
"lint": "eslint -c ./.eslintrc.cjs --ignore-path ./.eslintignore \"./**/*.ts\"",
"type-check": "tsc --project ./tsconfig.json",
Expand Down
4 changes: 4 additions & 0 deletions apps/backend/src/modules/database/user.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,8 @@ export class DBUserService {
await this.prisma.refreshToken.delete({ where: { id: firstTokenId } });
}
}

public async deleteUser(userId: string) {
await this.prisma.user.delete({ where: { id: userId } });
}
}
2 changes: 2 additions & 0 deletions apps/backend/src/modules/user/modules/auth/auth.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { GoogleController } from './google.controller';
import { GithubAuthGuard } from './guards/github-auth.guard';
import { GithubStrategy } from './strategies/github.strategy';
import { GithubController } from './github.controller';
import { DeleteController } from './delete.controller';

@Module({
imports: [
Expand All @@ -45,6 +46,7 @@ import { GithubController } from './github.controller';
RefreshTokenController,
GoogleController,
GithubController,
DeleteController,
],
providers: [
...QueryHandlers,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export class DeleteUserContract {
constructor(public readonly userId: string) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';

import { DBUserService } from '@/modules/database/user.service';

import { DeleteUserContract } from '../contracts/delete-user.contract';

@CommandHandler(DeleteUserContract)
export class DeleteUserHandler implements ICommandHandler<DeleteUserContract> {
constructor(private readonly dbUserService: DBUserService) {}

async execute(contract: DeleteUserContract) {
await this.dbUserService.deleteUser(contract.userId);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { AddRefreshTokenHandler } from './add-refresh-token.handler';
import { DeleteUserHandler } from './delete-user.handler';
import { RemoveOldRefreshTokensHandler } from './remove-old-refresh-tokens.handler';

export const CommandHandlers = [AddRefreshTokenHandler, RemoveOldRefreshTokensHandler];
export const CommandHandlers = [AddRefreshTokenHandler, RemoveOldRefreshTokensHandler, DeleteUserHandler];
22 changes: 22 additions & 0 deletions apps/backend/src/modules/user/modules/auth/delete.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Controller, Delete, HttpCode, HttpStatus, Logger } from '@nestjs/common';
import { CommandBus } from '@nestjs/cqrs';

import { CurrentUserId } from '@/decorators/current-user-id.decorator';
import { DeleteUserContract } from './commands/contracts/delete-user.contract';

@Controller('auth')
export class DeleteController {
private readonly logger = new Logger(DeleteController.name);

constructor(private readonly commandBus: CommandBus) {}

@Delete('delete')
@HttpCode(HttpStatus.OK)
public async register(@CurrentUserId() userId: string): Promise<void> {
this.logger.log(`Will try to delete a user with an Id: "${userId}"`);

await this.commandBus.execute<DeleteUserContract, void>(new DeleteUserContract(userId));

this.logger.log('Successfully deleted a user');
}
}

0 comments on commit fac46bb

Please sign in to comment.