@astreus-ai/astreus
Version:
AI Agent Framework with Chat Management
96 lines (87 loc) • 2.5 kB
text/typescript
import { v4 as uuidv4 } from "uuid";
import { createDatabase } from "../../database";
import { logger } from "../../utils";
/**
* Create a user and save to database
*/
export async function createUser(username: string): Promise<string> {
try {
// Generate user ID
const id = uuidv4();
// Get database instance
const db = await createDatabase();
const tableNames = db.getTableNames();
// Ensure users table exists
await db.ensureTable(tableNames.users, (table) => {
table.string("id").primary();
table.string("username").notNullable().unique();
table.timestamp("createdAt").defaultTo(db.knex.fn.now());
table.json("preferences").nullable();
});
// Save user to database
await db.getTable(tableNames.users).insert({
id,
username,
createdAt: new Date(),
});
logger.success(`User created with ID: ${id}`);
return id;
} catch (error) {
logger.error("Error creating user:", error);
throw error;
}
}
/**
* Get user by ID
*/
export async function getUserById(id: string): Promise<any | null> {
try {
const db = await createDatabase();
const tableNames = db.getTableNames();
return await db.getTable(tableNames.users).findOne({ id });
} catch (error) {
logger.error("Error getting user by ID:", error);
throw error;
}
}
/**
* Get user by username
*/
export async function getUserByUsername(username: string): Promise<any | null> {
try {
const db = await createDatabase();
const tableNames = db.getTableNames();
return await db.getTable(tableNames.users).findOne({ username });
} catch (error) {
logger.error("Error getting user by username:", error);
throw error;
}
}
/**
* Update user
*/
export async function updateUser(id: string, data: Record<string, any>): Promise<boolean> {
try {
const db = await createDatabase();
const tableNames = db.getTableNames();
const result = await db.getTable(tableNames.users).update({ id }, data);
return result > 0;
} catch (error) {
logger.error("Error updating user:", error);
throw error;
}
}
/**
* Delete user
*/
export async function deleteUser(id: string): Promise<boolean> {
try {
const db = await createDatabase();
const tableNames = db.getTableNames();
const result = await db.getTable(tableNames.users).delete({ id });
return result > 0;
} catch (error) {
logger.error("Error deleting user:", error);
throw error;
}
}