71 lines
2.2 KiB
JavaScript
71 lines
2.2 KiB
JavaScript
import ApiBuilder from '../core/builders/ApiBuilder.js';
|
|
import UrlBuilder from '../core/builders/UrlBuilder.js';
|
|
import SchemaBuilder from '../core/builders/SchemaBuilder.js';
|
|
import SchemaFileLoader from '../core/utils/SchemaFileLoader.js';
|
|
import listingRequestTranslator from '../logic/listings/listingRequestTranslator.js';
|
|
import listingResponseTranslator from '../logic/listings/listingResponseTranslator.js';
|
|
|
|
export default function registerListingsApi(baseUrl, common, dbClient) {
|
|
|
|
// GET /listings (feed)
|
|
new ApiBuilder(common)
|
|
.method('get')
|
|
.url(new UrlBuilder(baseUrl))
|
|
.schema(
|
|
new SchemaBuilder()
|
|
.responseSchema(
|
|
SchemaFileLoader.load('./models/listings/listings_response.json')
|
|
)
|
|
.requestTranslator(listingRequestTranslator)
|
|
.responseTranslator(listingResponseTranslator)
|
|
.defaultError({ error: 'INTERNAL_ERROR' })
|
|
)
|
|
.sync()
|
|
.build(dbClient);
|
|
|
|
// GET /listings/:id
|
|
new ApiBuilder(common)
|
|
.method('get')
|
|
.url(new UrlBuilder(baseUrl).withPathParams(SchemaFileLoader.load('./models/listings/listing_request_path_param.json')))
|
|
.schema(
|
|
new SchemaBuilder()
|
|
.responseSchema(
|
|
SchemaFileLoader.load('./models/listings/listings_response.json')
|
|
)
|
|
.requestTranslator(listingRequestTranslator)
|
|
.responseTranslator(listingResponseTranslator)
|
|
.defaultError({ error: 'NOT_FOUND' })
|
|
)
|
|
.sync()
|
|
.build(dbClient);
|
|
|
|
// POST /listings (create)
|
|
new ApiBuilder(common)
|
|
.method('post')
|
|
.url(new UrlBuilder(baseUrl))
|
|
.schema(
|
|
new SchemaBuilder()
|
|
.requestSchema(
|
|
SchemaFileLoader.load('./models/listings/listings_response.json')
|
|
)
|
|
.responseSchema(
|
|
SchemaFileLoader.load('./models/listings/listings_response.json')
|
|
)
|
|
.requestTranslator(req => ({
|
|
type: 'transaction',
|
|
handler: async (trx) => {
|
|
const [listing] = await trx('listings')
|
|
.insert(req.body)
|
|
.returning('*');
|
|
|
|
return listing;
|
|
}
|
|
}))
|
|
.responseTranslator(result => result)
|
|
.defaultError({ error: 'CREATE_FAILED' })
|
|
)
|
|
.sync()
|
|
.build(dbClient);
|
|
|
|
};
|