Infer table on search
This commit is contained in:
parent
36b82681ff
commit
6d973ce99a
|
@ -147,25 +147,25 @@ export async function search(ctx: any) {
|
|||
}
|
||||
|
||||
export async function searchView(ctx: Ctx<void, SearchResponse>) {
|
||||
const { tableId, viewId } = ctx.params
|
||||
const { viewId } = ctx.params
|
||||
|
||||
const view = await sdk.views.get(tableId, viewId)
|
||||
const view = await sdk.views.get(viewId)
|
||||
if (!view) {
|
||||
ctx.throw(404, `View ${viewId} not found in table ${tableId}`)
|
||||
ctx.throw(404, `View ${viewId} not found`)
|
||||
}
|
||||
|
||||
ctx.status = 200
|
||||
ctx.body = await quotas.addQuery(
|
||||
() =>
|
||||
sdk.rows.search({
|
||||
tableId,
|
||||
tableId: view.tableId,
|
||||
query: view.query || {},
|
||||
sort: view.sort?.field,
|
||||
sortOrder: view.sort?.order,
|
||||
sortType: view.sort?.type,
|
||||
}),
|
||||
{
|
||||
datasourceId: tableId,
|
||||
datasourceId: view.tableId,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
@ -147,7 +147,7 @@ router
|
|||
rowController.search
|
||||
)
|
||||
.get(
|
||||
"/api/v2/views/:tableId/:viewId/search",
|
||||
"/api/v2/views/:viewId/search",
|
||||
authorized(PermissionType.VIEW, PermissionLevel.READ),
|
||||
rowController.searchView
|
||||
)
|
||||
|
|
|
@ -716,10 +716,7 @@ describe("/rows", () => {
|
|||
}
|
||||
|
||||
const createViewResponse = await config.api.viewV2.create()
|
||||
const response = await config.api.viewV2.search(
|
||||
createViewResponse.tableId,
|
||||
createViewResponse.id
|
||||
)
|
||||
const response = await config.api.viewV2.search(createViewResponse.id)
|
||||
|
||||
expect(response.body.rows).toHaveLength(10)
|
||||
expect(response.body).toEqual({
|
||||
|
@ -753,10 +750,7 @@ describe("/rows", () => {
|
|||
}
|
||||
)
|
||||
|
||||
const response = await config.api.viewV2.search(
|
||||
createViewResponse.tableId,
|
||||
createViewResponse.id
|
||||
)
|
||||
const response = await config.api.viewV2.search(createViewResponse.id)
|
||||
|
||||
expect(response.body.rows).toHaveLength(5)
|
||||
expect(response.body).toEqual({
|
||||
|
@ -846,10 +840,7 @@ describe("/rows", () => {
|
|||
}
|
||||
)
|
||||
|
||||
const response = await config.api.viewV2.search(
|
||||
createViewResponse.tableId,
|
||||
createViewResponse.id
|
||||
)
|
||||
const response = await config.api.viewV2.search(createViewResponse.id)
|
||||
|
||||
expect(response.body.rows).toHaveLength(4)
|
||||
expect(response.body).toEqual({
|
||||
|
|
|
@ -3,7 +3,7 @@ import * as viewController from "../controllers/view"
|
|||
import * as rowController from "../controllers/row"
|
||||
import authorized from "../../middleware/authorized"
|
||||
import { paramResource } from "../../middleware/resourceId"
|
||||
import { DocumentType, SEPARATOR, permissions } from "@budibase/backend-core"
|
||||
import { permissions } from "@budibase/backend-core"
|
||||
|
||||
const router: Router = new Router()
|
||||
|
||||
|
|
|
@ -4,10 +4,8 @@ import { View, ViewV2 } from "@budibase/types"
|
|||
import sdk from "../../../sdk"
|
||||
import * as utils from "../../../db/utils"
|
||||
|
||||
export async function get(
|
||||
tableId: string,
|
||||
viewId: string
|
||||
): Promise<ViewV2 | undefined> {
|
||||
export async function get(viewId: string): Promise<ViewV2 | undefined> {
|
||||
const { tableId } = utils.extractViewInfoFromId(viewId)
|
||||
const table = await sdk.tables.getTable(tableId)
|
||||
const views = Object.values(table.views!)
|
||||
const view = views.find(v => isV2(v) && v.id === viewId) as ViewV2 | undefined
|
||||
|
@ -38,15 +36,13 @@ export function isV2(view: View | ViewV2): view is ViewV2 {
|
|||
return (view as ViewV2).version === 2
|
||||
}
|
||||
|
||||
export async function remove( viewId: string): Promise<void> {
|
||||
export async function remove(viewId: string): Promise<void> {
|
||||
const db = context.getAppDB()
|
||||
|
||||
const {tableId}=utils.extractViewInfoFromId(viewId)
|
||||
|
||||
const table = await sdk.tables.getTable(tableId)
|
||||
const view = await get(tableId, viewId)
|
||||
const view = await get(viewId)
|
||||
const table = await sdk.tables.getTable(view?.tableId)
|
||||
if (!view) {
|
||||
throw new HTTPError(`View ${viewId} not found in table ${tableId}`, 404)
|
||||
throw new HTTPError(`View ${viewId} not found`, 404)
|
||||
}
|
||||
|
||||
delete table.views![view?.name]
|
||||
|
|
|
@ -38,13 +38,9 @@ export class ViewV2API extends TestAPI {
|
|||
.expect(expectStatus)
|
||||
}
|
||||
|
||||
search = async (
|
||||
tableId: string,
|
||||
viewId: string,
|
||||
{ expectStatus } = { expectStatus: 200 }
|
||||
) => {
|
||||
search = async (viewId: string, { expectStatus } = { expectStatus: 200 }) => {
|
||||
return this.request
|
||||
.get(`/api/v2/views/${tableId}/${viewId}/search`)
|
||||
.get(`/api/v2/views/${viewId}/search`)
|
||||
.set(this.config.defaultHeaders())
|
||||
.expect("Content-Type", /json/)
|
||||
.expect(expectStatus)
|
||||
|
|
Loading…
Reference in New Issue