Type responses
This commit is contained in:
parent
03f84170b8
commit
8282fbb99b
|
@ -1,7 +1,7 @@
|
||||||
import sdk from "../../../sdk"
|
import sdk from "../../../sdk"
|
||||||
import { Ctx, ViewV2 } from "@budibase/types"
|
import { Ctx, FetchViewResponse, ViewResponse, ViewV2 } from "@budibase/types"
|
||||||
|
|
||||||
export async function fetch(ctx: Ctx) {
|
export async function fetch(ctx: Ctx<{}, FetchViewResponse>) {
|
||||||
const { tableId } = ctx.query
|
const { tableId } = ctx.query
|
||||||
|
|
||||||
if (tableId && typeof tableId !== "string") {
|
if (tableId && typeof tableId !== "string") {
|
||||||
|
@ -15,11 +15,17 @@ export async function fetch(ctx: Ctx) {
|
||||||
ctx.body = { views }
|
ctx.body = { views }
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function find(ctx: Ctx) {
|
export async function find(ctx: Ctx<{}, ViewResponse>) {
|
||||||
const { viewId } = ctx.params
|
const { viewId } = ctx.params
|
||||||
|
|
||||||
const result = await sdk.views.get(viewId)
|
const view = await sdk.views.get(viewId)
|
||||||
ctx.body = result
|
if (!view) {
|
||||||
|
ctx.throw(404)
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.body = {
|
||||||
|
data: view,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function save(ctx: Ctx<ViewV2>) {
|
export async function save(ctx: Ctx<ViewV2>) {
|
||||||
|
@ -31,10 +37,15 @@ export async function save(ctx: Ctx<ViewV2>) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function remove(ctx: Ctx) {
|
export async function remove(ctx: Ctx<{}, {}>) {
|
||||||
const { viewId } = ctx.params
|
const { viewId } = ctx.params
|
||||||
const { _rev } = await sdk.views.get(viewId)
|
const doc = await sdk.views.get(viewId)
|
||||||
|
if (!doc) {
|
||||||
|
ctx.throw(404)
|
||||||
|
}
|
||||||
|
|
||||||
await sdk.views.remove(viewId, _rev)
|
const { _rev } = doc
|
||||||
|
|
||||||
|
await sdk.views.remove(viewId, _rev!)
|
||||||
ctx.status = 204
|
ctx.status = 204
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ describe("/v2/views", () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
describe("fetch", () => {
|
describe("fetch", () => {
|
||||||
const views: any[] = []
|
const views: ViewV2[] = []
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
table = await config.createTable(priceTable())
|
table = await config.createTable(priceTable())
|
||||||
|
@ -115,22 +115,23 @@ describe("/v2/views", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("getView", () => {
|
describe("getView", () => {
|
||||||
let view: any
|
let view: ViewV2
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
view = (await saveView(createView(table._id!))).body
|
view = (await saveView(createView(table._id!))).body
|
||||||
})
|
})
|
||||||
|
|
||||||
it("can fetch the expected view", async () => {
|
it("can fetch the expected view", async () => {
|
||||||
const res = await getView(view._id).expect(200)
|
const res = await getView(view._id!).expect(200)
|
||||||
expect(res.status).toBe(200)
|
expect(res.status).toBe(200)
|
||||||
expect(res.body._id).toBeDefined()
|
|
||||||
|
|
||||||
expect(res.body).toEqual({
|
expect(res.body).toEqual({
|
||||||
|
data: {
|
||||||
...view,
|
...view,
|
||||||
_id: expect.any(String),
|
_id: view._id,
|
||||||
_rev: expect.any(String),
|
_rev: view._rev,
|
||||||
createdAt: expect.any(String),
|
createdAt: expect.any(String),
|
||||||
updatedAt: expect.any(String),
|
updatedAt: expect.any(String),
|
||||||
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -141,13 +142,13 @@ describe("/v2/views", () => {
|
||||||
|
|
||||||
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(table._id!)
|
const newView = createView(table._id!)
|
||||||
const res = await saveView(view)
|
const res = await saveView(newView)
|
||||||
expect(res.status).toBe(200)
|
expect(res.status).toBe(200)
|
||||||
expect(res.body._id).toBeDefined()
|
expect(res.body._id).toBeDefined()
|
||||||
|
|
||||||
expect(res.body).toEqual({
|
expect(res.body).toEqual({
|
||||||
...view,
|
...newView,
|
||||||
_id: expect.any(String),
|
_id: expect.any(String),
|
||||||
_rev: expect.any(String),
|
_rev: expect.any(String),
|
||||||
})
|
})
|
||||||
|
@ -155,7 +156,7 @@ describe("/v2/views", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("delete", () => {
|
describe("delete", () => {
|
||||||
let view: any
|
let view: ViewV2
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
table = await config.createTable(priceTable())
|
table = await config.createTable(priceTable())
|
||||||
|
@ -163,14 +164,14 @@ describe("/v2/views", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
it("can delete an existing view", async () => {
|
it("can delete an existing view", async () => {
|
||||||
await getView(view._id).expect(200)
|
await getView(view._id!).expect(200)
|
||||||
|
|
||||||
await request
|
await request
|
||||||
.delete(`/api/v2/views/${view._id}`)
|
.delete(`/api/v2/views/${view._id}`)
|
||||||
.set(config.defaultHeaders())
|
.set(config.defaultHeaders())
|
||||||
.expect(204)
|
.expect(204)
|
||||||
|
|
||||||
await getView(view._id).expect(404)
|
await getView(view._id!).expect(404)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -7,7 +7,7 @@ import {
|
||||||
import { ViewV2 } from "@budibase/types"
|
import { ViewV2 } from "@budibase/types"
|
||||||
import * as utils from "../../../db/utils"
|
import * as utils from "../../../db/utils"
|
||||||
|
|
||||||
export async function fetch() {
|
export async function fetch(): Promise<ViewV2[]> {
|
||||||
const db = context.getAppDB()
|
const db = context.getAppDB()
|
||||||
|
|
||||||
const startKey = `${DocumentType.VIEW}${SEPARATOR}`
|
const startKey = `${DocumentType.VIEW}${SEPARATOR}`
|
||||||
|
@ -20,7 +20,7 @@ export async function fetch() {
|
||||||
return response.rows.map(r => r.doc)
|
return response.rows.map(r => r.doc)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function findByTable(tableId: string) {
|
export async function findByTable(tableId: string): Promise<ViewV2[]> {
|
||||||
const db = context.getAppDB()
|
const db = context.getAppDB()
|
||||||
|
|
||||||
const startKey = utils.viewIDPrefix(tableId)
|
const startKey = utils.viewIDPrefix(tableId)
|
||||||
|
@ -33,13 +33,13 @@ export async function findByTable(tableId: string) {
|
||||||
return response.rows.map(r => r.doc)
|
return response.rows.map(r => r.doc)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function get(viewId: string) {
|
export async function get(viewId: string): Promise<ViewV2 | undefined> {
|
||||||
const db = context.getAppDB()
|
const db = context.getAppDB()
|
||||||
const result = await db.get(viewId)
|
const result = await db.get<ViewV2>(viewId)
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function save(view: ViewV2) {
|
export async function save(view: ViewV2): Promise<ViewV2> {
|
||||||
const db = context.getAppDB()
|
const db = context.getAppDB()
|
||||||
|
|
||||||
const response = await db.put(
|
const response = await db.put(
|
||||||
|
@ -50,12 +50,13 @@ export async function save(view: ViewV2) {
|
||||||
{}
|
{}
|
||||||
)
|
)
|
||||||
return {
|
return {
|
||||||
|
...view,
|
||||||
_id: response.id,
|
_id: response.id,
|
||||||
_rev: response.rev,
|
_rev: response.rev,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function remove(viewId: string, rev: string) {
|
export async function remove(viewId: string, rev: string): Promise<void> {
|
||||||
const db = context.getAppDB()
|
const db = context.getAppDB()
|
||||||
await db.remove(viewId, rev)
|
await db.remove(viewId, rev)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
export * from "./backup"
|
export * from "./backup"
|
||||||
export * from "./datasource"
|
export * from "./datasource"
|
||||||
|
export * from "./view"
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { ViewV2 } from "../../../documents"
|
||||||
|
|
||||||
|
export interface FetchViewResponse {
|
||||||
|
views: ViewV2[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ViewResponse {
|
||||||
|
data: ViewV2
|
||||||
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { Document } from "../document"
|
||||||
|
|
||||||
export interface View {
|
export interface View {
|
||||||
name: string
|
name: string
|
||||||
tableId: string
|
tableId: string
|
||||||
|
@ -10,7 +12,7 @@ export interface View {
|
||||||
meta?: Record<string, any>
|
meta?: Record<string, any>
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ViewV2 {
|
export interface ViewV2 extends Document {
|
||||||
name: string
|
name: string
|
||||||
tableId: string
|
tableId: string
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue