Find by table
This commit is contained in:
parent
f395b79cac
commit
e2c1a549de
|
@ -1,3 +1,4 @@
|
||||||
|
import { DocumentType, SEPARATOR } from "@budibase/backend-core"
|
||||||
import sdk from "../../../sdk"
|
import sdk from "../../../sdk"
|
||||||
import { Ctx, ViewV2 } from "@budibase/types"
|
import { Ctx, ViewV2 } from "@budibase/types"
|
||||||
|
|
||||||
|
@ -5,6 +6,12 @@ export async function fetch(ctx: Ctx) {
|
||||||
ctx.body = { views: await sdk.views.fetch() }
|
ctx.body = { views: await sdk.views.fetch() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function findByTable(ctx: Ctx) {
|
||||||
|
const tableId = `${DocumentType.TABLE}${SEPARATOR}${ctx.params.tableId}`
|
||||||
|
console.error(tableId)
|
||||||
|
ctx.body = { views: await sdk.views.findByTable(tableId) }
|
||||||
|
}
|
||||||
|
|
||||||
export async function save(ctx: Ctx<ViewV2>) {
|
export async function save(ctx: Ctx<ViewV2>) {
|
||||||
const view = ctx.request.body
|
const view = ctx.request.body
|
||||||
const result = await sdk.views.save(view)
|
const result = await sdk.views.save(view)
|
||||||
|
|
|
@ -33,9 +33,6 @@ describe("/views/v2", () => {
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
await config.init()
|
await config.init()
|
||||||
})
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
table = await config.createTable(priceTable())
|
table = await config.createTable(priceTable())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -48,10 +45,10 @@ describe("/views/v2", () => {
|
||||||
.expect(200)
|
.expect(200)
|
||||||
}
|
}
|
||||||
|
|
||||||
function createView(): ViewV2 {
|
function createView(tableId: string): ViewV2 {
|
||||||
return {
|
return {
|
||||||
name: generator.guid(),
|
name: generator.guid(),
|
||||||
tableId: table._id!,
|
tableId,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +58,7 @@ describe("/views/v2", () => {
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
table = await config.createTable(priceTable())
|
table = await config.createTable(priceTable())
|
||||||
for (let id = 0; id < 10; id++) {
|
for (let id = 0; id < 10; id++) {
|
||||||
const res = await saveView(createView())
|
const res = await saveView(createView(table._id!))
|
||||||
views.push(res.body)
|
views.push(res.body)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -80,9 +77,32 @@ describe("/views/v2", () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("findByTable", () => {
|
||||||
|
const views: any[] = []
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
table = await config.createTable(priceTable())
|
||||||
|
for (let id = 0; id < 5; id++) {
|
||||||
|
const res = await saveView(createView(table._id!))
|
||||||
|
views.push(res.body)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns all views", async () => {
|
||||||
|
const res = await request
|
||||||
|
.get(`/api/views/v2/${table._id}`)
|
||||||
|
.set(config.defaultHeaders())
|
||||||
|
.expect("Content-Type", /json/)
|
||||||
|
.expect(200)
|
||||||
|
|
||||||
|
expect(res.body.views.length).toBe(5)
|
||||||
|
expect(res.body.views).toEqual(expect.arrayContaining([]))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("create", () => {
|
describe("create", () => {
|
||||||
it("persist the view when the view is successfully created", async () => {
|
it("persist the view when the view is successfully created", async () => {
|
||||||
const view = createView()
|
const view = createView(table._id!)
|
||||||
const res = await saveView(view)
|
const res = await saveView(view)
|
||||||
expect(res.status).toBe(200)
|
expect(res.status).toBe(200)
|
||||||
expect(res.body._id).toBeDefined()
|
expect(res.body._id).toBeDefined()
|
||||||
|
|
|
@ -3,7 +3,7 @@ import * as viewController from "../controllers/view"
|
||||||
import * as rowController from "../controllers/row"
|
import * as rowController from "../controllers/row"
|
||||||
import authorized from "../../middleware/authorized"
|
import authorized from "../../middleware/authorized"
|
||||||
import { paramResource } from "../../middleware/resourceId"
|
import { paramResource } from "../../middleware/resourceId"
|
||||||
import { permissions } from "@budibase/backend-core"
|
import { DocumentType, SEPARATOR, permissions } from "@budibase/backend-core"
|
||||||
|
|
||||||
const router: Router = new Router()
|
const router: Router = new Router()
|
||||||
|
|
||||||
|
@ -13,6 +13,11 @@ router
|
||||||
authorized(permissions.BUILDER),
|
authorized(permissions.BUILDER),
|
||||||
viewController.v2.fetch
|
viewController.v2.fetch
|
||||||
)
|
)
|
||||||
|
.get(
|
||||||
|
`/api/views/v2/${DocumentType.TABLE}${SEPARATOR}:tableId`,
|
||||||
|
authorized(permissions.BUILDER),
|
||||||
|
viewController.v2.findByTable
|
||||||
|
)
|
||||||
.post(
|
.post(
|
||||||
"/api/views/v2",
|
"/api/views/v2",
|
||||||
authorized(permissions.BUILDER),
|
authorized(permissions.BUILDER),
|
||||||
|
|
|
@ -276,6 +276,10 @@ export function getMultiIDParams(ids: string[]) {
|
||||||
* Generates a new view ID.
|
* Generates a new view ID.
|
||||||
* @returns {string} The new view ID which the view doc can be stored under.
|
* @returns {string} The new view ID which the view doc can be stored under.
|
||||||
*/
|
*/
|
||||||
export function generateViewID(): string {
|
export function generateViewID(tableId: string) {
|
||||||
return `${DocumentType.VIEW}${SEPARATOR}${newid()}`
|
return `${viewIDPrefix(tableId)}${newid()}`
|
||||||
|
}
|
||||||
|
|
||||||
|
export function viewIDPrefix(tableId: string) {
|
||||||
|
return `${DocumentType.VIEW}${SEPARATOR}${tableId}${SEPARATOR}`
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ import {
|
||||||
context,
|
context,
|
||||||
} from "@budibase/backend-core"
|
} from "@budibase/backend-core"
|
||||||
import { ViewV2 } from "@budibase/types"
|
import { ViewV2 } from "@budibase/types"
|
||||||
import { generateViewID } from "../../../db/utils"
|
import * as utils from "../../../db/utils"
|
||||||
|
|
||||||
export async function fetch() {
|
export async function fetch() {
|
||||||
const db = context.getAppDB()
|
const db = context.getAppDB()
|
||||||
|
@ -20,6 +20,19 @@ export async function fetch() {
|
||||||
return response.rows.map(r => r.doc)
|
return response.rows.map(r => r.doc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function findByTable(tableId: string) {
|
||||||
|
const db = context.getAppDB()
|
||||||
|
|
||||||
|
const startKey = utils.viewIDPrefix(tableId)
|
||||||
|
const response = await db.allDocs({
|
||||||
|
startkey: startKey,
|
||||||
|
endkey: `${startKey}${UNICODE_MAX}`,
|
||||||
|
include_docs: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
return response.rows.map(r => r.doc)
|
||||||
|
}
|
||||||
|
|
||||||
export async function get(viewId: string) {
|
export async function get(viewId: string) {
|
||||||
const db = context.getAppDB()
|
const db = context.getAppDB()
|
||||||
const result = await db.get(viewId)
|
const result = await db.get(viewId)
|
||||||
|
@ -31,7 +44,7 @@ export async function save(view: ViewV2) {
|
||||||
|
|
||||||
const response = await db.put(
|
const response = await db.put(
|
||||||
{
|
{
|
||||||
_id: generateViewID(),
|
_id: utils.generateViewID(view.tableId),
|
||||||
...view,
|
...view,
|
||||||
},
|
},
|
||||||
{}
|
{}
|
||||||
|
|
Loading…
Reference in New Issue