kotlin-exposed-patterns
Ajuda seu agente a trabalhar com o ORM Exposed em Kotlin. Facilita a criação de consultas, o gerenciamento de transações e a integração com bancos de dados.
O que ela faz
Esta ferramenta ajuda a organizar e gerenciar o acesso a bancos de dados em seus projetos de programação usando uma biblioteca chamada Exposed. Ela oferece maneiras eficientes de consultar, adicionar, atualizar e excluir dados, além de configurar a conexão com o banco de dados e gerenciar as mudanças na estrutura dele.
Quando usar
- ✓Ao iniciar um novo projeto que precisa armazenar informações.
- ✓Quando você precisa buscar ou modificar dados em um banco de dados.
- ✓Ao configurar como seu programa se conecta ao banco de dados.
Exemplo do que pedir para a IA
“Como configuro a conexão com o banco de dados e as migrações para um projeto Kotlin Exposed?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela funciona definindo como os dados são estruturados e como as consultas são feitas. Para garantir que o banco de dados esteja sempre atualizado, ela usa ferramentas para aplicar mudanças automaticamente. As conexões com o banco de dados são gerenciadas de forma eficiente para melhor desempenho.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill kotlin-exposed-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/kotlin-exposed-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões do Kotlin Exposed
Padrões abrangentes para acesso a banco de dados com o ORM JetBrains Exposed, incluindo consultas DSL, DAO, transações e configuração pronta para produção.
Quando Usar
- Configurando acesso a banco de dados com Exposed
- Escrevendo consultas SQL usando Exposed DSL ou DAO
- Configurando pooling de conexões com HikariCP
- Criando migrações de banco de dados com Flyway
- Implementando o padrão de repositório com Exposed
- Lidando com colunas JSON e consultas complexas
Como Funciona
O Exposed oferece dois estilos de consulta: DSL para expressões diretas semelhantes a SQL e DAO para gerenciamento do ciclo de vida de entidades. O HikariCP gerencia um pool de conexões de banco de dados reutilizáveis configuradas via HikariConfig. O Flyway executa scripts de migração SQL versionados na inicialização para manter o esquema sincronizado. Todas as operações de banco de dados são executadas dentro de blocos newSuspendedTransaction para segurança de corrotina e atomicidade. O padrão de repositório encapsula as consultas do Exposed atrás de uma interface para que a lógica de negócios permaneça desacoplada da camada de dados e os testes possam usar um banco de dados H2 em memória.
Exemplos
Consulta DSL
suspend fun findUserById(id: UUID): UserRow? =
newSuspendedTransaction {
UsersTable.selectAll()
.where { UsersTable.id eq id }
.map { it.toUser() }
.singleOrNull()
}
Uso de Entidade DAO
suspend fun createUser(request: CreateUserRequest): User =
newSuspendedTransaction {
UserEntity.new {
name = request.name
email = request.email
role = request.role
}.toModel()
}
Configuração do HikariCP
val hikariConfig = HikariConfig().apply {
driverClassName = config.driver
jdbcUrl = config.url
username = config.username
password = config.password
maximumPoolSize = config.maxPoolSize
isAutoCommit = false
transactionIsolation = "TRANSACTION_READ_COMMITTED"
validate()
}
Configuração do Banco de Dados
Pooling de Conexões HikariCP
// DatabaseFactory.kt
object DatabaseFactory {
fun create(config: DatabaseConfig): Database {
val hikariConfig = HikariConfig().apply {
driverClassName = config.driver
jdbcUrl = config.url
username = config.username
password = config.password
maximumPoolSize = config.maxPoolSize
isAutoCommit = false
transactionIsolation = "TRANSACTION_READ_COMMITTED"
validate()
}
return Database.connect(HikariDataSource(hikariConfig))
}
}
data class DatabaseConfig(
val url: String,
val driver: String = "org.postgresql.Driver",
val username: String = "",
val password: String = "",
val maxPoolSize: Int = 10,
)
Migrações Flyway
// FlywayMigration.kt
fun runMigrations(config: DatabaseConfig) {
Flyway.configure()
.dataSource(config.url, config.username, config.password)
.locations("classpath:db/migration")
.baselineOnMigrate(true)
.load()
.migrate()
}
// Application startup
fun Application.module() {
val config = DatabaseConfig(
url = environment.config.property("database.url").getString(),
username = environment.config.property("database.username").getString(),
password = environment.config.property("database.password").getString(),
)
runMigrations(config)
val database = DatabaseFactory.create(config)
// ...
}
Arquivos de Migração
-- src/main/resources/db/migration/V1__create_users.sql
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
role VARCHAR(20) NOT NULL DEFAULT 'USER',
metadata JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_role ON users(role);
Definições de Tabela
Tabelas no Estilo DSL
// tables/UsersTable.kt
object UsersTable : UUIDTable("users") {
val name = varchar("name", 100)
val email = varchar("email", 255).uniqueIndex()
val role = enumerationByName<Role>("role", 20)
val metadata = jsonb<UserMetadata>("metadata", Json.Default).nullable()
val createdAt = timestampWithTimeZone("created_at").defaultExpression(CurrentTimestampWithTimeZone)
val updatedAt = timestampWithTimeZone("updated_at").defaultExpression(CurrentTimestampWithTimeZone)
}
…
Perguntas frequentes
O que é um ORM?
ORM significa 'Object-Relational Mapping'. É uma técnica que permite que você escreva código em uma linguagem de programação (como Kotlin) para interagir com um banco de dados, em vez de escrever comandos SQL diretamente.
O que são 'migrations'?
Migrations são como versões do seu banco de dados. Elas permitem que você aplique mudanças na estrutura do banco de dados (como adicionar tabelas ou colunas) de forma controlada e repetível.
Por que usar 'connection pooling'?
Connection pooling é uma técnica que reutiliza conexões de banco de dados. Em vez de abrir e fechar uma nova conexão a cada vez que o programa precisa acessar o banco de dados, ele mantém um conjunto de conexões prontas para uso, o que torna o acesso mais rápido.
Detalhes
Descrição original do autor
JetBrains Exposed ORM patterns including DSL queries, DAO pattern, transactions, HikariCP connection pooling, Flyway migrations, and repository pattern. Use when working with the Exposed ORM — DSL or DAO queries, transactions, pooling, or migrations.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #69
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
karpathy-guidelines
Ajuda seu agente a escrever código melhor, evitando erros comuns. É útil para garantir que o código seja simples, claro e fácil de verificar.
multica-ai/andrej-karpathy-skills
skill-creator
Permite ao agente criar, modificar e otimizar habilidades. Útil para testar o desempenho de habilidades e melhorar sua precisão.
anthropics/skills
ponytail-debt
Lista todos os atalhos de código ('shortcut:') deixados para depois. Ajuda a ver o que ainda precisa ser corrigido no projeto.
DietrichGebert/ponytail