feat: add user service
This commit is contained in:
parent
e7292e7f74
commit
4b24ffc373
@ -17,6 +17,7 @@ import { AuthModule } from './modules/auth/auth.module'
|
||||
import { OtpModule } from './modules/otp/otp.module'
|
||||
import { TelegramModule } from './modules/telegram/telegram.module'
|
||||
import { TokenModule } from './modules/token/token.module'
|
||||
import { UsersModule } from './modules/users/users.module'
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
@ -28,10 +29,11 @@ import { TokenModule } from './modules/token/token.module'
|
||||
RedisModule,
|
||||
AuthModule,
|
||||
OtpModule,
|
||||
UsersModule,
|
||||
AccountModule,
|
||||
TelegramModule,
|
||||
TokenModule,
|
||||
MessagingModule
|
||||
MessagingModule,
|
||||
]
|
||||
})
|
||||
export class AppModule {}
|
||||
|
||||
5
src/config/env/grpc.env.ts
vendored
5
src/config/env/grpc.env.ts
vendored
@ -10,6 +10,9 @@ export const grpcEnv = registerAs<GrpcConfig>('grpc', () => {
|
||||
|
||||
return {
|
||||
host: process.env.GRPC_HOST,
|
||||
port: parseInt(process.env.GRPC_PORT)
|
||||
port: parseInt(process.env.GRPC_PORT),
|
||||
clients: {
|
||||
users: process.env.USERS_GRPC_URL
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
export interface GrpcConfig {
|
||||
host: string
|
||||
port: number
|
||||
clients: {
|
||||
users: string
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,4 +6,7 @@ export class GrpcValidator {
|
||||
|
||||
@IsInt()
|
||||
public GRPC_PORT: number
|
||||
|
||||
@IsString()
|
||||
public USERS_GRPC_URL: string
|
||||
}
|
||||
|
||||
@ -2,12 +2,14 @@ import { Module } from '@nestjs/common'
|
||||
|
||||
import { OtpService } from '@/modules/otp/otp.service'
|
||||
import { TokenService } from '@/modules/token/token.service'
|
||||
import { UsersModule } from '@/modules/users/users.module'
|
||||
import { UserRepository } from '@/shared/utils/repositories'
|
||||
|
||||
import { AuthController } from './auth.controller'
|
||||
import { AuthService } from './auth.service'
|
||||
|
||||
@Module({
|
||||
imports: [UsersModule],
|
||||
controllers: [AuthController],
|
||||
providers: [AuthService, UserRepository, OtpService, TokenService]
|
||||
})
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import { ConfigService } from '@nestjs/config'
|
||||
import { RpcException } from '@nestjs/microservices'
|
||||
import { Account } from '@prisma/generated/client'
|
||||
import { RpcStatus } from '@teacinema/common'
|
||||
@ -16,6 +17,7 @@ import { OtpService } from '@/modules/otp/otp.service'
|
||||
import { UserRepository } from '@/shared/utils/repositories'
|
||||
|
||||
import { TokenService } from '../token/token.service'
|
||||
import { UsersClientGrpc } from '../users/users.grpc'
|
||||
|
||||
@Injectable()
|
||||
export class AuthService {
|
||||
@ -23,7 +25,9 @@ export class AuthService {
|
||||
private readonly userRepository: UserRepository,
|
||||
private readonly otpService: OtpService,
|
||||
private readonly tokenService: TokenService,
|
||||
private readonly messagingService: MessagingService
|
||||
private readonly messagingService: MessagingService,
|
||||
private readonly usersClient: UsersClientGrpc,
|
||||
private readonly configService: ConfigService
|
||||
) {}
|
||||
|
||||
public async sendOtp(data: SendOtpRequest): Promise<SendOtpResponse> {
|
||||
@ -90,6 +94,8 @@ export class AuthService {
|
||||
})
|
||||
}
|
||||
|
||||
this.usersClient.create({ id: account.id }).subscribe()
|
||||
|
||||
return this.tokenService.generateTokens(account.id)
|
||||
}
|
||||
|
||||
|
||||
@ -2,12 +2,14 @@ import { Module } from '@nestjs/common'
|
||||
|
||||
import { TelegramRepository } from '@/modules/telegram/telegram.repository'
|
||||
import { TokenService } from '@/modules/token/token.service'
|
||||
import { UsersModule } from '@/modules/users/users.module'
|
||||
import { UserRepository } from '@/shared/utils/repositories'
|
||||
|
||||
import { TelegramController } from './telegram.controller'
|
||||
import { TelegramService } from './telegram.service'
|
||||
|
||||
@Module({
|
||||
imports: [UsersModule],
|
||||
controllers: [TelegramController],
|
||||
providers: [TelegramService, TelegramRepository, TokenService, UserRepository]
|
||||
})
|
||||
|
||||
@ -15,6 +15,7 @@ import { createHash, createHmac, randomBytes } from 'node:crypto'
|
||||
import { AllConfigs } from '@/config'
|
||||
import { RedisService } from '@/infra/redis/redis.service'
|
||||
import { TokenService } from '@/modules/token/token.service'
|
||||
import { UsersClientGrpc } from '@/modules/users/users.grpc'
|
||||
import { UserRepository } from '@/shared/utils/repositories'
|
||||
|
||||
import { TelegramRepository } from './telegram.repository'
|
||||
@ -31,7 +32,8 @@ export class TelegramService {
|
||||
private readonly configService: ConfigService<AllConfigs>,
|
||||
private readonly telegramRepository: TelegramRepository,
|
||||
private readonly tokenService: TokenService,
|
||||
private readonly userRepository: UserRepository
|
||||
private readonly userRepository: UserRepository,
|
||||
private readonly usersClient: UsersClientGrpc
|
||||
) {
|
||||
this.BOT_ID = configService.get('telegram.telegramBotId', { infer: true })
|
||||
this.BOT_TOKEN = configService.get('telegram.telegramBotToken', {
|
||||
@ -73,6 +75,8 @@ export class TelegramService {
|
||||
return this.tokenService.generateTokens(exists.id)
|
||||
}
|
||||
|
||||
this.usersClient.create({ id: exists.id }).subscribe()
|
||||
|
||||
const sessionId = randomBytes(16).toString('hex')
|
||||
|
||||
await this.redisService.set(
|
||||
|
||||
22
src/modules/users/users.grpc.ts
Normal file
22
src/modules/users/users.grpc.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { Inject, Injectable, OnModuleInit } from '@nestjs/common'
|
||||
import type { ClientGrpc } from '@nestjs/microservices'
|
||||
import {
|
||||
CreateUserRequest,
|
||||
UsersServiceClient
|
||||
} from '@teacinema/contracts/gen/users'
|
||||
|
||||
@Injectable()
|
||||
export class UsersClientGrpc implements OnModuleInit {
|
||||
private usersService: UsersServiceClient
|
||||
|
||||
constructor(@Inject('USERS_PACKAGE') private readonly client: ClientGrpc) {}
|
||||
|
||||
onModuleInit() {
|
||||
this.usersService =
|
||||
this.client.getService<UsersServiceClient>('UsersService')
|
||||
}
|
||||
|
||||
public create(request: CreateUserRequest) {
|
||||
return this.usersService.createUser(request)
|
||||
}
|
||||
}
|
||||
30
src/modules/users/users.module.ts
Normal file
30
src/modules/users/users.module.ts
Normal file
@ -0,0 +1,30 @@
|
||||
import { Module } from '@nestjs/common'
|
||||
import { ConfigService } from '@nestjs/config'
|
||||
import { ClientsModule, Transport } from '@nestjs/microservices'
|
||||
import { PROTO_PATHS } from '@teacinema/contracts'
|
||||
|
||||
import { AllConfigs } from '@/config'
|
||||
|
||||
import { UsersClientGrpc } from './users.grpc'
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
ClientsModule.registerAsync([
|
||||
{
|
||||
name: 'USERS_PACKAGE',
|
||||
useFactory: (configService: ConfigService<AllConfigs>) => ({
|
||||
transport: Transport.GRPC,
|
||||
options: {
|
||||
package: 'users.v1',
|
||||
protoPath: PROTO_PATHS.USERS,
|
||||
url: configService.get('grpc.clients.users', { infer: true })
|
||||
}
|
||||
}),
|
||||
inject: [ConfigService]
|
||||
}
|
||||
])
|
||||
],
|
||||
providers: [UsersClientGrpc],
|
||||
exports: [UsersClientGrpc]
|
||||
})
|
||||
export class UsersModule {}
|
||||
@ -1383,9 +1383,9 @@
|
||||
integrity sha512-q3DURJbSk3k8MNWFIYaSM4LEcBgPbWa+HJmBz/nzYT4kuYitJVSXxpZ97kr0Ea+81AZwAU3JhQKlkK0SBWUi0A==
|
||||
|
||||
"@teacinema/contracts@^1.0.0":
|
||||
version "1.1.1"
|
||||
resolved "https://git.ksv741.keenetic.pro/api/packages/teacinema/npm/%40teacinema%2Fcontracts/-/1.1.1/contracts-1.1.1.tgz#69fc54e0e096cad5ecc5d8bb654d982b6c70996b"
|
||||
integrity sha512-yK3Th430sWumcnm2/jyEx8dtaA59hmCvCAnul+q/JbW+C2s/AyhBEBoxToDVxx/KKTDixDePJ3O3EnNnIHGgRw==
|
||||
version "1.1.2"
|
||||
resolved "https://git.ksv741.keenetic.pro/api/packages/teacinema/npm/%40teacinema%2Fcontracts/-/1.1.2/contracts-1.1.2.tgz#74e5ce7c95515983fd299332ef095a882dbe6665"
|
||||
integrity sha512-LL9UqmjIX0C9kHVtyoAoNUrp0zk1u/JzNTfnU+gqTXHJhejHOSa3blVtQBO4cjTt+yYDaN89fjm5fRbL/V0dDw==
|
||||
dependencies:
|
||||
"@nestjs/microservices" "^11.1.12"
|
||||
protoc "33.4.0"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user