UNPKG

@riao/dbal

Version:
149 lines (110 loc) 4.19 kB
# riao-dbal [![npm version](https://badge.fury.io/js/%40riao%2Fdbal.svg)](https://badge.fury.io/js/%40riao%2Fdbal) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) A powerful TypeScript Database Abstraction Layer (DBAL) that provides a unified interface for working with multiple database types including MySQL, PostgreSQL, MSSQL, and SQLite. ## Features - 🔄 **Multi-Database Support**: Work with multiple databases using the same API - 🏗️ **TypeScript First**: Full TypeScript support with type safety and autocompletion - 🔨 **Query Builder**: Fluent interface for building complex SQL queries - 📊 **Reporting & Analytics**: Built-in support for aggregations, window functions, and complex data analysis - 🚀 **Migrations**: Version control for your database schema - 📦 **Column Pack**: Ready-to-use column definitions for common fields like usernames, emails, and timestamps - 🌱 **Seeding**: Populate your database with test data - 🔍 **Schema Management**: Track and manage your database schema - 💰 **Transactions**: Support for database transactions - 🛠️ **DDL Operations**: Create, alter, and drop database objects - ⚡ **Database Functions**: Built-in support for common database functions ## Getting Started Read the [getting started guide](https://stateless-studio.atlassian.net/wiki/spaces/Riao/pages/294916/Guide). ## Preview ### Creating a new Database `npx riao db:create` [Database Setup Guide](https://stateless-studio.atlassian.net/wiki/spaces/Riao/pages/328113/Setup+a+Database) ### Creating a Migration `npx riao migration:create create-users-table` [Database Migration Guide](https://stateless-studio.atlassian.net/wiki/spaces/Riao/pages/328666/Building+a+Database+Schema) ```typescript import { Migration } from '@riao/dbal'; import { ColumnType } from '@riao/dbal'; import { BigIntKeyColumn, EmailColumn, UsernameColumn, PasswordColumn, CreateTimestampColumn, UpdateTimestampColumn, } from '@riao/dbal/column-pack'; export default class Users extends Migration { override async up() { await this.ddl.createTable({ name: 'users', ifNotExists: true, columns: [ BigIntKeyColumn, UsernameColumn, EmailColumn, PasswordColumn, { name: 'balance', type: ColumnType.DECIMAL, significant: 15, decimal: 2, required: true, default: 10000.0, }, CreateTimestampColumn, UpdateTimestampColumn, ], }); } override async down() { await this.ddl.dropTable({ tables: 'users', ifExists: true, }); } } ``` Run your migrations with `npx riao migration:run` ### Creating Repositories `src/users/user-repository.ts` ```typescript import { maindb } from '../../database/main'; export interface User { id: number; username: string; email: string; password: string; balance: number; create_timestamp: Date; update_timestamp: Date; } export const users = maindb.getQueryRepository<User>({ table: 'users' }); ``` [Model Repositories Guide](https://stateless-studio.atlassian.net/wiki/spaces/Riao/pages/753686/Model+Repositories) ### Queries ```typescript // Insert a record await users.insertOne({ username: 'John Doe', email: 'john@example.com' }); // Find records const results = await users.find({ where: { email: 'john@example.com' } }); ``` [Query Guide](https://stateless-studio.atlassian.net/wiki/spaces/Riao/pages/99430/Querying+the+Database) ## Documentation For detailed documentation, please [read the docs](https://stateless-studio.atlassian.net/wiki/spaces/Riao/pages/295404/Docs)! ## Contributing We welcome contributions! Please see our [Contributing Guidelines](docs/contributing/contributing.md) for details. ## License This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details. ## Support If you encounter any issues or have questions, please [open an issue](https://github.com/riao-project/riao-dbal/issues) on our GitHub repository.