Skip to content

Commit 7e27926

Browse files
committed
wip
1 parent 25d5093 commit 7e27926

File tree

12 files changed

+554
-457
lines changed

12 files changed

+554
-457
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: 21 additions & 24 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 = buildFields(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(fields.keySet())
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,13 +201,13 @@ 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 = buildFields(tableName, dynamicEntity);
207205

208206
try {
209207
Record record = dsl.update(table)
210208
.set(fields)
211209
.where(DSL.field(idColumn).eq(id))
212-
.returning(DSL.asterisk())
210+
.returning(fields.keySet())
213211
.fetchOne();
214212

215213
if (record == null) {
@@ -242,7 +240,8 @@ public DynamicEntity patch(final ProviderConfiguration config,
242240
Record record = dsl.update(table)
243241
.set(fields)
244242
.where(DSL.field(idColumn).eq(id))
245-
.returning(DSL.asterisk())
243+
// Rebuild fields to have all fields
244+
.returning(buildFields(tableName, dynamicEntity).keySet())
246245
.fetchOne();
247246

248247
if (record == null) {
@@ -317,15 +316,14 @@ public Name resolveIdColumn(final DynamicEntity dynamicEntity) {
317316
* @param dynamicEntity the source entity
318317
* @return the map of database fields and values
319318
*/
320-
public Map<Field<?>, Object> buildFields(final DynamicEntity dynamicEntity) {
319+
public Map<Field<?>, Object> buildFields(final String tableName, final DynamicEntity dynamicEntity) {
321320
Map<String, Object> attributes = dynamicEntity.getAttributes();
322321

323322
return dynamicEntity.getConfiguration().getAttributes().stream()
324-
.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"))),
328-
attr -> attributes.getOrDefault(attr.getName(), null)));
325+
attr -> DSL.field(DSL.name(tableName, (String) attr.getAccess().get("column"))),
326+
attr -> attributes.getOrDefault(attr.getName(), DSL.defaultValue())));
329327
}
330328

331329
/**
@@ -359,14 +357,13 @@ public DynamicEntity mappingEntity(final Record record, final DynamicEntity dyna
359357
entity.setConfiguration(dynamicEntity.getConfiguration());
360358
entity.setAttributes(new HashMap<>());
361359

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-
});
360+
entity.setAttributes(dynamicEntity.getConfiguration()
361+
.getAttributes()
362+
.stream()
363+
.collect(Collectors.toMap(
364+
AttributeConfiguration::getName,
365+
attr -> recordMap.get((String) attr.getAccess().get("column"))
366+
)));
370367

371368
return entity;
372369
}

0 commit comments

Comments
 (0)