Skip to content

Commit

Permalink
feat-IQueryAbility-提供字段别名的支持,并可对equal\notequal做单元测试
Browse files Browse the repository at this point in the history
  • Loading branch information
aruis committed Sep 5, 2024
1 parent 37a16fa commit aec9475
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 12 deletions.
137 changes: 137 additions & 0 deletions my-boot/src/test/java/net/ximatai/muyun/platform/TestQuery.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
package net.ximatai.muyun.platform;

import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
import io.restassured.common.mapper.TypeRef;
import jakarta.inject.Inject;
import jakarta.ws.rs.Path;
import net.ximatai.muyun.ability.ITableCreateAbility;
import net.ximatai.muyun.ability.curd.std.ICURDAbility;
import net.ximatai.muyun.ability.curd.std.IQueryAbility;
import net.ximatai.muyun.core.Scaffold;
import net.ximatai.muyun.database.IDatabaseAccess;
import net.ximatai.muyun.database.builder.Column;
import net.ximatai.muyun.database.builder.TableWrapper;
import net.ximatai.muyun.model.PageResult;
import net.ximatai.muyun.model.QueryItem;
import net.ximatai.muyun.testcontainers.PostgresTestResource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Map;

import static io.restassured.RestAssured.given;
import static org.junit.jupiter.api.Assertions.assertEquals;

@QuarkusTest
@QuarkusTestResource(value = PostgresTestResource.class, restrictToAnnotatedClass = true)
class TestQuery {

private String path = "/test_query";

@Inject
IDatabaseAccess databaseAccess;

@Inject
TestQueryController testController;

String tableName;

List<String> ids;

@BeforeEach
void setUp() {
tableName = testController.getMainTable();
databaseAccess.execute("TRUNCATE TABLE %s".formatted(tableName));

var id1 = testController.create(Map.of("id", "1", "name", "test1", "t_create", "2024-01-01 12:00:00"));
var id2 = testController.create(Map.of("id", "2", "name", "test2", "t_create", "2024-01-02 12:00:00"));
var id3 = testController.create(Map.of("id", "3", "name", "test3", "t_create", "2024-01-03 12:00:00"));
var id4 = testController.create(Map.of("id", "4", "name", "test4", "t_create", "2024-01-04 12:00:00"));
var id5 = testController.create(Map.of("id", "5", "name", "test5", "t_create", "2024-01-05 12:00:00"));
var id6 = testController.create(Map.of("id", "6", "name", "test6", "t_create", "2024-01-06 12:00:00"));
var id7 = testController.create(Map.of("id", "7", "name", "test7", "t_create", "2024-01-07 12:00:00"));
var id8 = testController.create(Map.of("id", "8", "name", "test8", "t_create", "2024-01-08 12:00:00"));

ids = List.of(id1, id2, id3, id4, id5, id6, id7, id8);
}

@Test
void testEqual() {
String id = ids.getFirst();

Map<String, String> request = Map.of("id", id);

PageResult<Map> response = given()
.contentType("application/json")
.queryParam("noPage", true)
.body(request)
.when()
.post("%s/view".formatted(path))
.then()
.statusCode(200)
.extract()
.as(new TypeRef<>() {
});

assertEquals(1, response.getTotal());
assertEquals(1, response.getList().size());
assertEquals(id, response.getList().get(0).get("id"));
}

@Test
void testNotEqual() {
String id = ids.getFirst();

Map<String, String> request = Map.of("no_id", id);

PageResult<Map> response = given()
.contentType("application/json")
.queryParam("noPage", true)
.body(request)
.when()
.post("%s/view".formatted(path))
.then()
.statusCode(200)
.extract()
.as(new TypeRef<>() {
});

assertEquals(7, response.getTotal());
}

}

@Path("/test_query")
class TestQueryController extends Scaffold implements ICURDAbility, ITableCreateAbility, IQueryAbility {

@Override
public String getSchemaName() {
return "test";
}

@Override
public String getMainTable() {
return "test_table_query";
}

@Override
public TableWrapper fitOutTable() {
return TableWrapper.withName(getMainTable())
.setSchema(getSchemaName())
.setPrimaryKey(Column.ID_POSTGRES)
.addColumn(Column.of("name").setType("varchar"))
.addColumn(Column.of("t_create").setDefaultValue("now()"));

}

@Override
public List<QueryItem> queryItemList() {
return List.of(
QueryItem.of("id"),
QueryItem.of("id").setAlias("no_id").setSymbolType(QueryItem.SymbolType.NOT_EQUAL),
QueryItem.of("name")
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@ default List<QueryItem> queryFields() {

@POST
@Path("/view")
default PageResult view(@QueryParam("page") int page,
@QueryParam("size") int size,
default PageResult view(@QueryParam("page") Integer page,
@QueryParam("size") Integer size,
@QueryParam("noPage") Boolean noPage,
@QueryParam("sort") List<String> sort,
Map<String, Object> queryBody) {
return ISelectAbility.super.view(page, size, sort, queryBody, queryItemList());
return ISelectAbility.super.view(page, size, noPage, sort, queryBody, queryItemList());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,13 @@ default List<OrderColumn> getOrderColumns() {

@GET
@Path("/view")
default PageResult view(@QueryParam("page") int page, @QueryParam("size") int size, @QueryParam("sort") List<String> sort) {
return view(page, size, sort, null, null);
default PageResult view(@QueryParam("page") Integer page, @QueryParam("size") Integer size, @QueryParam("noPage") Boolean noPage, @QueryParam("sort") List<String> sort) {
return view(page, size, noPage, sort, null, null);
}

default PageResult view(int page,
int size,
default PageResult view(Integer page,
Integer size,
Boolean noPage,
List<String> sort,
Map<String, Object> queryBody,
List<QueryItem> queryItemList
Expand Down Expand Up @@ -71,7 +72,7 @@ default PageResult view(int page,
if (queryBody != null && queryItemList != null && !queryItemList.isEmpty()) {
queryBody.forEach((k, v) -> {
StringBuilder condition = new StringBuilder();
QueryItem qi = queryItemList.stream().filter(item -> item.getField().equals(k)).findFirst().orElse(null);
QueryItem qi = queryItemList.stream().filter(item -> item.getAlias().equals(k)).findFirst().orElse(null);

if (qi == null) {
throw new QueryException("查询条件%s未配置,查询失败".formatted(k));
Expand Down Expand Up @@ -165,10 +166,15 @@ default PageResult view(int page,
);
}

// 添加分页参数
querySql.append(" offset ? limit ? ");
params.add((page - 1) * size);
params.add(size);
page = page == null ? 1 : page;
size = size == null ? 10 : size;

if (noPage == null || !noPage) {
// 添加分页参数
querySql.append(" offset ? limit ? ");
params.add((page - 1) * size);
params.add(size);
}

List<?> list = getDatabase().query(querySql.toString(), params);

Expand Down

0 comments on commit aec9475

Please sign in to comment.