restructure api routes
This commit is contained in:
parent
ee25824424
commit
295e42d0d3
@ -1,7 +1,7 @@
|
|||||||
meta {
|
meta {
|
||||||
name: /api/accounts
|
name: /api/accounts
|
||||||
type: http
|
type: http
|
||||||
seq: 9
|
seq: 2
|
||||||
}
|
}
|
||||||
|
|
||||||
get {
|
get {
|
||||||
@ -12,4 +12,5 @@ get {
|
|||||||
|
|
||||||
settings {
|
settings {
|
||||||
encodeUrl: true
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|||||||
21
.bruno/BRF/api-entries.bru
Normal file
21
.bruno/BRF/api-entries.bru
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
meta {
|
||||||
|
name: /api/entries
|
||||||
|
type: http
|
||||||
|
seq: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{base_url}}/api/entries?year=2015&journal=A
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
params:query {
|
||||||
|
year: 2015
|
||||||
|
journal: A
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
meta {
|
meta {
|
||||||
name: Financial Years
|
name: /api/financial-years
|
||||||
type: http
|
type: http
|
||||||
seq: 2
|
seq: 4
|
||||||
}
|
}
|
||||||
|
|
||||||
get {
|
get {
|
||||||
@ -1,20 +0,0 @@
|
|||||||
meta {
|
|
||||||
name: /api/invoice/:id
|
|
||||||
type: http
|
|
||||||
seq: 7
|
|
||||||
}
|
|
||||||
|
|
||||||
get {
|
|
||||||
url: {{base_url}}/api/invoices/:id
|
|
||||||
body: none
|
|
||||||
auth: inherit
|
|
||||||
}
|
|
||||||
|
|
||||||
params:path {
|
|
||||||
id: 234
|
|
||||||
}
|
|
||||||
|
|
||||||
settings {
|
|
||||||
encodeUrl: true
|
|
||||||
timeout: 0
|
|
||||||
}
|
|
||||||
16
.bruno/BRF/api-invoices--id.bru
Normal file
16
.bruno/BRF/api-invoices--id.bru
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
meta {
|
||||||
|
name: /api/invoices/:id
|
||||||
|
type: http
|
||||||
|
seq: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{base_url}}/api/invoices/2631
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
meta {
|
meta {
|
||||||
name: Invoices
|
name: /api/invoices
|
||||||
type: http
|
type: http
|
||||||
seq: 6
|
seq: 7
|
||||||
}
|
}
|
||||||
|
|
||||||
get {
|
get {
|
||||||
@ -12,4 +12,5 @@ get {
|
|||||||
|
|
||||||
settings {
|
settings {
|
||||||
encodeUrl: true
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
meta {
|
meta {
|
||||||
name: Object
|
name: /api/objects/:id
|
||||||
type: http
|
type: http
|
||||||
seq: 3
|
seq: 5
|
||||||
}
|
}
|
||||||
|
|
||||||
get {
|
get {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
meta {
|
meta {
|
||||||
name: Objects
|
name: /api/objects
|
||||||
type: http
|
type: http
|
||||||
seq: 4
|
seq: 6
|
||||||
}
|
}
|
||||||
|
|
||||||
get {
|
get {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
meta {
|
meta {
|
||||||
name: Result
|
name: /api/results/:year
|
||||||
type: http
|
type: http
|
||||||
seq: 5
|
seq: 11
|
||||||
}
|
}
|
||||||
|
|
||||||
get {
|
get {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
meta {
|
meta {
|
||||||
name: Results
|
name: /api/results
|
||||||
type: http
|
type: http
|
||||||
seq: 6
|
seq: 10
|
||||||
}
|
}
|
||||||
|
|
||||||
get {
|
get {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
meta {
|
meta {
|
||||||
name: /api/suppliers
|
name: /api/suppliers
|
||||||
type: http
|
type: http
|
||||||
seq: 8
|
seq: 9
|
||||||
}
|
}
|
||||||
|
|
||||||
get {
|
get {
|
||||||
@ -12,4 +12,5 @@ get {
|
|||||||
|
|
||||||
settings {
|
settings {
|
||||||
encodeUrl: true
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,14 @@
|
|||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
||||||
import knex from '../lib/knex.ts'
|
import knex from '../lib/knex.ts'
|
||||||
import StatusError from '../lib/status_error.ts'
|
|
||||||
|
|
||||||
import accounts from './api/accounts.ts'
|
import accounts from './api/accounts.ts'
|
||||||
|
import entries from './api/entries.ts'
|
||||||
|
import financialYears from './api/financial_years.ts'
|
||||||
import invoices from './api/invoices.ts'
|
import invoices from './api/invoices.ts'
|
||||||
|
import journals from './api/journals.ts'
|
||||||
|
import objects from './api/objects.ts'
|
||||||
|
import results from './api/results.ts'
|
||||||
|
|
||||||
export const FinancialYear = Type.Object({
|
export const FinancialYear = Type.Object({
|
||||||
year: Type.Number(),
|
year: Type.Number(),
|
||||||
@ -16,139 +20,12 @@ export type FinancialYearType = Static<typeof FinancialYear>
|
|||||||
|
|
||||||
const apiRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
const apiRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
||||||
fastify.register(accounts, { prefix: '/accounts' })
|
fastify.register(accounts, { prefix: '/accounts' })
|
||||||
|
fastify.register(entries, { prefix: '/entries' })
|
||||||
|
fastify.register(financialYears, { prefix: '/financial-years' })
|
||||||
fastify.register(invoices, { prefix: '/invoices' })
|
fastify.register(invoices, { prefix: '/invoices' })
|
||||||
|
fastify.register(journals, { prefix: '/journals' })
|
||||||
fastify.route({
|
fastify.register(objects, { prefix: '/objects' })
|
||||||
url: '/financial-years',
|
fastify.register(results, { prefix: '/results' })
|
||||||
method: 'GET',
|
|
||||||
handler() {
|
|
||||||
return knex('financialYear').select('*')
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
fastify.route({
|
|
||||||
url: '/objects',
|
|
||||||
method: 'GET',
|
|
||||||
handler() {
|
|
||||||
return knex('object AS o')
|
|
||||||
.select('o.id', 'o.number', 'o.name', 'd.number AS dimensionNumber', 'd.name AS dimensionName')
|
|
||||||
.innerJoin('dimension AS d', function () {
|
|
||||||
this.on('o.dimensionId', '=', 'd.id')
|
|
||||||
})
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
fastify.route({
|
|
||||||
url: '/objects/:id',
|
|
||||||
method: 'GET',
|
|
||||||
schema: {
|
|
||||||
params: Type.Object({
|
|
||||||
id: Type.Number(),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
async handler(req) {
|
|
||||||
// const object = knex('object').first('*').where('id', req.params.id)
|
|
||||||
|
|
||||||
// if (!object) throw new StatusError(404)
|
|
||||||
console.log(req.params.id)
|
|
||||||
|
|
||||||
return knex('transaction AS t')
|
|
||||||
.select('e.transactionDate', 't.accountNumber', 't.amount')
|
|
||||||
.innerJoin('transactions_to_objects AS to', function () {
|
|
||||||
this.on('t.id', 'to.transactionId')
|
|
||||||
})
|
|
||||||
.innerJoin('entry AS e', function () {
|
|
||||||
this.on('e.id', '=', 't.entryId')
|
|
||||||
})
|
|
||||||
.where('to.objectId', req.params.id)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
fastify.route({
|
|
||||||
url: '/results',
|
|
||||||
method: 'GET',
|
|
||||||
async handler() {
|
|
||||||
const years = await knex('financialYear').select('*')
|
|
||||||
|
|
||||||
const accounts = await knex('account').select('*')
|
|
||||||
|
|
||||||
return Promise.all(
|
|
||||||
years.map((year) =>
|
|
||||||
knex('account AS a')
|
|
||||||
.select('a.number', 'a.description')
|
|
||||||
.sum('t.amount as amount')
|
|
||||||
.innerJoin('transaction AS t', function () {
|
|
||||||
this.on('t.accountNumber', '=', 'a.number')
|
|
||||||
})
|
|
||||||
.innerJoin('entry AS e', function () {
|
|
||||||
this.on('t.entryId', '=', 'e.id')
|
|
||||||
})
|
|
||||||
.groupBy('a.number', 'a.description')
|
|
||||||
.where('a.number', '>=', 3000)
|
|
||||||
.where('e.financialYearId', year.id)
|
|
||||||
.orderBy('a.number')
|
|
||||||
.then((result) => ({
|
|
||||||
startDate: year.startDate,
|
|
||||||
endDate: year.endDate,
|
|
||||||
result,
|
|
||||||
})),
|
|
||||||
),
|
|
||||||
).then((years) => ({
|
|
||||||
accounts,
|
|
||||||
years,
|
|
||||||
}))
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
fastify.route({
|
|
||||||
url: '/results/:year',
|
|
||||||
method: 'GET',
|
|
||||||
schema: {
|
|
||||||
params: Type.Object({
|
|
||||||
year: Type.Number(),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
async handler(req) {
|
|
||||||
const year = await knex('financialYear').first('*').where('year', req.params.year)
|
|
||||||
|
|
||||||
if (!year) return null
|
|
||||||
|
|
||||||
return knex('transaction AS t')
|
|
||||||
.select('t.accountNumber', 'a.description')
|
|
||||||
.sum('t.amount as amount')
|
|
||||||
.innerJoin('account AS a', function () {
|
|
||||||
this.on('t.accountNumber', '=', 'a.number')
|
|
||||||
})
|
|
||||||
.innerJoin('entry AS e', function () {
|
|
||||||
this.on('t.entryId', '=', 'e.id')
|
|
||||||
})
|
|
||||||
.groupBy('t.accountNumber', 'a.description')
|
|
||||||
.where('t.accountNumber', '>=', 3000)
|
|
||||||
.where('e.financialYearId', year.id)
|
|
||||||
.orderBy('t.accountNumber')
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
fastify.route({
|
|
||||||
url: '/suppliers',
|
|
||||||
method: 'GET',
|
|
||||||
async handler(req) {
|
|
||||||
return knex('supplier').select('*').orderBy('name')
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
fastify.route({
|
|
||||||
url: '/suppliers/:id',
|
|
||||||
method: 'GET',
|
|
||||||
schema: {
|
|
||||||
params: Type.Object({
|
|
||||||
id: Type.Number(),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
async handler(req) {
|
|
||||||
return knex('supplier').first('*').where('id', req.params.id)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
done()
|
done()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import _ from 'lodash'
|
|||||||
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
||||||
import knex from '../../lib/knex.ts'
|
import knex from '../../lib/knex.ts'
|
||||||
|
|
||||||
const apiRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
const accountRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
||||||
fastify.route({
|
fastify.route({
|
||||||
url: '/',
|
url: '/',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@ -14,4 +14,4 @@ const apiRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
|||||||
done()
|
done()
|
||||||
}
|
}
|
||||||
|
|
||||||
export default apiRoutes
|
export default accountRoutes
|
||||||
|
|||||||
30
server/routes/api/entries.ts
Normal file
30
server/routes/api/entries.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import _ from 'lodash'
|
||||||
|
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
||||||
|
import knex from '../../lib/knex.ts'
|
||||||
|
|
||||||
|
const entryRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
||||||
|
fastify.route({
|
||||||
|
url: '/',
|
||||||
|
method: 'GET',
|
||||||
|
schema: {
|
||||||
|
querystring: Type.Object({
|
||||||
|
journal: Type.String(),
|
||||||
|
year: Type.Number(),
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
async handler(req) {
|
||||||
|
const financialYearId = (await knex('financialYear').first('id').where('year', req.query.year))?.id
|
||||||
|
const journalId = (await knex('journal').first('id').where('identifier', req.query.journal))?.id
|
||||||
|
|
||||||
|
if (!financialYearId || !journalId) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return knex('entry').select('*').orderBy('entryDate').where({ financialYearId, journalId })
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
|
||||||
|
export default entryRoutes
|
||||||
17
server/routes/api/financial_years.ts
Normal file
17
server/routes/api/financial_years.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import _ from 'lodash'
|
||||||
|
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
||||||
|
import knex from '../../lib/knex.ts'
|
||||||
|
|
||||||
|
const financialYearRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
||||||
|
fastify.route({
|
||||||
|
url: '/',
|
||||||
|
method: 'GET',
|
||||||
|
handler() {
|
||||||
|
return knex('financialYear').select('*')
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
|
||||||
|
export default financialYearRoutes
|
||||||
@ -3,7 +3,7 @@ import { Type, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-
|
|||||||
import knex from '../../lib/knex.ts'
|
import knex from '../../lib/knex.ts'
|
||||||
import StatusError from '../../lib/status_error.ts'
|
import StatusError from '../../lib/status_error.ts'
|
||||||
|
|
||||||
const apiRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
const invoiceRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
||||||
fastify.route({
|
fastify.route({
|
||||||
url: '/',
|
url: '/',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@ -124,4 +124,4 @@ const apiRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
|||||||
done()
|
done()
|
||||||
}
|
}
|
||||||
|
|
||||||
export default apiRoutes
|
export default invoiceRoutes
|
||||||
|
|||||||
17
server/routes/api/journals.ts
Normal file
17
server/routes/api/journals.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import _ from 'lodash'
|
||||||
|
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
||||||
|
import knex from '../../lib/knex.ts'
|
||||||
|
|
||||||
|
const journalRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
||||||
|
fastify.route({
|
||||||
|
url: '/',
|
||||||
|
method: 'GET',
|
||||||
|
handler() {
|
||||||
|
return knex('journal').select('*').orderBy('identifier')
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
|
||||||
|
export default journalRoutes
|
||||||
42
server/routes/api/objects.ts
Normal file
42
server/routes/api/objects.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import _ from 'lodash'
|
||||||
|
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
||||||
|
import knex from '../../lib/knex.ts'
|
||||||
|
|
||||||
|
const objectRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
||||||
|
fastify.route({
|
||||||
|
url: '/',
|
||||||
|
method: 'GET',
|
||||||
|
handler() {
|
||||||
|
return knex('object AS o')
|
||||||
|
.select('o.id', 'o.number', 'o.name', 'd.number AS dimensionNumber', 'd.name AS dimensionName')
|
||||||
|
.innerJoin('dimension AS d', function () {
|
||||||
|
this.on('o.dimensionId', '=', 'd.id')
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
fastify.route({
|
||||||
|
url: '/:id',
|
||||||
|
method: 'GET',
|
||||||
|
schema: {
|
||||||
|
params: Type.Object({
|
||||||
|
id: Type.Number(),
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
async handler(req) {
|
||||||
|
return knex('transaction AS t')
|
||||||
|
.select('e.transactionDate', 't.accountNumber', 't.amount')
|
||||||
|
.innerJoin('transactions_to_objects AS to', function () {
|
||||||
|
this.on('t.id', 'to.transactionId')
|
||||||
|
})
|
||||||
|
.innerJoin('entry AS e', function () {
|
||||||
|
this.on('e.id', '=', 't.entryId')
|
||||||
|
})
|
||||||
|
.where('to.objectId', req.params.id)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
|
||||||
|
export default objectRoutes
|
||||||
74
server/routes/api/results.ts
Normal file
74
server/routes/api/results.ts
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
import _ from 'lodash'
|
||||||
|
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
||||||
|
import knex from '../../lib/knex.ts'
|
||||||
|
|
||||||
|
const resultRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
||||||
|
fastify.route({
|
||||||
|
url: '/',
|
||||||
|
method: 'GET',
|
||||||
|
async handler() {
|
||||||
|
const years = await knex('financialYear').select('*')
|
||||||
|
|
||||||
|
const accounts = await knex('account').select('*')
|
||||||
|
|
||||||
|
return Promise.all(
|
||||||
|
years.map((year) =>
|
||||||
|
knex('account AS a')
|
||||||
|
.select('a.number', 'a.description')
|
||||||
|
.sum('t.amount as amount')
|
||||||
|
.innerJoin('transaction AS t', function () {
|
||||||
|
this.on('t.accountNumber', '=', 'a.number')
|
||||||
|
})
|
||||||
|
.innerJoin('entry AS e', function () {
|
||||||
|
this.on('t.entryId', '=', 'e.id')
|
||||||
|
})
|
||||||
|
.groupBy('a.number', 'a.description')
|
||||||
|
.where('a.number', '>=', 3000)
|
||||||
|
.where('e.financialYearId', year.id)
|
||||||
|
.orderBy('a.number')
|
||||||
|
.then((result) => ({
|
||||||
|
startDate: year.startDate,
|
||||||
|
endDate: year.endDate,
|
||||||
|
result,
|
||||||
|
})),
|
||||||
|
),
|
||||||
|
).then((years) => ({
|
||||||
|
accounts,
|
||||||
|
years,
|
||||||
|
}))
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
fastify.route({
|
||||||
|
url: '/:year',
|
||||||
|
method: 'GET',
|
||||||
|
schema: {
|
||||||
|
params: Type.Object({
|
||||||
|
year: Type.Number(),
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
async handler(req) {
|
||||||
|
const year = await knex('financialYear').first('*').where('year', req.params.year)
|
||||||
|
|
||||||
|
if (!year) return null
|
||||||
|
|
||||||
|
return knex('transaction AS t')
|
||||||
|
.select('t.accountNumber', 'a.description')
|
||||||
|
.sum('t.amount as amount')
|
||||||
|
.innerJoin('account AS a', function () {
|
||||||
|
this.on('t.accountNumber', '=', 'a.number')
|
||||||
|
})
|
||||||
|
.innerJoin('entry AS e', function () {
|
||||||
|
this.on('t.entryId', '=', 'e.id')
|
||||||
|
})
|
||||||
|
.groupBy('t.accountNumber', 'a.description')
|
||||||
|
.where('t.accountNumber', '>=', 3000)
|
||||||
|
.where('e.financialYearId', year.id)
|
||||||
|
.orderBy('t.accountNumber')
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
|
||||||
|
export default resultRoutes
|
||||||
30
server/routes/api/suppliers.ts
Normal file
30
server/routes/api/suppliers.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import _ from 'lodash'
|
||||||
|
import { Type, type Static, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
|
||||||
|
import knex from '../../lib/knex.ts'
|
||||||
|
|
||||||
|
const journalRoutes: FastifyPluginCallbackTypebox = (fastify, _, done) => {
|
||||||
|
fastify.route({
|
||||||
|
url: '/',
|
||||||
|
method: 'GET',
|
||||||
|
async handler(req) {
|
||||||
|
return knex('supplier').select('*').orderBy('name')
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
fastify.route({
|
||||||
|
url: '/:id',
|
||||||
|
method: 'GET',
|
||||||
|
schema: {
|
||||||
|
params: Type.Object({
|
||||||
|
id: Type.Number(),
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
async handler(req) {
|
||||||
|
return knex('supplier').first('*').where('id', req.params.id)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
|
||||||
|
export default journalRoutes
|
||||||
Loading…
Reference in New Issue
Block a user