Skip to content

Commit 86a63b0

Browse files
Zorin95670Adrien
authored andcommitted
wip
1 parent 25d5093 commit 86a63b0

File tree

12 files changed

+566
-455
lines changed

12 files changed

+566
-455
lines changed

.idea/compiler.xml

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/dataSources.xml

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dpp/README.md

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,24 +33,12 @@ entities:
3333
access:
3434
create:
3535
table: ACCOUNT_TABLE_NAME
36-
entityMapping:
37-
id: "{{ context.response.id }}"
38-
userName: "{{ context.response.userName }}"
3936
update:
4037
table: ACCOUNT_TABLE_NAME
41-
entityMapping:
42-
id: "{{ context.response.id }}"
43-
userName: "{{ context.response.userName }}"
4438
delete:
4539
table: ACCOUNT_TABLE_NAME
46-
entityMapping:
47-
id: "{{ context.response.id }}"
48-
userName: "{{ context.response.userName }}"
4940
findAll:
5041
table: ACCOUNT_TABLE_NAME
51-
entityMapping:
52-
id: "{{ context.response.id }}"
53-
userName: "{{ context.response.userName }}"
5442
attributes:
5543
- name: id
5644
type: String
@@ -78,7 +66,6 @@ entities:
7866
| `providers[].password` | ✅ | Database authentication password |
7967
| `entities[].provider` | ✅ | Reference to the database provider name |
8068
| `entities[].access.table` | ✅ | Target database table name for this entity |
81-
| `entities[].access.entityMapping` | ❌ | Maps fields from the SQL result to the dynamic entity |
8269
| `entities[].attributes[].access.column` | ✅ | Target database column name for this attribute |
8370
| `entities[].attributes[].access.primaryKey` | ✅ | Indicates if this attribute is a primary key |
8471

dpp/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@
7575
<version>2.21.1</version>
7676
<scope>test</scope>
7777
</dependency>
78+
<dependency>
79+
<groupId>com.hubspot.jinjava</groupId>
80+
<artifactId>jinjava</artifactId>
81+
<version>2.8.3</version>
82+
<scope>test</scope>
83+
</dependency>
7884
</dependencies>
7985

8086
</project>

dpp/src/main/java/io/github/linagora/linid/im/dpp/DatabaseProviderPlugin.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,7 @@ public DynamicEntity create(final TaskExecutionContext context,
108108
final DynamicEntity dynamicEntity) {
109109
DatabasePluginConfiguration databasePluginConfiguration = getDatabaseConfiguration("create", dynamicEntity);
110110
DynamicEntity result = crudService.insert(config, databasePluginConfiguration, dynamicEntity);
111-
112-
System.out.println(result.getAttributes());
113-
taskEngine.execute(dynamicEntity, context, "beforeDatabaseMappingCreate");
114-
var resultEntity = mappingEntity(context, databasePluginConfiguration, result);
115-
taskEngine.execute(dynamicEntity, context, "afterDatabaseMappingCreate");
116-
117-
return resultEntity;
111+
return result;
118112
}
119113

120114
/**

dpp/src/main/java/io/github/linagora/linid/im/dpp/service/CrudServiceImpl.java

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import io.github.linagora.linid.im.corelib.exception.ApiException;
3030
import io.github.linagora.linid.im.corelib.i18n.I18nMessage;
31+
import io.github.linagora.linid.im.corelib.plugin.config.dto.AttributeConfiguration;
3132
import io.github.linagora.linid.im.corelib.plugin.config.dto.ProviderConfiguration;
3233
import io.github.linagora.linid.im.corelib.plugin.entity.DynamicEntity;
3334
import io.github.linagora.linid.im.corelib.plugin.task.TaskEngine;
@@ -164,20 +165,16 @@ public DynamicEntity selectOne(final TaskExecutionContext context,
164165
public DynamicEntity insert(final ProviderConfiguration config,
165166
final DatabasePluginConfiguration databasePluginConfiguration,
166167
final DynamicEntity dynamicEntity) {
167-
168-
DSLContext dsl = dslRegistry.getDsl(config);
169168
String tableName = databasePluginConfiguration.getTable();
170-
Table<?> table = DSL.table(DSL.name(tableName));
171-
Map<Field<?>, Object> fields = buildFields(dynamicEntity);
172169

173-
System.out.println(fields);
174170
try {
171+
DSLContext dsl = dslRegistry.getDsl(config);
172+
Table<?> table = DSL.table(DSL.name(tableName));
173+
Map<Field<?>, Object> fields = buildFieldValues(tableName, dynamicEntity);
174+
175175
Record record = dsl.insertInto(table)
176176
.set(fields)
177-
// DSL.asterisk allows retrieving all columns of the table (basically does a *
178-
// in the query)
179-
.returning()
180-
// .returning(DSL.asterisk())
177+
.returning(buildFields(tableName, dynamicEntity))
181178
.fetchOne();
182179

183180
if (record == null) {
@@ -187,6 +184,7 @@ public DynamicEntity insert(final ProviderConfiguration config,
187184

188185
return mappingEntity(record, dynamicEntity);
189186
} catch (Exception e) {
187+
e.printStackTrace();
190188
log.error("Error INSERT on tableName `{}`: {}", tableName, e.getMessage());
191189
throw new ApiException(400,
192190
I18nMessage.of("dpp.error.insert", Map.of("table", tableName, "error", e.getMessage())));
@@ -203,7 +201,7 @@ public DynamicEntity update(final ProviderConfiguration config,
203201
String tableName = databasePluginConfiguration.getTable();
204202
Table<?> table = DSL.table(DSL.name(tableName));
205203
var idColumn = resolveIdColumn(dynamicEntity);
206-
Map<Field<?>, Object> fields = buildFields(dynamicEntity);
204+
Map<Field<?>, Object> fields = buildFieldValues(tableName, dynamicEntity);
207205

208206
try {
209207
Record record = dsl.update(table)
@@ -236,7 +234,7 @@ public DynamicEntity patch(final ProviderConfiguration config,
236234
String tableName = databasePluginConfiguration.getTable();
237235
Table<?> table = DSL.table(DSL.name(tableName));
238236
var idColumn = resolveIdColumn(dynamicEntity);
239-
Map<Field<?>, Object> fields = buildPartialFields(dynamicEntity);
237+
Map<Field<?>, Object> fields = buildPartialFieldValues(dynamicEntity);
240238

241239
try {
242240
Record record = dsl.update(table)
@@ -317,24 +315,38 @@ public Name resolveIdColumn(final DynamicEntity dynamicEntity) {
317315
* @param dynamicEntity the source entity
318316
* @return the map of database fields and values
319317
*/
320-
public Map<Field<?>, Object> buildFields(final DynamicEntity dynamicEntity) {
318+
public Map<Field<?>, Object> buildFieldValues(final String tableName, final DynamicEntity dynamicEntity) {
321319
Map<String, Object> attributes = dynamicEntity.getAttributes();
322320

323321
return dynamicEntity.getConfiguration().getAttributes().stream()
324322
.filter(attr -> Boolean.FALSE.equals(attr.getAccess().get("primaryKey")))
325323
.filter(attr -> attr.getAccess().get("column") != null)
326324
.collect(Collectors.toMap(
327-
attr -> DSL.field(DSL.name((String) attr.getAccess().get("column"))),
325+
attr -> DSL.field(DSL.name(tableName, (String) attr.getAccess().get("column"))),
328326
attr -> attributes.getOrDefault(attr.getName(), null)));
329327
}
330328

329+
/**
330+
* Builds a list of fields for a full update/insert operation.
331+
*
332+
* @param tableName the table name
333+
* @param dynamicEntity the source entity
334+
* @return the list of database fields
335+
*/
336+
public List<Field<?>> buildFields(final String tableName, final DynamicEntity dynamicEntity) {
337+
return dynamicEntity.getConfiguration().getAttributes().stream()
338+
.filter(attr -> attr.getAccess().get("column") != null)
339+
.map(attr -> DSL.field(DSL.name(tableName, (String) attr.getAccess().get("column"))))
340+
.collect(Collectors.toList());
341+
}
342+
331343
/**
332344
* Builds a map of fields and values for a partial update (patch).
333345
*
334346
* @param dynamicEntity the source entity
335347
* @return the map of database fields and values
336348
*/
337-
public Map<Field<?>, Object> buildPartialFields(final DynamicEntity dynamicEntity) {
349+
public Map<Field<?>, Object> buildPartialFieldValues(final DynamicEntity dynamicEntity) {
338350
Map<String, Object> attributes = dynamicEntity.getAttributes();
339351

340352
return dynamicEntity.getConfiguration().getAttributes().stream()
@@ -359,14 +371,13 @@ public DynamicEntity mappingEntity(final Record record, final DynamicEntity dyna
359371
entity.setConfiguration(dynamicEntity.getConfiguration());
360372
entity.setAttributes(new HashMap<>());
361373

362-
System.out.println(recordMap);
363-
dynamicEntity.getConfiguration().getAttributes().forEach(attr -> {
364-
String column = (String) attr.getAccess().get("column");
365-
366-
if (column != null && recordMap.containsKey(column)) {
367-
entity.getAttributes().put(attr.getName(), recordMap.get(column));
368-
}
369-
});
374+
entity.setAttributes(dynamicEntity.getConfiguration()
375+
.getAttributes()
376+
.stream()
377+
.collect(Collectors.toMap(
378+
AttributeConfiguration::getName,
379+
attr -> recordMap.get((String) attr.getAccess().get("column"))
380+
)));
370381

371382
return entity;
372383
}

0 commit comments

Comments
 (0)