import bodyParser from 'body-parser';
import express from 'express';
import Knex from 'knex';
import { Model } from 'objection';
import { buildTable, Column, Table } from 'objection-annotations';
import objectionCrud from 'objection-express-crud';
@Table('todo_list')
class Todo extends Model {
@Column('increments')
id: number;
@Column('string', { required: true, schema: { maxLength: 20 } })
content: string;
@Column('integer', { required: true })
priority: number;
}
(async () => {
await buildTable(Knex({
client: 'sqlite3',
connection: {
filename: process.env['DB_FILE'],
},
useNullAsDefault: true,
}), Todo);
const app = express();
app.use(bodyParser.json());
app.use('/todo', objectionCrud(Todo, {
async resultWrap(result, req, { routeName, getTotalPage, actualPage, getCount }) {
if (routeName === 'list') {
return {
items: result, paging: {
current: actualPage,
totalItem: await getCount(),
total: await getTotalPage(),
},
};
}
return result;
},
}));
app.listen(8080);
})();