forlogic-core 1.7.2 → 1.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +177 -0
- package/dist/README.md +177 -0
- package/dist/index.esm.js +2 -2
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -873,6 +873,183 @@ KR1 50% dos indicadores de empreendimento e áreas de negócio atingindo a meta
|
|
|
873
873
|
|
|
874
874
|
---
|
|
875
875
|
|
|
876
|
+
### 🔗 Enrichment de Múltiplos Campos de Usuário do Qualiex
|
|
877
|
+
|
|
878
|
+
O `forlogic-core` suporta enriquecimento automático de **múltiplos campos de ID de usuário** com dados do Qualiex (nome, email, username).
|
|
879
|
+
|
|
880
|
+
#### **Configuração Global**
|
|
881
|
+
|
|
882
|
+
Configure o enrichment uma vez na inicialização do app:
|
|
883
|
+
|
|
884
|
+
```typescript
|
|
885
|
+
import { setQualiexConfig } from 'forlogic-core';
|
|
886
|
+
|
|
887
|
+
// Configuração básica (usa localStorage como fallback)
|
|
888
|
+
setQualiexConfig({
|
|
889
|
+
enableUserEnrichment: true,
|
|
890
|
+
enableUsersApi: true,
|
|
891
|
+
});
|
|
892
|
+
|
|
893
|
+
// Configuração avançada (recomendado)
|
|
894
|
+
setQualiexConfig({
|
|
895
|
+
enableUserEnrichment: true,
|
|
896
|
+
enableUsersApi: true,
|
|
897
|
+
getAccessToken: () => localStorage.getItem('qualiex_access_token'),
|
|
898
|
+
getCompanyId: () => localStorage.getItem('selectedUnitId'),
|
|
899
|
+
userNameFieldSuffix: '_name', // default
|
|
900
|
+
userEmailFieldSuffix: '_email', // default
|
|
901
|
+
userUsernameFieldSuffix: '_username', // default
|
|
902
|
+
});
|
|
903
|
+
```
|
|
904
|
+
|
|
905
|
+
#### **Uso Básico: Lista de Campos de ID**
|
|
906
|
+
|
|
907
|
+
Use `userIdFields` para enriquecer múltiplos campos de ID automaticamente:
|
|
908
|
+
|
|
909
|
+
```typescript
|
|
910
|
+
import { createSimpleService } from 'forlogic-core';
|
|
911
|
+
|
|
912
|
+
const { service, useCrudHook } = createSimpleService({
|
|
913
|
+
tableName: 'evaluations',
|
|
914
|
+
schemaName: 'performance',
|
|
915
|
+
entityName: 'Avaliação',
|
|
916
|
+
searchFields: ['title', 'description'],
|
|
917
|
+
enableQualiexEnrichment: true,
|
|
918
|
+
|
|
919
|
+
// ✅ Lista de campos de ID para enriquecer
|
|
920
|
+
userIdFields: ['target_user_id', 'evaluator_user_id'],
|
|
921
|
+
});
|
|
922
|
+
```
|
|
923
|
+
|
|
924
|
+
**Resultado automático:**
|
|
925
|
+
- `target_user_id` → `target_user_name` (nome do usuário)
|
|
926
|
+
- `evaluator_user_id` → `evaluator_user_name` (nome do usuário)
|
|
927
|
+
|
|
928
|
+
#### **Uso Avançado: Mapeamento Customizado**
|
|
929
|
+
|
|
930
|
+
Use `userFieldsMapping` para controlar exatamente quais campos de saída criar:
|
|
931
|
+
|
|
932
|
+
```typescript
|
|
933
|
+
const { service, useCrudHook } = createSimpleService({
|
|
934
|
+
tableName: 'evaluations',
|
|
935
|
+
entityName: 'Avaliação',
|
|
936
|
+
enableQualiexEnrichment: true,
|
|
937
|
+
|
|
938
|
+
// ✅ Mapeamento granular de campos
|
|
939
|
+
userFieldsMapping: [
|
|
940
|
+
{
|
|
941
|
+
idField: 'target_user_id',
|
|
942
|
+
nameField: 'avaliado_nome', // customizado
|
|
943
|
+
emailField: 'avaliado_email', // opcional
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
idField: 'evaluator_user_id',
|
|
947
|
+
nameField: 'avaliador_nome',
|
|
948
|
+
emailField: 'avaliador_email',
|
|
949
|
+
usernameField: 'avaliador_username', // opcional
|
|
950
|
+
},
|
|
951
|
+
],
|
|
952
|
+
});
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
**Resultado customizado:**
|
|
956
|
+
- `target_user_id` → `avaliado_nome`, `avaliado_email`
|
|
957
|
+
- `evaluator_user_id` → `avaliador_nome`, `avaliador_email`, `avaliador_username`
|
|
958
|
+
|
|
959
|
+
#### **Enrichment Manual (Casos Avançados)**
|
|
960
|
+
|
|
961
|
+
Para casos onde você precisa enriquecer dados fora do `createSimpleService`:
|
|
962
|
+
|
|
963
|
+
```typescript
|
|
964
|
+
import { QualiexEnrichmentService } from 'forlogic-core';
|
|
965
|
+
|
|
966
|
+
// Enriquecer entidades manualmente
|
|
967
|
+
const enrichedData = await QualiexEnrichmentService.enrichWithUserData(entities, {
|
|
968
|
+
entityName: 'Avaliações',
|
|
969
|
+
userIdFields: ['target_user_id', 'evaluator_user_id'],
|
|
970
|
+
});
|
|
971
|
+
|
|
972
|
+
// Ou com mapeamento customizado
|
|
973
|
+
const enrichedData = await QualiexEnrichmentService.enrichWithUserData(entities, {
|
|
974
|
+
entityName: 'Avaliações',
|
|
975
|
+
userFieldsMapping: [
|
|
976
|
+
{ idField: 'target_user_id', nameField: 'avaliado_nome' },
|
|
977
|
+
{ idField: 'evaluator_user_id', nameField: 'avaliador_nome' },
|
|
978
|
+
],
|
|
979
|
+
});
|
|
980
|
+
```
|
|
981
|
+
|
|
982
|
+
#### **Utilitários de Derivação de Campos**
|
|
983
|
+
|
|
984
|
+
Use helpers para gerar nomes de campos de forma consistente:
|
|
985
|
+
|
|
986
|
+
```typescript
|
|
987
|
+
import { deriveNameField, deriveEmailField } from 'forlogic-core';
|
|
988
|
+
|
|
989
|
+
deriveNameField('target_user_id'); // => "target_user_name"
|
|
990
|
+
deriveEmailField('evaluator_user_id'); // => "evaluator_user_email"
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
#### **Retrocompatibilidade**
|
|
994
|
+
|
|
995
|
+
O comportamento legado (`id_user` → `responsible_name`) continua funcionando sem mudanças:
|
|
996
|
+
|
|
997
|
+
```typescript
|
|
998
|
+
// Código antigo funciona normalmente
|
|
999
|
+
const { service } = createSimpleService({
|
|
1000
|
+
tableName: 'processes',
|
|
1001
|
+
entityName: 'Processo',
|
|
1002
|
+
enableQualiexEnrichment: true,
|
|
1003
|
+
// Automaticamente enriquece id_user -> responsible_name
|
|
1004
|
+
});
|
|
1005
|
+
```
|
|
1006
|
+
|
|
1007
|
+
#### **Características**
|
|
1008
|
+
|
|
1009
|
+
✅ **Cache inteligente**: Usuários Qualiex são cacheados por 5 minutos
|
|
1010
|
+
✅ **Resiliência**: Falhas não quebram a UI (apenas logs no console)
|
|
1011
|
+
✅ **Deduplicação**: IDs duplicados são buscados apenas uma vez
|
|
1012
|
+
✅ **Não sobrescreve**: Campos já preenchidos não são alterados
|
|
1013
|
+
✅ **Type-safe**: TypeScript valida configurações
|
|
1014
|
+
✅ **Retrocompatível**: Projetos antigos continuam funcionando
|
|
1015
|
+
|
|
1016
|
+
#### **Boas Práticas**
|
|
1017
|
+
|
|
1018
|
+
✅ **BOM**: Configurar `getAccessToken` e `getCompanyId` para evitar dependência de localStorage
|
|
1019
|
+
|
|
1020
|
+
```typescript
|
|
1021
|
+
setQualiexConfig({
|
|
1022
|
+
enableUserEnrichment: true,
|
|
1023
|
+
getAccessToken: async () => {
|
|
1024
|
+
// Buscar token de forma segura (ex: context, Zustand, etc)
|
|
1025
|
+
return myAuthStore.getToken();
|
|
1026
|
+
},
|
|
1027
|
+
getCompanyId: () => myAppStore.getSelectedCompanyId(),
|
|
1028
|
+
});
|
|
1029
|
+
```
|
|
1030
|
+
|
|
1031
|
+
❌ **EVITAR**: Múltiplos campos apontando para o mesmo campo de saída
|
|
1032
|
+
|
|
1033
|
+
```typescript
|
|
1034
|
+
// ❌ Conflito: ambos escrevem em "user_name"
|
|
1035
|
+
userFieldsMapping: [
|
|
1036
|
+
{ idField: 'created_by_id', nameField: 'user_name' },
|
|
1037
|
+
{ idField: 'updated_by_id', nameField: 'user_name' }, // Conflito!
|
|
1038
|
+
]
|
|
1039
|
+
```
|
|
1040
|
+
|
|
1041
|
+
✅ **BOM**: Usar sufixos distintos
|
|
1042
|
+
|
|
1043
|
+
```typescript
|
|
1044
|
+
// ✅ Campos de saída únicos
|
|
1045
|
+
userFieldsMapping: [
|
|
1046
|
+
{ idField: 'created_by_id', nameField: 'created_by_name' },
|
|
1047
|
+
{ idField: 'updated_by_id', nameField: 'updated_by_name' },
|
|
1048
|
+
]
|
|
1049
|
+
```
|
|
1050
|
+
|
|
1051
|
+
---
|
|
1052
|
+
|
|
876
1053
|
### 🏢 Sistema de Gestores de Locais (Qualiex)
|
|
877
1054
|
|
|
878
1055
|
Componentes para gerenciamento de gestores e membros de locais/sublocais integrados com a API Qualiex.
|
package/dist/README.md
CHANGED
|
@@ -873,6 +873,183 @@ KR1 50% dos indicadores de empreendimento e áreas de negócio atingindo a meta
|
|
|
873
873
|
|
|
874
874
|
---
|
|
875
875
|
|
|
876
|
+
### 🔗 Enrichment de Múltiplos Campos de Usuário do Qualiex
|
|
877
|
+
|
|
878
|
+
O `forlogic-core` suporta enriquecimento automático de **múltiplos campos de ID de usuário** com dados do Qualiex (nome, email, username).
|
|
879
|
+
|
|
880
|
+
#### **Configuração Global**
|
|
881
|
+
|
|
882
|
+
Configure o enrichment uma vez na inicialização do app:
|
|
883
|
+
|
|
884
|
+
```typescript
|
|
885
|
+
import { setQualiexConfig } from 'forlogic-core';
|
|
886
|
+
|
|
887
|
+
// Configuração básica (usa localStorage como fallback)
|
|
888
|
+
setQualiexConfig({
|
|
889
|
+
enableUserEnrichment: true,
|
|
890
|
+
enableUsersApi: true,
|
|
891
|
+
});
|
|
892
|
+
|
|
893
|
+
// Configuração avançada (recomendado)
|
|
894
|
+
setQualiexConfig({
|
|
895
|
+
enableUserEnrichment: true,
|
|
896
|
+
enableUsersApi: true,
|
|
897
|
+
getAccessToken: () => localStorage.getItem('qualiex_access_token'),
|
|
898
|
+
getCompanyId: () => localStorage.getItem('selectedUnitId'),
|
|
899
|
+
userNameFieldSuffix: '_name', // default
|
|
900
|
+
userEmailFieldSuffix: '_email', // default
|
|
901
|
+
userUsernameFieldSuffix: '_username', // default
|
|
902
|
+
});
|
|
903
|
+
```
|
|
904
|
+
|
|
905
|
+
#### **Uso Básico: Lista de Campos de ID**
|
|
906
|
+
|
|
907
|
+
Use `userIdFields` para enriquecer múltiplos campos de ID automaticamente:
|
|
908
|
+
|
|
909
|
+
```typescript
|
|
910
|
+
import { createSimpleService } from 'forlogic-core';
|
|
911
|
+
|
|
912
|
+
const { service, useCrudHook } = createSimpleService({
|
|
913
|
+
tableName: 'evaluations',
|
|
914
|
+
schemaName: 'performance',
|
|
915
|
+
entityName: 'Avaliação',
|
|
916
|
+
searchFields: ['title', 'description'],
|
|
917
|
+
enableQualiexEnrichment: true,
|
|
918
|
+
|
|
919
|
+
// ✅ Lista de campos de ID para enriquecer
|
|
920
|
+
userIdFields: ['target_user_id', 'evaluator_user_id'],
|
|
921
|
+
});
|
|
922
|
+
```
|
|
923
|
+
|
|
924
|
+
**Resultado automático:**
|
|
925
|
+
- `target_user_id` → `target_user_name` (nome do usuário)
|
|
926
|
+
- `evaluator_user_id` → `evaluator_user_name` (nome do usuário)
|
|
927
|
+
|
|
928
|
+
#### **Uso Avançado: Mapeamento Customizado**
|
|
929
|
+
|
|
930
|
+
Use `userFieldsMapping` para controlar exatamente quais campos de saída criar:
|
|
931
|
+
|
|
932
|
+
```typescript
|
|
933
|
+
const { service, useCrudHook } = createSimpleService({
|
|
934
|
+
tableName: 'evaluations',
|
|
935
|
+
entityName: 'Avaliação',
|
|
936
|
+
enableQualiexEnrichment: true,
|
|
937
|
+
|
|
938
|
+
// ✅ Mapeamento granular de campos
|
|
939
|
+
userFieldsMapping: [
|
|
940
|
+
{
|
|
941
|
+
idField: 'target_user_id',
|
|
942
|
+
nameField: 'avaliado_nome', // customizado
|
|
943
|
+
emailField: 'avaliado_email', // opcional
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
idField: 'evaluator_user_id',
|
|
947
|
+
nameField: 'avaliador_nome',
|
|
948
|
+
emailField: 'avaliador_email',
|
|
949
|
+
usernameField: 'avaliador_username', // opcional
|
|
950
|
+
},
|
|
951
|
+
],
|
|
952
|
+
});
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
**Resultado customizado:**
|
|
956
|
+
- `target_user_id` → `avaliado_nome`, `avaliado_email`
|
|
957
|
+
- `evaluator_user_id` → `avaliador_nome`, `avaliador_email`, `avaliador_username`
|
|
958
|
+
|
|
959
|
+
#### **Enrichment Manual (Casos Avançados)**
|
|
960
|
+
|
|
961
|
+
Para casos onde você precisa enriquecer dados fora do `createSimpleService`:
|
|
962
|
+
|
|
963
|
+
```typescript
|
|
964
|
+
import { QualiexEnrichmentService } from 'forlogic-core';
|
|
965
|
+
|
|
966
|
+
// Enriquecer entidades manualmente
|
|
967
|
+
const enrichedData = await QualiexEnrichmentService.enrichWithUserData(entities, {
|
|
968
|
+
entityName: 'Avaliações',
|
|
969
|
+
userIdFields: ['target_user_id', 'evaluator_user_id'],
|
|
970
|
+
});
|
|
971
|
+
|
|
972
|
+
// Ou com mapeamento customizado
|
|
973
|
+
const enrichedData = await QualiexEnrichmentService.enrichWithUserData(entities, {
|
|
974
|
+
entityName: 'Avaliações',
|
|
975
|
+
userFieldsMapping: [
|
|
976
|
+
{ idField: 'target_user_id', nameField: 'avaliado_nome' },
|
|
977
|
+
{ idField: 'evaluator_user_id', nameField: 'avaliador_nome' },
|
|
978
|
+
],
|
|
979
|
+
});
|
|
980
|
+
```
|
|
981
|
+
|
|
982
|
+
#### **Utilitários de Derivação de Campos**
|
|
983
|
+
|
|
984
|
+
Use helpers para gerar nomes de campos de forma consistente:
|
|
985
|
+
|
|
986
|
+
```typescript
|
|
987
|
+
import { deriveNameField, deriveEmailField } from 'forlogic-core';
|
|
988
|
+
|
|
989
|
+
deriveNameField('target_user_id'); // => "target_user_name"
|
|
990
|
+
deriveEmailField('evaluator_user_id'); // => "evaluator_user_email"
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
#### **Retrocompatibilidade**
|
|
994
|
+
|
|
995
|
+
O comportamento legado (`id_user` → `responsible_name`) continua funcionando sem mudanças:
|
|
996
|
+
|
|
997
|
+
```typescript
|
|
998
|
+
// Código antigo funciona normalmente
|
|
999
|
+
const { service } = createSimpleService({
|
|
1000
|
+
tableName: 'processes',
|
|
1001
|
+
entityName: 'Processo',
|
|
1002
|
+
enableQualiexEnrichment: true,
|
|
1003
|
+
// Automaticamente enriquece id_user -> responsible_name
|
|
1004
|
+
});
|
|
1005
|
+
```
|
|
1006
|
+
|
|
1007
|
+
#### **Características**
|
|
1008
|
+
|
|
1009
|
+
✅ **Cache inteligente**: Usuários Qualiex são cacheados por 5 minutos
|
|
1010
|
+
✅ **Resiliência**: Falhas não quebram a UI (apenas logs no console)
|
|
1011
|
+
✅ **Deduplicação**: IDs duplicados são buscados apenas uma vez
|
|
1012
|
+
✅ **Não sobrescreve**: Campos já preenchidos não são alterados
|
|
1013
|
+
✅ **Type-safe**: TypeScript valida configurações
|
|
1014
|
+
✅ **Retrocompatível**: Projetos antigos continuam funcionando
|
|
1015
|
+
|
|
1016
|
+
#### **Boas Práticas**
|
|
1017
|
+
|
|
1018
|
+
✅ **BOM**: Configurar `getAccessToken` e `getCompanyId` para evitar dependência de localStorage
|
|
1019
|
+
|
|
1020
|
+
```typescript
|
|
1021
|
+
setQualiexConfig({
|
|
1022
|
+
enableUserEnrichment: true,
|
|
1023
|
+
getAccessToken: async () => {
|
|
1024
|
+
// Buscar token de forma segura (ex: context, Zustand, etc)
|
|
1025
|
+
return myAuthStore.getToken();
|
|
1026
|
+
},
|
|
1027
|
+
getCompanyId: () => myAppStore.getSelectedCompanyId(),
|
|
1028
|
+
});
|
|
1029
|
+
```
|
|
1030
|
+
|
|
1031
|
+
❌ **EVITAR**: Múltiplos campos apontando para o mesmo campo de saída
|
|
1032
|
+
|
|
1033
|
+
```typescript
|
|
1034
|
+
// ❌ Conflito: ambos escrevem em "user_name"
|
|
1035
|
+
userFieldsMapping: [
|
|
1036
|
+
{ idField: 'created_by_id', nameField: 'user_name' },
|
|
1037
|
+
{ idField: 'updated_by_id', nameField: 'user_name' }, // Conflito!
|
|
1038
|
+
]
|
|
1039
|
+
```
|
|
1040
|
+
|
|
1041
|
+
✅ **BOM**: Usar sufixos distintos
|
|
1042
|
+
|
|
1043
|
+
```typescript
|
|
1044
|
+
// ✅ Campos de saída únicos
|
|
1045
|
+
userFieldsMapping: [
|
|
1046
|
+
{ idField: 'created_by_id', nameField: 'created_by_name' },
|
|
1047
|
+
{ idField: 'updated_by_id', nameField: 'updated_by_name' },
|
|
1048
|
+
]
|
|
1049
|
+
```
|
|
1050
|
+
|
|
1051
|
+
---
|
|
1052
|
+
|
|
876
1053
|
### 🏢 Sistema de Gestores de Locais (Qualiex)
|
|
877
1054
|
|
|
878
1055
|
Componentes para gerenciamento de gestores e membros de locais/sublocais integrados com a API Qualiex.
|