You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

176 lines
4.2 KiB
JavaScript

3 years ago
require('dotenv').config();
const Hapi = require('@hapi/hapi');
const Jwt = require('@hapi/jwt');
const ClientError = require('./exceptions/ClientError');
// authentications
const authentications = require('./api/authentications');
const AuthenticationsService = require('./services/postgres/AuthenticationsService');
const TokenManager = require('./tokenize/TokenManager');
const AuthenticationsValidator = require('./validator/authentications');
// users
const users = require('./api/users');
const UsersService = require('./services/postgres/UsersService');
const UsersValidator = require('./validator/users');
// registrations
const registrations = require('./api/registrations');
const RegistrationsService = require('./services/postgres/RegistrationService');
const RegistrationsValidator = require('./validator/registration');
// untis
const units = require('./api/units');
const UnitsService = require('./services/postgres/UnitsService');
// categories
const categories = require('./api/categories');
const CategoriesService = require('./services/postgres/CategoriesService');
const CategoriesValidator = require('./validator/categories');
// products
const products = require('./api/products');
const ProductsService = require('./services/postgres/ProductsService');
const ProductsValidator = require('./validator/products');
3 years ago
// sale transaction
const sales = require('./api/sales');
const SalesService = require('./services/postgres/SalesServive');
const SalesValidator = require('./validator/sales');
3 years ago
const init = async () => {
// instances
const usersService = new UsersService();
const authenticationsService = new AuthenticationsService();
const registrationsService = new RegistrationsService(usersService);
const unitsService = new UnitsService();
const categoriesService = new CategoriesService();
const productsService = new ProductsService();
3 years ago
const salesService = new SalesService();
3 years ago
// server
const server = Hapi.server({
port: process.env.PORT,
host: process.env.HOST,
routes: {
cors: {
origin: ['*'],
},
},
});
// register plugin
await server.register([
{
plugin: Jwt,
},
]);
// jwt
server.auth.strategy('kasiraja_jwt', 'jwt', {
keys: process.env.ACCESS_TOKEN_KEY,
verify: {
aud: false,
iss: false,
sub: false,
maxAgeSec: process.env.ACCESS_TOKEN_AGE,
},
validate: (artifacts) => ({
isValid: true,
credentials: {
id: artifacts.decoded.payload.id,
companyId: artifacts.decoded.payload.companyId,
},
}),
});
// route /
server.route({
method: 'GET',
path: '/',
handler: () => ({
status: 'Ok!',
}),
});
// catch error response
server.ext('onPreResponse', (request, h) => {
const { response } = request;
if (response instanceof ClientError) {
const newResponse = h.response({
status: 'fail',
message: response.message,
});
newResponse.code(response.statusCode);
return newResponse;
}
if (response instanceof Error) {
console.log(response);
}
return response.continue || response;
});
// register plugin -> routes
await server.register([
{
plugin: authentications,
options: {
authenticationsService,
usersService,
tokenManager: TokenManager,
validator: AuthenticationsValidator,
},
},
{
plugin: registrations,
options: {
service: registrationsService,
validator: RegistrationsValidator,
},
},
{
plugin: users,
options: {
service: usersService,
validator: UsersValidator,
},
},
{
plugin: units,
options: {
service: unitsService,
},
},
{
plugin: products,
options: {
service: productsService,
validator: ProductsValidator,
},
},
{
plugin: categories,
options: {
service: categoriesService,
validator: CategoriesValidator,
},
},
3 years ago
{
plugin: sales,
options: {
service: salesService,
validator: SalesValidator,
},
},
3 years ago
]);
await server.start();
console.log(`Server berjalan pada ${server.info.uri}`);
};
init();