# Repository Pattern {#repository-pattern}


Data access layer architecture in Gauzy.


## Multi-ORM Repository {#multi-orm-repository}


Gauzy uses a repository adapter pattern to support both TypeORM and MikroORM:

```typescript
// TypeORM repository
@Injectable()
export class TypeOrmEmployeeRepository extends Repository<Employee> {
  constructor(dataSource: DataSource) {
    super(Employee, dataSource.createEntityManager());
  }
}

// MikroORM repository
@Injectable()
export class MikroOrmEmployeeRepository extends BaseEntityRepository<Employee> {
  constructor(em: EntityManager) {
    super(em, Employee);
  }
}
```


## Repository Registration {#repository-registration}


```typescript
@Module({
  imports: [
    TypeOrmModule.forFeature([Employee]),
    MikroOrmModule.forFeature([Employee]),
  ],
  providers: [TypeOrmEmployeeRepository, MikroOrmEmployeeRepository],
})
export class EmployeeModule {}
```


## Usage in Services {#usage-in-services}


```typescript
@Injectable()
export class EmployeeService extends TenantAwareCrudService<Employee> {
  constructor(
    readonly typeOrmRepo: TypeOrmEmployeeRepository,
    readonly mikroOrmRepo: MikroOrmEmployeeRepository,
  ) {
    super(typeOrmRepo, mikroOrmRepo);
  }
}
```


## Custom Repository Methods {#custom-repository-methods}


```typescript
@Injectable()
export class TypeOrmEmployeeRepository extends Repository<Employee> {
  async findActiveByOrganization(orgId: string): Promise<Employee[]> {
    return this.createQueryBuilder("e")
      .leftJoinAndSelect("e.user", "u")
      .where("e.organizationId = :orgId", { orgId })
      .andWhere("e.isActive = true")
      .orderBy("u.firstName", "ASC")
      .getMany();
  }
}
```


## Related Pages {#related-pages}


- [Service Layer Patterns](https://sourcey-gauzy.pages.dev/architecture/service-layer-patterns/index.md) — services
- [TypeORM Migrations](https://sourcey-gauzy.pages.dev/database/typeorm-migrations/index.md) — migrations
- [Multi-ORM Architecture](https://sourcey-gauzy.pages.dev/architecture/multi-orm-architecture/index.md) — ORM support
