Infer table on search

This commit is contained in:
Adria Navarro 2023-07-19 18:08:26 +02:00
parent 36b82681ff
commit 6d973ce99a
6 changed files with 18 additions and 35 deletions

View File

@ -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,
}
)
}

View File

@ -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
)

View File

@ -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({

View File

@ -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()

View File

@ -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]

View File

@ -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)