Skip to content

Commit 6ced918

Browse files
Table api iteration 1 (#104)
1 parent 5770527 commit 6ced918

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1308
-179
lines changed

docs/protocol/whitefox-protocol-api.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1426,6 +1426,9 @@ components:
14261426
type: object
14271427
additionalProperties:
14281428
type: string
1429+
required:
1430+
- name
1431+
- properties
14291432
example:
14301433
name: customer
14311434
properties:

server/src/main/java/io/whitefox/api/deltasharing/Mappers.java

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
package io.whitefox.api.deltasharing;
22

33
import io.whitefox.api.deltasharing.model.v1.generated.*;
4+
import io.whitefox.api.model.v1.generated.CreateTableInput;
45
import io.whitefox.api.model.v1.generated.ProviderInput;
6+
import io.whitefox.api.model.v1.generated.TableInfo;
57
import io.whitefox.core.*;
68
import io.whitefox.core.Schema;
79
import io.whitefox.core.Share;
8-
import io.whitefox.core.Table;
10+
import io.whitefox.core.SharedTable;
11+
import io.whitefox.core.Storage;
12+
import io.whitefox.core.StorageProperties;
13+
import io.whitefox.core.StorageType;
14+
import io.whitefox.core.actions.CreateInternalTable;
915
import io.whitefox.core.actions.CreateMetastore;
1016
import io.whitefox.core.actions.CreateProvider;
11-
import io.whitefox.core.storage.CreateStorage;
12-
import io.whitefox.core.storage.Storage;
13-
import io.whitefox.core.storage.StorageProperties;
14-
import io.whitefox.core.storage.StorageType;
17+
import io.whitefox.core.actions.CreateStorage;
1518
import java.time.OffsetDateTime;
1619
import java.util.Arrays;
1720
import java.util.List;
@@ -34,11 +37,12 @@ public static io.whitefox.api.deltasharing.model.v1.generated.Schema schema2api(
3437
.share(schema.share());
3538
}
3639

37-
public static io.whitefox.api.deltasharing.model.v1.generated.Table table2api(Table table) {
40+
public static io.whitefox.api.deltasharing.model.v1.generated.Table table2api(
41+
SharedTable sharedTable) {
3842
return new io.whitefox.api.deltasharing.model.v1.generated.Table()
39-
.name(table.name())
40-
.share(table.share())
41-
.schema(table.schema());
43+
.name(sharedTable.name())
44+
.share(sharedTable.share())
45+
.schema(sharedTable.schema());
4246
}
4347

4448
public static io.whitefox.api.model.v1.generated.Storage storage2api(Storage storage) {
@@ -315,4 +319,25 @@ public static io.whitefox.api.model.v1.generated.Provider provider2Api(Provider
315319
.updatedBy(provider.updatedBy().name())
316320
.owner(provider.owner().name());
317321
}
322+
323+
public static TableInfo internalTable2api(InternalTable internalTable) {
324+
return new TableInfo()
325+
.providerName(internalTable.provider().name())
326+
.name(internalTable.name())
327+
.comment(internalTable.comment().orElse(null))
328+
.properties(internalTable.properties().asMap())
329+
.validatedAt(internalTable.validatedAt().orElse(null))
330+
.createdAt(internalTable.createdAt())
331+
.createdBy(internalTable.createdBy().name())
332+
.updatedAt(internalTable.updatedAt())
333+
.updatedBy(internalTable.updatedBy().name());
334+
}
335+
336+
public static CreateInternalTable api2createInternalTable(CreateTableInput createTableInput) {
337+
return new CreateInternalTable(
338+
createTableInput.getName(),
339+
Optional.ofNullable(createTableInput.getComment()),
340+
createTableInput.getSkipValidation(),
341+
InternalTable.InternalTableProperties.fromMap(createTableInput.getProperties()));
342+
}
318343
}

server/src/main/java/io/whitefox/api/server/ApiUtils.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
import io.whitefox.api.deltasharing.model.v1.generated.CommonErrorResponse;
55
import io.whitefox.core.Principal;
66
import io.whitefox.core.services.DeltaSharedTable;
7-
import io.whitefox.core.services.exceptions.MetastoreNotFound;
8-
import io.whitefox.core.services.exceptions.StorageNotFound;
9-
import io.whitefox.persistence.DuplicateKeyException;
7+
import io.whitefox.core.services.exceptions.AlreadyExists;
8+
import io.whitefox.core.services.exceptions.NotFound;
109
import jakarta.ws.rs.core.Response;
1110
import java.util.Map;
1211
import java.util.Optional;
@@ -22,20 +21,13 @@ public interface ApiUtils extends DeltaHeaders {
2221
.errorCode("BAD REQUEST")
2322
.message(ExceptionUtil.generateStackTrace(t)))
2423
.build();
25-
} else if (t instanceof DuplicateKeyException) {
24+
} else if (t instanceof AlreadyExists) {
2625
return Response.status(Response.Status.CONFLICT)
2726
.entity(new CommonErrorResponse()
2827
.errorCode("CONFLICT")
2928
.message(ExceptionUtil.generateStackTrace(t)))
3029
.build();
31-
} else if (t instanceof MetastoreNotFound) {
32-
return Response.status(Response.Status.NOT_FOUND)
33-
.entity(new CommonErrorResponse()
34-
.errorCode("NOT FOUND")
35-
.message(ExceptionUtil.generateStackTrace(t)))
36-
.build();
37-
}
38-
if (t instanceof StorageNotFound) {
30+
} else if (t instanceof NotFound) {
3931
return Response.status(Response.Status.NOT_FOUND)
4032
.entity(new CommonErrorResponse()
4133
.errorCode("NOT FOUND")
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package io.whitefox.api.server;
2+
3+
import io.whitefox.api.deltasharing.Mappers;
4+
import io.whitefox.api.model.v1.generated.CreateTableInput;
5+
import io.whitefox.api.model.v1.generated.PatchTableInput;
6+
import io.whitefox.api.server.v1.generated.TableV1Api;
7+
import io.whitefox.core.services.TableService;
8+
import jakarta.ws.rs.core.Response;
9+
10+
public class TableV1ApiImpl implements TableV1Api, ApiUtils {
11+
12+
private final TableService tableService;
13+
14+
public TableV1ApiImpl(TableService tableService) {
15+
this.tableService = tableService;
16+
}
17+
18+
@Override
19+
public Response createTableInProvider(String providerName, CreateTableInput createTableInput) {
20+
return wrapExceptions(
21+
() -> Response.status(Response.Status.CREATED)
22+
.entity(Mappers.internalTable2api(tableService.createInternalTable(
23+
providerName,
24+
getRequestPrincipal(),
25+
Mappers.api2createInternalTable(createTableInput))))
26+
.build(),
27+
exceptionToResponse);
28+
}
29+
30+
@Override
31+
public Response deleteTableInProvider(String providerName, String tableName, String force) {
32+
return Response.status(501).build();
33+
}
34+
35+
@Override
36+
public Response describeTableInProvider(String providerName, String tableName) {
37+
return wrapExceptions(
38+
() -> optionalToNotFound(
39+
tableService.getInternalTable(providerName, tableName).map(Mappers::internalTable2api),
40+
t -> Response.ok(t).build()),
41+
exceptionToResponse);
42+
}
43+
44+
@Override
45+
public Response listTablesInProvider(String providerName) {
46+
return Response.status(501).build();
47+
}
48+
49+
@Override
50+
public Response patchTableInProvider(
51+
String providerName, String tableName, PatchTableInput patchTableInput) {
52+
return Response.status(501).build();
53+
}
54+
55+
@Override
56+
public Response validateTable(String providerName, String tableName) {
57+
return Response.status(501).build();
58+
}
59+
}

0 commit comments

Comments
 (0)