Aller au contenu principal

Database Seeding

Ever Gauzy includes database seeders to populate demo data, default configurations, and test fixtures.

Seed Commands

# Seed all demo data
yarn seed:all

# Seed specific modules
yarn seed:module:all

# Seed with specific database
DB_TYPE=postgres yarn seed:all

Seed Data Categories

Default Seed Data

Always required for the platform to function:

DataDescription
RolesDefault role set (SUPER_ADMIN, ADMIN, EMPLOYEE, etc.)
PermissionsDefault permission-to-role mappings
LanguagesSupported languages (en, es, fr, ru, bg, etc.)
CountriesCountry list for address/region selection
CurrenciesCurrency definitions (USD, EUR, GBP, etc.)
Feature FlagsDefault feature flag states

Demo Seed Data

Populated in demo/development environments:

DataDescription
Demo TenantDefault tenant ("Ever Technologies")
Demo UsersAdmin, Employee, and Candidate accounts
Demo OrganizationSample organization with settings
Demo EmployeesSample employee records
Demo ProjectsSample projects with tasks
Demo Time LogsSample time tracking data
Demo InvoicesSample invoices and estimates
Demo ExpensesSample expense records

Demo Credentials

The demo seed creates the following accounts:

EmailPasswordRole
admin@ever.coadminSUPER_ADMIN
employee@ever.co123456EMPLOYEE
candidate@ever.co123456CANDIDATE
attention

These are demo credentials. Change them immediately in production deployments.

Seed Architecture

Seeders are located in packages/core/src/lib/:

packages/core/src/lib/
├── role/seed/ # Role seeds
├── role-permission/seed/ # Permission seeds
├── tenant/seed/ # Tenant seeds
├── user/seed/ # User seeds
├── employee/seed/ # Employee seeds
├── organization/seed/ # Organization seeds
├── time-tracking/seed/ # Time tracking seeds
├── tasks/seed/ # Task seeds
└── ...

Seed Service Pattern

Each seeder follows a common pattern:

@Injectable()
export class EmployeeSeedService {
constructor(
private readonly employeeService: EmployeeService,
private readonly userService: UserService,
) {}

async run(tenant: ITenant, organization: IOrganization): Promise<void> {
const employees = [
{ firstName: 'John', lastName: 'Doe', ... },
{ firstName: 'Jane', lastName: 'Smith', ... },
];

for (const employee of employees) {
// Create user
const user = await this.userService.create({
email: `${employee.firstName.toLowerCase()}@ever.co`,
...employee,
});

// Create employee record
await this.employeeService.create({
userId: user.id,
tenantId: tenant.id,
organizationId: organization.id,
...employee,
});
}
}
}

Configuration

Enable/Disable Seeding

# Seed demo data on startup (development only)
DEMO=true

# Clean database before seeding
DB_RESET=false

Seeding on Application Start

When DEMO=true, the application seeds demo data during bootstrap:

// In bootstrap module
if (configService.get("DEMO")) {
await seedService.executeDemoSeed();
}

Custom Seeds

To create custom seed data:

  1. Create a seed service in your module:
@Injectable()
export class CustomSeedService {
async run(tenant: ITenant, org: IOrganization): Promise<void> {
// Your custom seed logic
}
}
  1. Register it in the seed orchestrator:
@Module({
providers: [CustomSeedService],
})
export class SeedModule {}