update webhook
This commit is contained in:
26
src/Clerk/clerk.controller.ts
Normal file
26
src/Clerk/clerk.controller.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import {
|
||||||
|
Controller,
|
||||||
|
Get,
|
||||||
|
Post,
|
||||||
|
Put,
|
||||||
|
Delete,
|
||||||
|
Param,
|
||||||
|
Body,
|
||||||
|
Headers,
|
||||||
|
} from '@nestjs/common';
|
||||||
|
import { ClerkService } from './clerk.service';
|
||||||
|
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
|
||||||
|
@ApiTags('Clerk')
|
||||||
|
@Controller('clerk')
|
||||||
|
export class ClerkController {
|
||||||
|
constructor(private readonly clerkService: ClerkService) {}
|
||||||
|
|
||||||
|
@Post('webhook')
|
||||||
|
@ApiOperation({ summary: 'Clerk Webhook' })
|
||||||
|
@ApiResponse({ status: 200, description: 'Webhook created successfully' })
|
||||||
|
webhook(@Body() body: any) {
|
||||||
|
return this.clerkService.webhook(body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ClerkController;
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Module, Global } from '@nestjs/common';
|
import { Module, Global } from '@nestjs/common';
|
||||||
import Clerk from '@clerk/clerk-sdk-node';
|
import Clerk from '@clerk/clerk-sdk-node';
|
||||||
|
import { ClerkService } from './clerk.service';
|
||||||
|
import ClerkController from './clerk.controller';
|
||||||
@Global()
|
@Global()
|
||||||
@Module({
|
@Module({
|
||||||
providers: [
|
providers: [
|
||||||
@@ -8,7 +9,9 @@ import Clerk from '@clerk/clerk-sdk-node';
|
|||||||
provide: 'CLERK',
|
provide: 'CLERK',
|
||||||
useValue: Clerk,
|
useValue: Clerk,
|
||||||
},
|
},
|
||||||
|
ClerkService,
|
||||||
],
|
],
|
||||||
exports: ['CLERK'],
|
controllers: [ClerkController],
|
||||||
|
exports: ['CLERK', ClerkService],
|
||||||
})
|
})
|
||||||
export class ClerkModule {}
|
export class ClerkModule {}
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { PrismaService } from '../Prisma/prisma.service';
|
||||||
|
@Injectable()
|
||||||
|
export class ClerkService {
|
||||||
|
constructor(private readonly prisma: PrismaService) {}
|
||||||
|
webhook(body: any) {
|
||||||
|
// get the event type
|
||||||
|
const eventType = body.type;
|
||||||
|
// dispatch the event
|
||||||
|
this.dispatchEvent(eventType, body.data);
|
||||||
|
return { message: `Webhook received: ${eventType}` };
|
||||||
|
}
|
||||||
|
// dispatch the event
|
||||||
|
dispatchEvent(eventType: string, data: any) {
|
||||||
|
// event types:
|
||||||
|
// user.created
|
||||||
|
// user.updated
|
||||||
|
// session.created
|
||||||
|
// session.revoked
|
||||||
|
// session.removed
|
||||||
|
// session.ended
|
||||||
|
// email.created
|
||||||
|
console.log(eventType, data);
|
||||||
|
if (eventType === 'user.created') {
|
||||||
|
this.eventUserCreated(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventType === 'user.updated') {
|
||||||
|
this.eventUserUpdated(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventType === 'session.created') {
|
||||||
|
this.eventSessionCreated(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventType === 'session.revoked') {
|
||||||
|
this.eventSessionRevoked(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventType === 'session.removed') {
|
||||||
|
this.eventSessionRemoved(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventType === 'session.ended') {
|
||||||
|
this.eventSessionEnded(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventType === 'email.created') {
|
||||||
|
this.eventEmailCreated(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async eventUserCreated(data: any) {
|
||||||
|
console.log(data);
|
||||||
|
// create a user in the database
|
||||||
|
const primary_email_address_id = data.primary_email_address_id;
|
||||||
|
// get primary email address on email_addresses by querying email_addresses with primary_email_address_id
|
||||||
|
let primary_email_address = data.email_addresses.find(
|
||||||
|
(email: any) => email.id === primary_email_address_id,
|
||||||
|
);
|
||||||
|
console.log(primary_email_address);
|
||||||
|
if (!primary_email_address) {
|
||||||
|
primary_email_address = '';
|
||||||
|
}
|
||||||
|
// get user id
|
||||||
|
const user_id = data.id;
|
||||||
|
// get created at and convert to date
|
||||||
|
const created_at = new Date(data.created_at);
|
||||||
|
// get name by combining first_name and last_name
|
||||||
|
const name = `${data.first_name} ${data.last_name}`;
|
||||||
|
const role = 'CUSTOMER';
|
||||||
|
const phoneNumber = '';
|
||||||
|
// create user in database
|
||||||
|
await this.prisma.user.create({
|
||||||
|
data: {
|
||||||
|
id: user_id,
|
||||||
|
email: primary_email_address.email_address ?? '',
|
||||||
|
name: name ?? '',
|
||||||
|
role: role ?? '',
|
||||||
|
createdAt: created_at,
|
||||||
|
phoneNumber: phoneNumber ?? '',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
eventUserUpdated(data: any) {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventSessionCreated(data: any) {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventSessionRevoked(data: any) {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventSessionRemoved(data: any) {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventSessionEnded(data: any) {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventEmailCreated(data: any) {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
|
|||||||
export class RestfulController {
|
export class RestfulController {
|
||||||
constructor(private readonly restfulService: RestfulService) {}
|
constructor(private readonly restfulService: RestfulService) {}
|
||||||
|
|
||||||
// @Get()
|
@Get()
|
||||||
// @ApiOperation({ summary: 'Get all items' })
|
@ApiOperation({ summary: 'Get all items' })
|
||||||
// @ApiResponse({ status: 200, description: 'Returns all items.' })
|
@ApiResponse({ status: 200, description: 'Returns all items.' })
|
||||||
// getAllItems() {
|
getAllItems() {
|
||||||
// return this.restfulService.getAllItems();
|
return this.restfulService.getAllItems();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// @Get(':id')
|
// @Get(':id')
|
||||||
// @ApiOperation({ summary: 'Get an item by ID' })
|
// @ApiOperation({ summary: 'Get an item by ID' })
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { RestfulController } from './restful.controller';
|
import { RestfulController } from './restful.controller';
|
||||||
import { RestfulService } from './restful.service';
|
import { RestfulService } from './restful.service';
|
||||||
|
import { ClerkModule } from '../Clerk/clerk.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
|
imports: [ClerkModule],
|
||||||
controllers: [RestfulController],
|
controllers: [RestfulController],
|
||||||
providers: [RestfulService],
|
providers: [RestfulService],
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RestfulService {}
|
export class RestfulService {
|
||||||
|
getAllItems() {
|
||||||
|
throw new Error('Method not implemented.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user