Este pacote é um ORM (Object-Relational Mapping) para PostgreSQL escrito em TypeScript. Ele foi projetado para ser semelhante ao Entity Framework da Microsoft, oferecendo uma API intuitiva e proteção contra SQL Injection. Além disso, ele inclui suporte a consultas LINQ-like para manipulação de dados em memória.
- Sem SQL Exposto: Consultas são construídas dinamicamente sem expor código SQL diretamente.
- Proteção contra SQL Injection: Parâmetros preparados garantem segurança nas consultas.
- Suporte a JOINs Dinâmicos: Inclua dados relacionados com facilidade usando o método include.
- LINQ-like Queries: Manipule dados em memória com métodos como where, orderBy, select e join.
- Tipagem Forte: Totalmente implementado em TypeScript para garantir segurança de tipos.
Para instalar o pacote, execute o seguinte comando:
npm install orm-postgresql
Antes de usar o pacote, configure as variáveis de ambiente para conexão com o banco de dados PostgreSQL. Crie um arquivo .env no diretório raiz do seu projeto com as seguintes variáveis:
DB_HOST=localhost
DB_PORT=5432
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=your_database
- Definindo Modelos Cada tabela no banco de dados deve ser representada por uma classe que estende a classe base Model. Por exemplo:
import { Model } from 'orm-postgresql';
class User extends Model {
static tableName = 'users';
}
class Post extends Model {
static tableName = 'posts';
}
- Conexão com o Banco de Dados Conecte-se ao banco de dados antes de executar qualquer operação:
import { Connection } from 'orm-postgresql';
(async () => {
const connection = Connection.getInstance();
await connection.connect();
// Sua lógica aqui
await connection.close();
})();
const newUser = await User.create({
name: 'Alice',
email: 'alice@example.com',
});
console.log(newUser);
Buscar Todos os Registros
const users = await User.findAll();
console.log(users);
const user = await User.find(1);
console.log(user);
Use o método include para carregar dados relacionados. Por exemplo, para buscar usuários e seus posts relacionados:
import { QueryBuilder } from 'orm-postgresql';
const queryBuilder = new QueryBuilder()
.select(['users.id', 'users.name'])
.from('users')
.include({
table: 'posts',
alias: 'p',
foreignKey: 'userId',
localKey: 'id',
});
const { query, params } = queryBuilder.build();
const usersWithPosts = await User.connection.query(query, params);
console.log(usersWithPosts);
O pacote inclui uma classe Linq para manipular dados em memória de forma semelhante ao LINQ da Microsoft.
import { Linq } from 'orm-postgresql';
const users = [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 30 },
];
const filteredUsers = new Linq(users)
.where(user => user.age > 20)
.toArray();
console.log(filteredUsers);
const sortedUsers = new Linq(users)
.orderBy(user => user.name)
.toArray();
console.log(sortedUsers);
const names = new Linq(users)
.select(user => user.name)
.toArray();
console.log(names);
const posts = [
{ userId: 1, title: 'Post 1' },
{ userId: 1, title: 'Post 2' },
{ userId: 2, title: 'Post 3' },
];
const userPosts = new Linq(users).join(
posts,
user => user.id, // Chave do array externo
post => post.userId, // Chave do array interno
(user, post) => ({
userName: user.name,
postTitle: post.title,
}) // Função para criar o objeto de saída
);
console.log(userPosts);
Contribuições são bem-vindas! Se você deseja melhorar este pacote, siga estas etapas:
- Faça um fork do repositório.
- Crie uma branch para sua feature (git checkout -b feature/nome-da-feature).
- Commit suas alterações (git commit -m 'Adiciona nova feature').
- Envie sua branch (git push origin feature/nome-da-feature).
- Abra um Pull Request.
Este projeto está licenciado sob a MIT License .
Se tiver dúvidas ou sugestões, entre em contato:
Email: dcutiyama@gmail.com GitHub: https://github.com/utiyamo