@stargazer-studio-brasil/common
v0.1.1
Published
Stargazer Studio Common
Readme
Biblioteca Stargazer Studio
Bem-vindo à documentação da biblioteca Stargazer Studio. Esta biblioteca é responsável por fornecer funcionalidades centrais e comuns para todos os projetos do Stargazer Studio, como gerenciamento de autenticação e configuração do servidor. Aqui está tudo o que você precisa saber para começar a usar esta biblioteca.
Instalação
Para instalar esta biblioteca, você pode usar o gerenciador de pacotes npm. Basta digitar o seguinte comando no terminal:
npm install @stargazer-studio-brasil/commonCore
Funcionalidades
Configuração do servidor
Esta biblioteca fornece funcionalidades para configurar o servidor atual com alguns padrões. Ela cria um servidor com Swagger, Validation Pipe, API Versioning, Helmet e Cors habilitados.
Para usar o recurso do servidor, basta importar a função startServer e passar os argumentos solicitados:
const startApp = async () => {
const app = await NestFactory.create(ControllerModule);
const port = process.env.PORT || '4000';
const title = 'Sample API';
const description = 'This API is a sample';
await startServer(app, port, title, description);
}
startApp();Autenticação
Esta biblioteca fornece funcionalidades para gerenciar a autenticação do usuário. Ela oferece suporte à autenticação com JSON Web Tokens (JWT) e permite verificar se um usuário está autenticado e/ou tem permissão para acessar um recurso.
- Gerar Token
Para usar o recurso de autenticação, basta importar o serviço AuthService:
import { AuthService } from '@stargazer-studio-brasil/common';
@Injectable()
export class MyService {
constructor(
@Inject(AuthService)
private authService: AuthService,
) {}
public myMethod(user: any) {
// Generate a JWT token for a user
const token = this.authService.generateToken(user);
return { token };
}
}- Validar token dentro de um headers
Para validar se um token está sendo passado no comoBearer <token>basta chamar o serviço JwtAuthGuard:
...
import { JwtAuthGuard } from '@stargazer-studio-brasil/common';
export class MyController {
@UseGuards(JwtAuthGuard)
@Get()
public myGet() {
return 'hello'
}
}Criptografia
- Criptografia de senha
Para criptografar uma senha, basta chamar a funçãogenerateHash():
import { generateHash } from '@stargazer-studio-brasil/common';
export class MyClass {
public async myMethod(password: string) {
return generateHash(password);
}
}- Comparar senhas
Para comparar uma senha criptografada com uma senha não criptografada basta chamar a funçãocompare():
import { compare } from '@stargazer-studio-brasil/common';
export class MyClass {
constructor(
@Inject(Database)
private database: DatabaseService,
) {}
public async myMethod(id: string, password: string) {
const { passwordHash } = await this.database.findById(id);
return compare(password, passwordHash); // Retorna um boolean
}
}Base Repository
Para utilizar o repositorio base em seus projetos, basta herdar a classe passando o model especifico:
import { BaseRepository } from '@stargazer-studio-brasil/common';
import { Users } from '@prisma/client';
export class UsersRepository extends BaseRepository<Users> {}Common
Funcionalidades
CustomController
Este decorator adiciona uma ApiTags dentro do swagger com o nome colocado e adiciona uma rota com o primeiro nome passado como argumento:
import { CustomController } from '@stargazer-studio-brasil/common';
// Dentro do swagger foi adicionado uma ApiTag com o nome User Route e dentro do nestjs uma rota com o nome 'user'
@CustomController('User Route')
export class UserController {}CustomRoute
Este decorator adiciona uma rota nova atrelada a uma função de forma generica:
import { CustomController, CustomRoute } from '@stargazer-studio-brasil/common';
import { UserService } from '@service';
import { UserPayload } from '@wire-in';
import { UserResponse } from '@wire-out';
@CustomController('UserController')
constructor(private userService: UserService) {}
export class UserController {
@CustomRoute({
summary: 'This route returns all users', // Descrição da rota - Obrigatorio
method: 'GET', // Enum de rotas (GET, POST, PUT, PATCH ou DELETE) - Obrigatorio
route: 'list', // Nome da rota (O padrão é '/') - Opcional
code: 200, // Status code do retorno da rota - Opcional
body: UserPayload, // Tipo do payload passado no body - Opcional
response: UserResponse, // Tipo da resposta da rota - Opcional
isAuth: true, // Adiciona JwtAuthGuard (O padrão é false) - Opcional
})
public async list() {
return this.userService.list();
}
}