mirror of
https://github.com/DeBrosOfficial/network-ts-sdk.git
synced 2026-01-29 20:53:04 +00:00
171 lines
4.4 KiB
TypeScript
171 lines
4.4 KiB
TypeScript
/**
|
|
* Database CRUD Operations Example
|
|
*
|
|
* Demonstrates comprehensive database operations including:
|
|
* - Table creation and schema management
|
|
* - Insert, Update, Delete operations
|
|
* - QueryBuilder fluent API
|
|
* - Repository pattern (ORM-style)
|
|
* - Transactions
|
|
*/
|
|
|
|
import { createClient } from '../src/index';
|
|
|
|
interface User {
|
|
id?: number;
|
|
name: string;
|
|
email: string;
|
|
age: number;
|
|
active?: number;
|
|
created_at?: number;
|
|
}
|
|
|
|
async function main() {
|
|
const client = createClient({
|
|
baseURL: 'http://localhost:6001',
|
|
apiKey: 'ak_your_key:default',
|
|
});
|
|
|
|
// 1. Create table
|
|
console.log('Creating users table...');
|
|
await client.db.createTable(
|
|
`CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
email TEXT UNIQUE NOT NULL,
|
|
age INTEGER,
|
|
active INTEGER DEFAULT 1,
|
|
created_at INTEGER DEFAULT (strftime('%s', 'now'))
|
|
)`
|
|
);
|
|
|
|
// 2. Raw SQL INSERT
|
|
console.log('\n--- Raw SQL Operations ---');
|
|
const insertResult = await client.db.exec(
|
|
'INSERT INTO users (name, email, age) VALUES (?, ?, ?)',
|
|
['Bob Smith', 'bob@example.com', 30]
|
|
);
|
|
console.log('Inserted ID:', insertResult.last_insert_id);
|
|
|
|
// 3. Raw SQL UPDATE
|
|
await client.db.exec(
|
|
'UPDATE users SET age = ? WHERE id = ?',
|
|
[31, insertResult.last_insert_id]
|
|
);
|
|
console.log('Updated user age');
|
|
|
|
// 4. Raw SQL SELECT
|
|
const users = await client.db.query<User>(
|
|
'SELECT * FROM users WHERE email = ?',
|
|
['bob@example.com']
|
|
);
|
|
console.log('Found users:', users);
|
|
|
|
// 5. QueryBuilder
|
|
console.log('\n--- QueryBuilder Operations ---');
|
|
|
|
// Insert multiple users for querying
|
|
await client.db.exec("INSERT INTO users (name, email, age) VALUES (?, ?, ?)", ["Charlie", "charlie@example.com", 25]);
|
|
await client.db.exec("INSERT INTO users (name, email, age) VALUES (?, ?, ?)", ["Diana", "diana@example.com", 35]);
|
|
await client.db.exec("INSERT INTO users (name, email, age) VALUES (?, ?, ?)", ["Eve", "eve@example.com", 28]);
|
|
|
|
// Complex query with QueryBuilder
|
|
const activeUsers = await client.db
|
|
.createQueryBuilder('users')
|
|
.select('id', 'name', 'email', 'age')
|
|
.where('active = ?', [1])
|
|
.andWhere('age > ?', [25])
|
|
.orderBy('age DESC')
|
|
.limit(10)
|
|
.getMany<User>();
|
|
|
|
console.log('Active users over 25:', activeUsers);
|
|
|
|
// Get single user
|
|
const singleUser = await client.db
|
|
.createQueryBuilder('users')
|
|
.where('email = ?', ['charlie@example.com'])
|
|
.getOne<User>();
|
|
|
|
console.log('Single user:', singleUser);
|
|
|
|
// Count users
|
|
const count = await client.db
|
|
.createQueryBuilder('users')
|
|
.where('age > ?', [25])
|
|
.count();
|
|
|
|
console.log('Users over 25:', count);
|
|
|
|
// 6. Repository Pattern (ORM)
|
|
console.log('\n--- Repository Pattern ---');
|
|
|
|
const userRepo = client.db.repository<User>('users');
|
|
|
|
// Find all
|
|
const allUsers = await userRepo.find({});
|
|
console.log('All users:', allUsers.length);
|
|
|
|
// Find with criteria
|
|
const youngUsers = await userRepo.find({ age: 25 });
|
|
console.log('Users aged 25:', youngUsers);
|
|
|
|
// Find one
|
|
const diana = await userRepo.findOne({ email: 'diana@example.com' });
|
|
console.log('Found Diana:', diana);
|
|
|
|
// Save (insert new)
|
|
const newUser: User = {
|
|
name: 'Frank',
|
|
email: 'frank@example.com',
|
|
age: 40,
|
|
};
|
|
await userRepo.save(newUser);
|
|
console.log('Saved new user:', newUser);
|
|
|
|
// Save (update existing)
|
|
if (diana) {
|
|
diana.age = 36;
|
|
await userRepo.save(diana);
|
|
console.log('Updated Diana:', diana);
|
|
}
|
|
|
|
// Remove
|
|
if (newUser.id) {
|
|
await userRepo.remove(newUser);
|
|
console.log('Deleted Frank');
|
|
}
|
|
|
|
// 7. Transactions
|
|
console.log('\n--- Transaction Operations ---');
|
|
|
|
const txResults = await client.db.transaction([
|
|
{
|
|
kind: 'exec',
|
|
sql: 'INSERT INTO users (name, email, age) VALUES (?, ?, ?)',
|
|
args: ['Grace', 'grace@example.com', 27],
|
|
},
|
|
{
|
|
kind: 'exec',
|
|
sql: 'UPDATE users SET active = ? WHERE age < ?',
|
|
args: [0, 26],
|
|
},
|
|
{
|
|
kind: 'query',
|
|
sql: 'SELECT COUNT(*) as count FROM users WHERE active = ?',
|
|
args: [1],
|
|
},
|
|
]);
|
|
|
|
console.log('Transaction results:', txResults);
|
|
|
|
// 8. Get schema
|
|
console.log('\n--- Schema Information ---');
|
|
const schema = await client.db.getSchema();
|
|
console.log('Database schema:', schema);
|
|
|
|
console.log('\n--- CRUD operations completed successfully ---');
|
|
}
|
|
|
|
main().catch(console.error);
|