Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,14 @@
"@nestjs/common": "^8.0.0",
"@nestjs/core": "^8.0.0",
"@nestjs/platform-express": "^8.0.0",
"@nestjs/schedule": "^1.0.1",
"bcrypt": "^5.0.1",
"class-validator": "^0.13.1",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"handlebars": "^4.7.7",
"jsonwebtoken": "^8.5.1",
"node-cron": "^3.0.0",
"nodemailer": "^6.6.3",
"pg": "^8.7.1",
"pg-promise": "^10.11.0",
Expand Down
22 changes: 0 additions & 22 deletions src/app.controller.spec.ts

This file was deleted.

13 changes: 11 additions & 2 deletions src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserAuthModule } from './user-auth/user-auth.module';
import { UserAuthModule } from './userAuth/userAuth.module';
import { PasswordModule } from './password/password.module';
import { UserGroupModule } from './user-group/user-group.module';
import { CronModule } from './schedule/schedule.module';
import { ScheduleModule } from '@nestjs/schedule';

@Module({
imports: [UserAuthModule, PasswordModule],
imports: [
UserAuthModule,
PasswordModule,
UserGroupModule,
CronModule,
ScheduleModule.forRoot(),
],
controllers: [AppController],
providers: [AppService],
})
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Body, Controller, Post, Req } from '@nestjs/common';
import { ChangePasswordDto } from 'src/password/dto/changePassword.dto';
import { ChangePasswordDto } from '../password/dto/changePassword.dto';
import { Request } from 'express';
import { PasswordService } from './password.service';

Expand All @@ -16,11 +16,8 @@ export class PasswordController {
}

@Post('sendmail')
async forgotPassword(
@Body() password: ChangePasswordDto,
@Req() req: Request,
) {
return await this.passwordService.forgotPassword(password, req);
async forgotPassword(@Req() req: Request) {
return await this.passwordService.forgotPassword(req);
}

@Post('forgotpassword')
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Body, Injectable, Req } from '@nestjs/common';
import { Body, Injectable } from '@nestjs/common';
import * as jwt from 'jsonwebtoken';
import * as nodemailer from 'nodemailer';
import { Request } from 'express';
import { ChangePasswordDto } from 'src/password/dto/changePassword.dto';
import { client } from 'src/database/database.module';
import { resMessage } from 'src/user-auth/helper/resMessage';
import { ChangePasswordDto } from '../password/dto/changePassword.dto';
import { client } from 'src/modules/database/database.module';
import { resMessage } from '../userAuth/helper/resMessage';

@Injectable()
export class PasswordService {
Expand All @@ -13,7 +12,7 @@ export class PasswordService {
* @param password oldPassword and NewPassword
* @returns Password Status
*/
async changePassword(password: ChangePasswordDto, @Req() req: Request) {
async changePassword(password: ChangePasswordDto, req) {
const oldPassword = password.oldpassword;
const newPassword = password.newpassword;

Expand All @@ -34,7 +33,7 @@ export class PasswordService {
}
}

async forgotPassword(password: ChangePasswordDto, @Req() req: Request) {
async forgotPassword(req) {
const email = req.body.email;
if (email) {
const transporter = nodemailer.createTransport({
Expand Down Expand Up @@ -68,8 +67,8 @@ export class PasswordService {
}
}

async setPassword(@Body() password: ChangePasswordDto, @Req() req: Request) {
const newPassword = req.body.newpassword;
async setPassword(@Body() password: ChangePasswordDto, req) {
const newPassword = password.newpassword;

const bearerHeader = req.headers.authorization.replace('Bearer ', '');
const jwtData = jwt.verify(bearerHeader, process.env.ACCESS_TOKEN);
Expand Down
7 changes: 7 additions & 0 deletions src/modules/schedule/schedule.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { Module } from '@nestjs/common';
import { ScheduleService } from './schedule.service';

@Module({
providers: [ScheduleService],
})
export class CronModule {}
17 changes: 17 additions & 0 deletions src/modules/schedule/schedule.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Injectable, Logger } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';

@Injectable()
export class ScheduleService {
private readonly logger = new Logger(ScheduleService.name);

@Cron(CronExpression.EVERY_DAY_AT_10AM)
handleCron() {
this.logger.debug("Let's go for Coffee");
}

@Cron(CronExpression.EVERY_DAY_AT_9AM)
handleNewCron() {
console.log('Good Morning !');
}
}
11 changes: 11 additions & 0 deletions src/modules/user-group/dto/createGroup.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { IsNotEmpty, IsOptional, IsString } from 'class-validator';

export class CreateGroupDto {
@IsNotEmpty()
@IsString()
groupName: string;

@IsString()
@IsNotEmpty()
member1: string;
}
25 changes: 25 additions & 0 deletions src/modules/user-group/dto/groupMember.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { IsBoolean, IsNotEmpty, IsString } from 'class-validator';

export class GroupMemberDto {
@IsString()
@IsNotEmpty()
id: string;

@IsString()
@IsNotEmpty()
member_id: string;

@IsString()
@IsNotEmpty()
group_id: string;

@IsString()
@IsBoolean()
@IsNotEmpty()
is_admin: boolean;

@IsString()
@IsBoolean()
@IsNotEmpty()
is_super_admin: boolean;
}
29 changes: 29 additions & 0 deletions src/modules/user-group/user-group.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { Controller, Delete, Post, Put, Req } from '@nestjs/common';
import { Request } from 'express';
import { CreateGroupDto } from './dto/createGroup.dto';
import { UserGroupService } from './user-group.service';

@Controller('api')
export class UserGroupController {
constructor(private userGroupService: UserGroupService) {}

@Post('create-group')
async createGroup(createGroup: CreateGroupDto, @Req() req: Request) {
return await this.userGroupService.createGroup(createGroup, req);
}

@Post('add-members')
async addMembers(@Req() req: Request) {
return await this.userGroupService.addMember(req);
}

@Put('make-admin')
async makeAdmin(@Req() req: Request) {
return await this.userGroupService.makeAdmin(req);
}

@Delete('remove-member')
async removeMember(@Req() req: Request) {
return await this.userGroupService.removeMember(req);
}
}
9 changes: 9 additions & 0 deletions src/modules/user-group/user-group.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { Module } from '@nestjs/common';
import { UserGroupController } from './user-group.controller';
import { UserGroupService } from './user-group.service';

@Module({
controllers: [UserGroupController],
providers: [UserGroupService],
})
export class UserGroupModule {}
82 changes: 82 additions & 0 deletions src/modules/user-group/user-group.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import { Injectable, Req } from '@nestjs/common';
import * as jwt from 'jsonwebtoken';
import { client } from 'src/modules/database/database.module';
import { v4 as uuidv4 } from 'uuid';
import { CreateGroupDto } from './dto/createGroup.dto';

@Injectable()
export class UserGroupService {
async createGroup(createGroup: CreateGroupDto, req) {
const groupName = createGroup.groupName;

try {
const groupDetails = await client.query(
`INSERT INTO group_info (group_id, group_name) VALUES ('${uuidv4()}', '${groupName}')`,
);
} catch {
return { message: 'GroupName Already Exists' };
}

const groupid = await client.query(
`SELECT group_id FROM group_info WHERE group_name='${groupName}'`,
);

const bearerHeader = req.headers.authorization.replace('Bearer ', '');
const jwtData = jwt.verify(bearerHeader, process.env.ACCESS_TOKEN);

const user_id = await client.query(
`SELECT id FROM userdata WHERE email='${jwtData['email']}'`,
);

const groupAdminDetails = await client.query(
`INSERT INTO group_member (id, member_id, group_id, is_admin, is_super_admin) VALUES ('${uuidv4()}', '${
user_id.rows[0]['id']
}', '${groupid.rows[0]['group_id']}', true, true)`,
);
return { message: 'Group Created' };
}

async addMember(req) {
const groupMember = req.body.member;
const groupName = req.body.groupname;
const groupMemberAdmin = req.body.isadmin;

const groupid = await client.query(
`SELECT group_id FROM group_info WHERE group_name='${groupName}'`,
);

try {
const existGroupId = await client.query(
`SELECT group_id FROM group_member WHERE member_id='${groupMemberAdmin}'`,
);
} catch {
return { message: 'User Already in Group' };
}

const groupMemberDetails = await client.query(
`INSERT INTO group_member (id, member_id, group_id, is_admin, is_super_admin) VALUES ('${uuidv4()}', '${groupMember}', '${
groupid.rows[0]['group_id']
}', '${groupMemberAdmin}', false)`,
);
return { message: 'Member Added' };
}

async makeAdmin(req) {
const groupMember = req.body.member;
const groupMemberAdmin = req.body.isadmin;

const makeAdmin = await client.query(
`UPDATE group_member SET is_admin='${groupMemberAdmin}' WHERE member_id='${groupMember}'`,
);
return { message: 'Admin Added' };
}

async removeMember(req) {
const groupMember = req.body.member;

const removeMember = await client.query(
`DELETE FROM group_member WHERE member_id='${groupMember}'`,
);
return { message: 'Removed Successfully' };
}
}
File renamed without changes.
Loading