Skip to main content
Version: 0.5.0 (Previous)

🆔 Entity Utilities

The Nodeblocks SDK provides essential utilities for creating and managing database entities with automatic field generation. These utilities ensure consistent entity structure across your application with automatic timestamps and unique identifiers.


🎯 Overview​

Entity utilities provide standardized functions for creating and updating database entities with automatic field generation. They ensure consistency in entity structure and reduce boilerplate code.

Key Features​

  • Automatic ID Generation: UUID v4 generation for entity identifiers
  • Timestamp Management: Automatic createdAt and updatedAt field generation
  • Consistent Structure: Standardized entity creation and update patterns
  • Type Safety: Full TypeScript support with proper typing

🆔 Entity Creation​

createBaseEntity​

Creates a new entity with automatic field generation.

import { utils } from '@nodeblocks/backend-sdk';

const { createBaseEntity } = utils;

const userData = {
email: 'user@example.com',
name: 'John Doe',
role: 'user'
};

const user = createBaseEntity(userData);

Generated fields:

  • id: UUID v4 string
  • createdAt: ISO timestamp string
  • updatedAt: ISO timestamp string

Result:

{
email: 'user@example.com',
name: 'John Doe',
role: 'user',
id: '550e8400-e29b-41d4-a716-446655440000',
createdAt: '2024-01-15T10:30:00.000Z',
updatedAt: '2024-01-15T10:30:00.000Z'
}

Usage in Handlers​

import { utils } from '@nodeblocks/backend-sdk';

const { createBaseEntity } = utils;

const createUserHandler = async (payload: RouteHandlerPayload) => {
const { params } = payload;

// Create entity with base fields
const userEntity = createBaseEntity(params.requestBody);

// Save to database
const result = await payload.context.db.users.insertOne(userEntity);

return ok(mergeData(payload, { userId: userEntity.id }));
};

🔄 Entity Updates​

updateBaseEntity​

Updates an existing entity with automatic timestamp management.

import { utils } from '@nodeblocks/backend-sdk';

const { updateBaseEntity } = utils;

const updateData = {
name: 'Jane Doe',
email: 'jane@example.com'
};

const updatedUser = updateBaseEntity(updateData);

Generated fields:

  • updatedAt: Current ISO timestamp string

Result:

{
name: 'Jane Doe',
email: 'jane@example.com',
updatedAt: '2024-01-15T11:45:00.000Z'
}

Usage in Update Handlers​

import { utils } from '@nodeblocks/backend-sdk';

const { updateBaseEntity } = utils;

const updateUserHandler = async (payload: RouteHandlerPayload) => {
const { params, context } = payload;
const userId = params.requestParams?.userId;

// Prepare update data with timestamp
const updateData = updateBaseEntity(params.requestBody);

// Update in database
const result = await context.db.users.updateOne(
{ id: userId },
{ $set: updateData }
);

return ok(mergeData(payload, { updated: true }));
};

🔧 Advanced Usage​

Custom Entity Creation​

import { utils } from '@nodeblocks/backend-sdk';

const { createBaseEntity } = utils;

const createProduct = (productData: ProductData) => {
const baseEntity = createBaseEntity(productData);

// Add custom fields
return {
...baseEntity,
status: 'active',
category: productData.category || 'general'
};
};

const product = createProduct({
name: 'Sample Product',
price: 29.99,
description: 'A sample product'
});

Batch Entity Creation​

import { utils } from '@nodeblocks/backend-sdk';

const { createBaseEntity } = utils;

const createMultipleUsers = (usersData: UserData[]) => {
return usersData.map(userData => createBaseEntity(userData));
};

const users = createMultipleUsers([
{ name: 'User 1', email: 'user1@example.com' },
{ name: 'User 2', email: 'user2@example.com' }
]);

Conditional Updates​

import { utils } from '@nodeblocks/backend-sdk';

const { updateBaseEntity } = utils;

const updateUserConditionally = (userId: string, updateData: Partial<User>) => {
const baseUpdate = updateBaseEntity(updateData);

// Add conditional logic
if (updateData.status === 'inactive') {
return {
...baseUpdate,
deactivatedAt: new Date().toISOString()
};
}

return baseUpdate;
};

📊 Field Specifications​

Generated Fields​

FieldTypeDescriptionGenerated By
idstringUUID v4 identifiercreateBaseEntity
createdAtstringISO timestamp of creationcreateBaseEntity
updatedAtstringISO timestamp of last updateBoth functions

Field Format​

  • ID: UUID v4 format (550e8400-e29b-41d4-a716-446655440000)
  • Timestamps: ISO 8601 format (2024-01-15T10:30:00.000Z)

📐️ Best Practices​

1. Consistent Usage​

// ✅ Good: Always use entity utilities
const user = createBaseEntity(userData);
const updatedUser = updateBaseEntity(updateData);

// ❌ Avoid: Manual field generation
const user = {
...userData,
id: generateUUID(), // Inconsistent
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
};

2. Type Safety​

// ✅ Good: Use proper typing
interface UserData {
email: string;
name: string;
}

const userData: UserData = { email: 'user@example.com', name: 'John' };
const user = createBaseEntity(userData);

3. Database Integration​

// ✅ Good: Use in database operations
const createUser = async (userData: UserData) => {
const entity = createBaseEntity(userData);
return await db.users.insertOne(entity);
};

const updateUser = async (userId: string, updateData: Partial<UserData>) => {
const update = updateBaseEntity(updateData);
return await db.users.updateOne({ id: userId }, { $set: update });
};

🔗 See Also​