- feat: remove unnecessary migrations, controllers and models files.

- feat: metable store
- feat: metable store with settings store.
- feat: settings middleware to auto-save and load.
- feat: DI db manager to master container.
- feat: write some logs to sale invoices.
This commit is contained in:
Ahmed Bouhuolia
2020-09-03 16:51:48 +02:00
parent abefba22ee
commit 9ee7ed89ec
98 changed files with 1697 additions and 2052 deletions

View File

@@ -0,0 +1,14 @@
import knexManager from 'knex-db-manager';
import knexfile from '@/../config/systemKnexfile';
import config from '@/../config/config';
const knexConfig = knexfile[process.env.NODE_ENV];
export default () => knexManager.databaseManagerFactory({
knex: knexConfig,
dbManager: {
collate: [],
superUser: config.manager.superUser,
superPassword: config.manager.superPassword,
},
});

View File

@@ -1,13 +1,15 @@
import { Container } from 'typedi';
import LoggerInstance from '@/services/Logger';
import LoggerInstance from '@/loaders/Logger';
import agendaFactory from '@/loaders/agenda';
import SmsClientLoader from '@/loaders/smsClient';
import mailInstance from '@/loaders/mail';
import dbManagerFactory from '@/loaders/dbManager';
export default ({ mongoConnection, knex }) => {
try {
const agendaInstance = agendaFactory({ mongoConnection });
const smsClientInstance = SmsClientLoader();
const dbManager = dbManagerFactory();
Container.set('agenda', agendaInstance);
LoggerInstance.info('Agenda has been injected into container');
@@ -24,6 +26,9 @@ export default ({ mongoConnection, knex }) => {
Container.set('mail', mailInstance);
LoggerInstance.info('Mail instance has been injected into container');
Container.set('dbManager', dbManager);
LoggerInstance.info('Database manager has been injected into container.');
return { agenda: agendaInstance };
} catch (e) {
LoggerInstance.error('Error on dependency injector loader: %o', e);

View File

@@ -1,4 +1,4 @@
import Logger from '@/services/Logger';
import Logger from '@/loaders/Logger';
import mongooseLoader from '@/loaders/mongoose';
import jobsLoader from '@/loaders/jobs';
import expressLoader from '@/loaders/express';

View File

@@ -1,7 +1,8 @@
import Agenda from 'agenda';
import WelcomeEmailJob from '@/Jobs/welcomeEmail';
import ResetPasswordMailJob from '@/Jobs/ResetPasswordMail';
import ComputeItemCost from '@/Jobs/ComputeItemCost';
import WelcomeEmailJob from '@/jobs/WelcomeEmail';
import WelcomeSMSJob from '@/jobs/WelcomeSMS';
import ResetPasswordMailJob from '@/jobs/ResetPasswordMail';
import ComputeItemCost from '@/jobs/ComputeItemCost';
import RewriteInvoicesJournalEntries from '@/jobs/writeInvoicesJEntries';
import SendVoucherViaPhoneJob from '@/jobs/SendVoucherPhone';
import SendVoucherViaEmailJob from '@/jobs/SendVoucherEmail';
@@ -12,16 +13,24 @@ import SendMailNotificationTrialEnd from '@/jobs/MailNotificationTrialEnd';
import UserInviteMailJob from '@/jobs/UserInviteMail';
export default ({ agenda }: { agenda: Agenda }) => {
// Welcome mail and SMS message.
agenda.define(
'welcome-email',
{ priority: 'high' },
new WelcomeEmailJob().handler,
);
agenda.define(
'welcome-sms',
{ priority: 'high' },
new WelcomeSMSJob().handler
);
// Reset password mail.
agenda.define(
'reset-password-mail',
{ priority: 'high' },
new ResetPasswordMailJob().handler,
);
// User invite mail.
agenda.define(
'user-invite-mail',
{ priority: 'high' },

View File

@@ -0,0 +1,13 @@
import winston from 'winston';
const transports = {
console: new winston.transports.Console({ level: 'warn' }),
file: new winston.transports.File({ filename: 'stdout.log' }),
};
export default winston.createLogger({
transports: [
transports.console,
transports.file,
],
});

View File

@@ -0,0 +1,70 @@
import { mapValues } from 'lodash';
import Account from '@/models/Account';
import AccountBalance from '@/models/AccountBalance';
import AccountTransaction from '@/models/AccountTransaction';
import AccountType from '@/models/AccountType';
import Bill from '@/models/Bill';
import BillPayment from '@/models/BillPayment';
import BillPaymentEntry from '@/models/BillPaymentEntry';
import Currency from '@/models/Currency';
import Customer from '@/models/Customer';
import Vendor from '@/models/Vendor';
import ExchangeRate from '@/models/ExchangeRate';
import Expense from '@/models/Expense';
import ExpenseCategory from '@/models/ExpenseCategory';
import View from '@/models/View';
import ViewRole from '@/models/ViewRole';
import ViewColumn from '@/models/ViewColumn';
import Setting from '@/models/Setting';
import SaleInvoice from '@/models/SaleInvoice';
import SaleInvoiceEntry from '@/models/SaleInvoiceEntry';
import SaleReceipt from '@/models/SaleReceipt';
import SaleReceiptEntry from '@/models/SaleReceiptEntry';
import SaleEstimate from '@/models/SaleEstimate';
import SaleEstimateEntry from '@/models/SaleEstimateEntry';
import PaymentReceive from '@/models/PaymentReceive';
import PaymentReceiveEntry from '@/models/PaymentReceiveEntry';
import Option from '@/models/Option';
import Resource from '@/models/Resource';
import InventoryCostLotTracker from '@/models/InventoryCostLotTracker';
import InventoryTransaction from '@/models/InventoryTransaction';
import ResourceField from '@/models/ResourceField';
import ResourceFieldMetadata from '@/models/ResourceFieldMetadata';
export default (knex) => {
const models = {
Option,
Account,
AccountBalance,
AccountTransaction,
AccountType,
Bill,
BillPayment,
BillPaymentEntry,
Currency,
Customer,
Vendor,
ExchangeRate,
Expense,
ExpenseCategory,
View,
ViewRole,
ViewColumn,
Setting,
SaleInvoice,
SaleInvoiceEntry,
SaleReceipt,
SaleReceiptEntry,
SaleEstimate,
SaleEstimateEntry,
PaymentReceive,
PaymentReceiveEntry,
Resource,
InventoryTransaction,
InventoryCostLotTracker,
ResourceField,
ResourceFieldMetadata,
};
return mapValues(models, (model) => model.bindKnex(knex));
}