Skip to content

Commit 8a3253a

Browse files
committed
[server] 모든 테이블/원하는 테이블의 정보를 반환하는 REST API 추가 및 API 네이밍 변경
- 모든 테이블/원하는 테이블의 정보를 반환하는 REST API 추가 1. GET tables/*/info 2. POST tables/*/info 3. GET types/*/info - API URL 의 item 네이밍을 items 로 변경
1 parent 67bc4b8 commit 8a3253a

4 files changed

Lines changed: 151 additions & 18 deletions

File tree

server/Ntreev.Crema.ServiceHosts.Http/Apis/V1/Controllers/Commands/TablesApiController.cs

Lines changed: 77 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public string[] GetTableList(string databaseName, string tags = null)
5454
{
5555
var tables = dataBase.TableContext.Tables;
5656
var query = from item in tables
57-
where (item.TableInfo.DerivedTags & (TagInfo)tags) != TagInfo.Unused
58-
select item.Name;
57+
where (item.TableInfo.DerivedTags & (TagInfo)tags) != TagInfo.Unused
58+
select item.Name;
5959
return query.ToArray();
6060
}
6161

@@ -81,6 +81,46 @@ public IDictionary<int, object> GetTableData(string databaseName, string tableNa
8181
});
8282
}
8383

84+
[HttpGet]
85+
[Route("tables/*/info")]
86+
public GetTableInfoResponse[] GetTablesInfo(string databaseName, string tags = null, string columnTags = null)
87+
{
88+
var tables = this.GetTables(databaseName, tags);
89+
return tables.Select(table =>
90+
{
91+
return table.Dispatcher.Invoke(() =>
92+
{
93+
var tableInfo = table.TableInfo;
94+
if (!string.IsNullOrWhiteSpace(columnTags))
95+
{
96+
tableInfo = table.TableInfo.Filter((TagInfo)columnTags);
97+
}
98+
99+
return GetTableInfoResponse.ConvertFrom(tableInfo);
100+
});
101+
}).ToArray();
102+
}
103+
104+
[HttpPost]
105+
[Route("tables/*/info")]
106+
public GetTableInfoResponse[] GetTablesInfoByTableName(string databaseName, [FromBody] GetTableInfoByTableNameRequest request, string tags = null, string columnTags = null)
107+
{
108+
var tables = this.GetTables(databaseName, tags);
109+
var intersectTables = tables.Select(table => table.Dispatcher.Invoke(() => table.TableName))
110+
.Intersect(request.TableNames, StringComparer.OrdinalIgnoreCase);
111+
112+
return intersectTables.Select(tableName =>
113+
{
114+
var table = tables.First(o => o.Dispatcher.Invoke(() => o.TableName == tableName));
115+
var tableInfo = table.Dispatcher.Invoke(() => table.TableInfo);
116+
if (!string.IsNullOrWhiteSpace(columnTags))
117+
{
118+
tableInfo = tableInfo.Filter((TagInfo)columnTags);
119+
}
120+
return GetTableInfoResponse.ConvertFrom(tableInfo);
121+
}).ToArray();
122+
}
123+
84124
[HttpGet]
85125
[Route("tables/{tableName}/info")]
86126
public GetTableInfoResponse GetTableInfo(string databaseName, string tableName, string tags = null)
@@ -106,7 +146,7 @@ public GetTableInfoResponse GetTableInfo(string databaseName, string tableName,
106146
public void CopyTable(string databaseName, string tableName, [FromBody] CopyTableRequest request)
107147
{
108148
var table = this.GetTable(databaseName, tableName);
109-
table.Dispatcher.Invoke(() => table.Copy(this.Authentication, request.NewTableName,request.CategoryPath, request.CopyContent));
149+
table.Dispatcher.Invoke(() => table.Copy(this.Authentication, request.NewTableName, request.CategoryPath, request.CopyContent));
110150
}
111151

112152
[HttpDelete]
@@ -154,15 +194,15 @@ public ContainsTableResponse ContainsTable(string databaseName, string tableName
154194
}
155195

156196
[HttpGet]
157-
[Route("table-item")]
197+
[Route("table-items")]
158198
public string[] GetTableItemList(string databaseName)
159199
{
160200
var dataBase = this.GetDataBase(databaseName);
161201
return dataBase.Dispatcher.Invoke(() => dataBase.TableContext.Select(item => item.Path).ToArray());
162202
}
163203

164204
[HttpPost]
165-
[Route("table-item/log")]
205+
[Route("table-items/log")]
166206
public GetTableItemLogInfoResponse[] GetTableItemLogInfo(string databaseName, [FromBody] GetTableItemLogInfoRequest request)
167207
{
168208
var tableItem = this.GetTableItem(databaseName, request.TableItemPath);
@@ -174,31 +214,31 @@ public GetTableItemLogInfoResponse[] GetTableItemLogInfo(string databaseName, [F
174214
}
175215

176216
[HttpPut]
177-
[Route("table-item/move")]
217+
[Route("table-items/move")]
178218
public void MoveTableItem(string databaseName, [FromBody] MoveTableItemRequest request)
179219
{
180220
var tableItem = this.GetTableItem(databaseName, request.TableItemPath);
181221
tableItem.Dispatcher.Invoke(() => tableItem.Move(this.Authentication, request.ParentPath));
182222
}
183223

184224
[HttpPut]
185-
[Route("table-item/rename")]
225+
[Route("table-items/rename")]
186226
public void RenameTableItem(string databaseName, [FromBody] RenameTableItemRequest request)
187227
{
188228
var tableItem = this.GetTableItem(databaseName, request.TableItemPath);
189229
tableItem.Dispatcher.Invoke(() => tableItem.Rename(this.Authentication, request.NewName));
190230
}
191231

192232
[HttpPut]
193-
[Route("table-item/delete")]
233+
[Route("table-items/delete")]
194234
public void DeleteTableItem(string databaseName, [FromBody] DeleteTableItemRequest request)
195235
{
196236
var tableItem = this.GetTableItem(databaseName, request.TableItemPath);
197237
tableItem.Dispatcher.Invoke(() => tableItem.Delete(this.Authentication));
198238
}
199239

200240
[HttpPost]
201-
[Route("table-item/contains")]
241+
[Route("table-items/contains")]
202242
public ContainsTableItemResponse ContainsTableItem(string databaseName, [FromBody] ContainsTableItemRequest request)
203243
{
204244
var dataBase = this.GetDataBase(databaseName);
@@ -221,6 +261,34 @@ private IDataBase GetDataBase(string databaseName)
221261
});
222262
}
223263

264+
private ITable[] GetTables(string dataBaseName, string tags = null)
265+
{
266+
if (dataBaseName == null)
267+
throw new ArgumentNullException(nameof(dataBaseName));
268+
269+
var dataBase = this.cremaHost.Dispatcher.Invoke(() =>
270+
{
271+
if (this.cremaHost.DataBases.Contains(dataBaseName) == false)
272+
throw new DataBaseNotFoundException(dataBaseName);
273+
return this.cremaHost.DataBases[dataBaseName];
274+
});
275+
276+
return dataBase.Dispatcher.Invoke(() =>
277+
{
278+
if (tags == null)
279+
{
280+
var tables = dataBase.TableContext.Tables.ToArray();
281+
return tables;
282+
}
283+
else
284+
{
285+
var tagInfo = (TagInfo)tags;
286+
var tables = dataBase.TableContext.Tables.Where(table => (table.TableInfo.DerivedTags & tagInfo) != TagInfo.Unused).ToArray();
287+
return tables;
288+
}
289+
});
290+
}
291+
224292
private ITable GetTable(string dataBaseName, string tableName)
225293
{
226294
if (dataBaseName == null)

server/Ntreev.Crema.ServiceHosts.Http/Apis/V1/Controllers/Commands/TypesApiController.cs

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ public string[] GetTypeList(string databaseName, string tags = null)
5757

5858
var types = dataBase.TypeContext.Types;
5959
var query = from item in types
60-
where (item.TypeInfo.DerivedTags & (TagInfo)tags) != TagInfo.Unused
61-
select item.Name;
60+
where (item.TypeInfo.DerivedTags & (TagInfo)tags) != TagInfo.Unused
61+
select item.Name;
6262
return query.ToArray();
6363
});
6464
}
@@ -77,6 +77,19 @@ public IDictionary<int, object> GetTypeData(string databaseName, string typeName
7777
});
7878
}
7979

80+
[HttpGet]
81+
[Route("types/*/info")]
82+
public GetTypeInfoResponse[] GetTypeInfo(string databaseName)
83+
{
84+
var types = this.GetTypes(databaseName);
85+
86+
return types.Select(type => type.Dispatcher.Invoke(() =>
87+
{
88+
var typeInfo = type.TypeInfo;
89+
return GetTypeInfoResponse.ConvertFrom(typeInfo);
90+
})).ToArray();
91+
}
92+
8093
[HttpGet]
8194
[Route("types/{typeName}/info")]
8295
public GetTypeInfoResponse GetTypeInfo(string databaseName, string typeName)
@@ -135,7 +148,7 @@ public ContainsTypeResponse ContainsType(string databaseName, string typeName)
135148
}
136149

137150
[HttpGet]
138-
[Route("type-item")]
151+
[Route("type-items")]
139152
public string[] GetTypeItemList(string databaseName, string tags = null)
140153
{
141154
var dataBase = this.GetDataBase(databaseName);
@@ -148,38 +161,38 @@ public string[] GetTypeItemList(string databaseName, string tags = null)
148161

149162
var types = dataBase.TypeContext.Types;
150163
var query = from item in types
151-
where (item.TypeInfo.DerivedTags & (TagInfo)tags) != TagInfo.Unused
152-
select item.Name;
164+
where (item.TypeInfo.DerivedTags & (TagInfo)tags) != TagInfo.Unused
165+
select item.Name;
153166
return query.ToArray();
154167
});
155168
}
156169

157170
[HttpPut]
158-
[Route("type-item/delete")]
171+
[Route("type-items/delete")]
159172
public void DeleteTypeItem(string databaseName, [FromBody] DeleteTypeItemRequest request)
160173
{
161174
var typeItem = this.GetTypeItem(databaseName, request.TypeItemPath);
162175
typeItem.Dispatcher.Invoke(() => typeItem.Delete(this.Authentication));
163176
}
164177

165178
[HttpPut]
166-
[Route("type-item/move")]
179+
[Route("type-items/move")]
167180
public void MoveTypeItem(string databaseName, [FromBody] MoveTypeItemRequest request)
168181
{
169182
var typeItem = this.GetTypeItem(databaseName, request.TypeItemPath);
170183
typeItem.Dispatcher.Invoke(() => typeItem.Move(this.Authentication, request.ParentPath));
171184
}
172185

173186
[HttpPut]
174-
[Route("type-item/rename")]
187+
[Route("type-items/rename")]
175188
public void RenameTypeItem(string databaseName, [FromBody] RenameTypeItemRequest request)
176189
{
177190
var typeItem = this.GetTypeItem(databaseName, request.TypeItemPath);
178191
typeItem.Dispatcher.Invoke(() => typeItem.Rename(this.Authentication, request.NewName));
179192
}
180193

181194
[HttpPost]
182-
[Route("type-item/contains")]
195+
[Route("type-items/contains")]
183196
public ContainsTypeItemResponse ContainsTypeItem(string databaseName, [FromBody] ContainsTypeItemRequest request)
184197
{
185198
var dataBase = this.GetDataBase(databaseName);
@@ -202,6 +215,25 @@ private IDataBase GetDataBase(string databaseName)
202215
});
203216
}
204217

218+
private IType[] GetTypes(string dataBaseName)
219+
{
220+
if (dataBaseName == null)
221+
throw new ArgumentNullException(nameof(dataBaseName));
222+
223+
var dataBase = this.cremaHost.Dispatcher.Invoke(() =>
224+
{
225+
if (this.cremaHost.DataBases.Contains(dataBaseName) == false)
226+
throw new DataBaseNotFoundException(dataBaseName);
227+
return this.cremaHost.DataBases[dataBaseName];
228+
});
229+
230+
return dataBase.Dispatcher.Invoke(() =>
231+
{
232+
var types = dataBase.TypeContext.Types;
233+
return types.ToArray();
234+
}).ToArray();
235+
}
236+
205237
private IType GetType(string dataBaseName, string typeName)
206238
{
207239
if (dataBaseName == null)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//Released under the MIT License.
2+
//
3+
//Copyright (c) 2018 Ntreev Soft co., Ltd.
4+
//
5+
//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
6+
//documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
7+
//rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
8+
//persons to whom the Software is furnished to do so, subject to the following conditions:
9+
//
10+
//The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
11+
//Software.
12+
//
13+
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
14+
//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
15+
//COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16+
//OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17+
18+
using System;
19+
using System.Collections.Generic;
20+
using System.ComponentModel.DataAnnotations;
21+
using System.Linq;
22+
using System.Text;
23+
using System.Threading.Tasks;
24+
25+
namespace Ntreev.Crema.ServiceHosts.Http.Apis.V1.Requests.Commands
26+
{
27+
public class GetTableInfoByTableNameRequest
28+
{
29+
[Required]
30+
public string[] TableNames { get; set; }
31+
}
32+
}

server/Ntreev.Crema.ServiceHosts.Http/Ntreev.Crema.ServiceHosts.Http.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
<Compile Include="Apis\CremaAuthorizeAttribute.cs" />
9494
<Compile Include="Apis\CremaExceptionHandler.cs" />
9595
<Compile Include="Apis\CremaHttpHostExtensions.cs" />
96+
<Compile Include="Apis\V1\Requests\Commands\GetTableInfoByTableNameRequest.cs" />
9697
<Compile Include="Apis\V1\Responses\Commands\LoginAndLoadEnterDataBaseResponse.cs" />
9798
<Compile Include="HttpCommandServiceHost.cs" />
9899
<Compile Include="Apis\MefDependencyResolver.cs" />

0 commit comments

Comments
 (0)