mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-20 14:50:32 +00:00
Compare commits
4 Commits
20260129-2
...
v0.24.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5bf56e333 | ||
|
|
e3182c15b3 | ||
|
|
dfa63ece21 | ||
|
|
6e95bd7da1 |
@@ -35,4 +35,4 @@ WORKDIR /app/packages/server
|
|||||||
RUN git clone https://github.com/vishnubob/wait-for-it.git
|
RUN git clone https://github.com/vishnubob/wait-for-it.git
|
||||||
|
|
||||||
# Once we listen the mysql port run the migration task.
|
# Once we listen the mysql port run the migration task.
|
||||||
CMD ./wait-for-it/wait-for-it.sh mysql:3306 -- sh -c "pnpm run system:migrate:latest && pnpm run tenants:migrate:latest"
|
CMD ./wait-for-it/wait-for-it.sh mysql:3306 -- sh -c "node dist/cli.js system:migrate:latest && node dist/cli.js tenants:migrate:latest"
|
||||||
|
|||||||
@@ -75,6 +75,9 @@ COPY --from=builder --chown=nodejs:nodejs /app/packages/server/src/i18n ./packag
|
|||||||
COPY --from=builder --chown=nodejs:nodejs /app/packages/server/public ./packages/server/public
|
COPY --from=builder --chown=nodejs:nodejs /app/packages/server/public ./packages/server/public
|
||||||
COPY --from=builder --chown=nodejs:nodejs /app/packages/server/static ./packages/server/static
|
COPY --from=builder --chown=nodejs:nodejs /app/packages/server/static ./packages/server/static
|
||||||
|
|
||||||
|
# Copy database migration files (needed for running migrations)
|
||||||
|
COPY --from=builder --chown=nodejs:nodejs /app/packages/server/src/database ./packages/server/src/database
|
||||||
|
|
||||||
# Copy built shared packages (dist folders and package.json for module resolution)
|
# Copy built shared packages (dist folders and package.json for module resolution)
|
||||||
COPY --from=builder --chown=nodejs:nodejs /app/shared/bigcapital-utils/dist ./shared/bigcapital-utils/dist
|
COPY --from=builder --chown=nodejs:nodejs /app/shared/bigcapital-utils/dist ./shared/bigcapital-utils/dist
|
||||||
COPY --from=builder --chown=nodejs:nodejs /app/shared/pdf-templates/dist ./shared/pdf-templates/dist
|
COPY --from=builder --chown=nodejs:nodejs /app/shared/pdf-templates/dist ./shared/pdf-templates/dist
|
||||||
|
|||||||
@@ -2,10 +2,23 @@
|
|||||||
"$schema": "https://json.schemastore.org/nest-cli",
|
"$schema": "https://json.schemastore.org/nest-cli",
|
||||||
"collection": "@nestjs/schematics",
|
"collection": "@nestjs/schematics",
|
||||||
"sourceRoot": "src",
|
"sourceRoot": "src",
|
||||||
|
"entryFile": "main",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"deleteOutDir": true,
|
"deleteOutDir": true,
|
||||||
"assets": [
|
"assets": [
|
||||||
{ "include": "i18n/**/*", "watchAssets": true }
|
{ "include": "i18n/**/*", "watchAssets": true },
|
||||||
|
{ "include": "database/**/*", "exclude": "**/*.ts", "watchAssets": true }
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"projects": {
|
||||||
|
"cli": {
|
||||||
|
"type": "application",
|
||||||
|
"root": "src",
|
||||||
|
"entryFile": "cli",
|
||||||
|
"sourceRoot": "src",
|
||||||
|
"compilerOptions": {
|
||||||
|
"tsConfigPath": "tsconfig.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
import { Processor, WorkerHost } from '@nestjs/bullmq';
|
import { Processor, WorkerHost } from '@nestjs/bullmq';
|
||||||
import { Scope } from '@nestjs/common';
|
import { Scope } from '@nestjs/common';
|
||||||
import {
|
import { SendResetPasswordMailQueue } from '../Auth.constants';
|
||||||
SendResetPasswordMailJob,
|
|
||||||
SendResetPasswordMailQueue,
|
|
||||||
} from '../Auth.constants';
|
|
||||||
import { Process } from '@nestjs/bull';
|
|
||||||
import { Job } from 'bullmq';
|
import { Job } from 'bullmq';
|
||||||
import { AuthenticationMailMesssages } from '../AuthMailMessages.esrvice';
|
import { AuthenticationMailMesssages } from '../AuthMailMessages.esrvice';
|
||||||
import { MailTransporter } from '@/modules/Mail/MailTransporter.service';
|
import { MailTransporter } from '@/modules/Mail/MailTransporter.service';
|
||||||
@@ -23,7 +19,6 @@ export class SendResetPasswordMailProcessor extends WorkerHost {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Process(SendResetPasswordMailJob)
|
|
||||||
async process(job: Job<SendResetPasswordMailJobPayload>) {
|
async process(job: Job<SendResetPasswordMailJobPayload>) {
|
||||||
try {
|
try {
|
||||||
await this.authMailMesssages.sendResetPasswordMail(
|
await this.authMailMesssages.sendResetPasswordMail(
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
import { Scope } from '@nestjs/common';
|
import { Scope } from '@nestjs/common';
|
||||||
import { Job } from 'bullmq';
|
import { Job } from 'bullmq';
|
||||||
import { Process } from '@nestjs/bull';
|
|
||||||
import { Processor, WorkerHost } from '@nestjs/bullmq';
|
import { Processor, WorkerHost } from '@nestjs/bullmq';
|
||||||
import {
|
import { SendSignupVerificationMailQueue } from '../Auth.constants';
|
||||||
SendSignupVerificationMailJob,
|
|
||||||
SendSignupVerificationMailQueue,
|
|
||||||
} from '../Auth.constants';
|
|
||||||
import { MailTransporter } from '@/modules/Mail/MailTransporter.service';
|
import { MailTransporter } from '@/modules/Mail/MailTransporter.service';
|
||||||
import { AuthenticationMailMesssages } from '../AuthMailMessages.esrvice';
|
import { AuthenticationMailMesssages } from '../AuthMailMessages.esrvice';
|
||||||
|
|
||||||
@@ -21,7 +17,6 @@ export class SendSignupVerificationMailProcessor extends WorkerHost {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Process(SendSignupVerificationMailJob)
|
|
||||||
async process(job: Job<SendSignupVerificationMailJobPayload>) {
|
async process(job: Job<SendSignupVerificationMailJobPayload>) {
|
||||||
try {
|
try {
|
||||||
await this.authMailMesssages.sendSignupVerificationMail(
|
await this.authMailMesssages.sendSignupVerificationMail(
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import { Process } from '@nestjs/bull';
|
|
||||||
import { UseCls } from 'nestjs-cls';
|
import { UseCls } from 'nestjs-cls';
|
||||||
import { Processor, WorkerHost } from '@nestjs/bullmq';
|
import { Processor, WorkerHost } from '@nestjs/bullmq';
|
||||||
import { Scope } from '@nestjs/common';
|
import { Scope } from '@nestjs/common';
|
||||||
import { Job } from 'bullmq';
|
import { Job } from 'bullmq';
|
||||||
import {
|
import {
|
||||||
PlaidFetchTransitonsEventPayload,
|
PlaidFetchTransitonsEventPayload,
|
||||||
UpdateBankingPlaidTransitionsJob,
|
|
||||||
UpdateBankingPlaidTransitionsQueueJob,
|
UpdateBankingPlaidTransitionsQueueJob,
|
||||||
} from '../types/BankingPlaid.types';
|
} from '../types/BankingPlaid.types';
|
||||||
import { PlaidUpdateTransactions } from '../command/PlaidUpdateTransactions';
|
import { PlaidUpdateTransactions } from '../command/PlaidUpdateTransactions';
|
||||||
@@ -28,7 +26,6 @@ export class PlaidFetchTransactionsProcessor extends WorkerHost {
|
|||||||
/**
|
/**
|
||||||
* Triggers the function.
|
* Triggers the function.
|
||||||
*/
|
*/
|
||||||
@Process(UpdateBankingPlaidTransitionsJob)
|
|
||||||
@UseCls()
|
@UseCls()
|
||||||
async process(job: Job<PlaidFetchTransitonsEventPayload>) {
|
async process(job: Job<PlaidFetchTransitonsEventPayload>) {
|
||||||
const { plaidItemId } = job.data;
|
const { plaidItemId } = job.data;
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import {
|
|||||||
RecognizeUncategorizedTransactionsJobPayload,
|
RecognizeUncategorizedTransactionsJobPayload,
|
||||||
RecognizeUncategorizedTransactionsQueue,
|
RecognizeUncategorizedTransactionsQueue,
|
||||||
} from '../_types';
|
} from '../_types';
|
||||||
import { Process } from '@nestjs/bull';
|
|
||||||
|
|
||||||
@Processor({
|
@Processor({
|
||||||
name: RecognizeUncategorizedTransactionsQueue,
|
name: RecognizeUncategorizedTransactionsQueue,
|
||||||
@@ -28,7 +27,6 @@ export class RegonizeTransactionsPrcessor extends WorkerHost {
|
|||||||
/**
|
/**
|
||||||
* Triggers sending invoice mail.
|
* Triggers sending invoice mail.
|
||||||
*/
|
*/
|
||||||
@Process(RecognizeUncategorizedTransactionsQueue)
|
|
||||||
@UseCls()
|
@UseCls()
|
||||||
async process(job: Job<RecognizeUncategorizedTransactionsJobPayload>) {
|
async process(job: Job<RecognizeUncategorizedTransactionsJobPayload>) {
|
||||||
const { ruleId, transactionsCriteria } = job.data;
|
const { ruleId, transactionsCriteria } = job.data;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export abstract class BaseCommand extends CommandRunner {
|
|||||||
},
|
},
|
||||||
migrations: {
|
migrations: {
|
||||||
directory: this.configService.get('systemDatabase.migrationDir'),
|
directory: this.configService.get('systemDatabase.migrationDir'),
|
||||||
|
loadExtensions: ['.js'],
|
||||||
},
|
},
|
||||||
seeds: {
|
seeds: {
|
||||||
directory: this.configService.get('systemDatabase.seedsDir'),
|
directory: this.configService.get('systemDatabase.seedsDir'),
|
||||||
@@ -43,6 +44,7 @@ export abstract class BaseCommand extends CommandRunner {
|
|||||||
},
|
},
|
||||||
migrations: {
|
migrations: {
|
||||||
directory: this.configService.get('tenantDatabase.migrationsDir') || './src/database/migrations',
|
directory: this.configService.get('tenantDatabase.migrationsDir') || './src/database/migrations',
|
||||||
|
loadExtensions: ['.js'],
|
||||||
},
|
},
|
||||||
seeds: {
|
seeds: {
|
||||||
directory: this.configService.get('tenantDatabase.seedsDir') || './src/database/seeds/core',
|
directory: this.configService.get('tenantDatabase.seedsDir') || './src/database/seeds/core',
|
||||||
|
|||||||
@@ -7,11 +7,7 @@ import * as moment from 'moment';
|
|||||||
import { TenantJobPayload } from '@/interfaces/Tenant';
|
import { TenantJobPayload } from '@/interfaces/Tenant';
|
||||||
import { InventoryComputeCostService } from '../commands/InventoryComputeCost.service';
|
import { InventoryComputeCostService } from '../commands/InventoryComputeCost.service';
|
||||||
import { events } from '@/common/events/events';
|
import { events } from '@/common/events/events';
|
||||||
import {
|
import { ComputeItemCostQueue } from '../types/InventoryCost.types';
|
||||||
ComputeItemCostQueue,
|
|
||||||
ComputeItemCostQueueJob,
|
|
||||||
} from '../types/InventoryCost.types';
|
|
||||||
import { Process } from '@nestjs/bull';
|
|
||||||
|
|
||||||
interface ComputeItemCostJobPayload extends TenantJobPayload {
|
interface ComputeItemCostJobPayload extends TenantJobPayload {
|
||||||
itemId: number;
|
itemId: number;
|
||||||
@@ -39,7 +35,6 @@ export class ComputeItemCostProcessor extends WorkerHost {
|
|||||||
* Process the compute item cost job.
|
* Process the compute item cost job.
|
||||||
* @param {Job<ComputeItemCostJobPayload>} job - The job to process
|
* @param {Job<ComputeItemCostJobPayload>} job - The job to process
|
||||||
*/
|
*/
|
||||||
@Process(ComputeItemCostQueueJob)
|
|
||||||
@UseCls()
|
@UseCls()
|
||||||
async process(job: Job<ComputeItemCostJobPayload>) {
|
async process(job: Job<ComputeItemCostJobPayload>) {
|
||||||
const { itemId, startingDate, organizationId, userId } = job.data;
|
const { itemId, startingDate, organizationId, userId } = job.data;
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
import { Process } from '@nestjs/bull';
|
import { WriteInventoryTransactionsGLEntriesQueue } from '../types/InventoryCost.types';
|
||||||
import {
|
|
||||||
WriteInventoryTransactionsGLEntriesQueue,
|
|
||||||
WriteInventoryTransactionsGLEntriesQueueJob,
|
|
||||||
} from '../types/InventoryCost.types';
|
|
||||||
import { Processor, WorkerHost } from '@nestjs/bullmq';
|
import { Processor, WorkerHost } from '@nestjs/bullmq';
|
||||||
import { Scope } from '@nestjs/common';
|
import { Scope } from '@nestjs/common';
|
||||||
|
|
||||||
@@ -15,6 +11,5 @@ export class WriteInventoryTransactionsGLEntriesProcessor extends WorkerHost {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Process(WriteInventoryTransactionsGLEntriesQueueJob)
|
|
||||||
async process() {}
|
async process() {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,8 @@ import { Processor, WorkerHost } from '@nestjs/bullmq';
|
|||||||
import { Scope } from '@nestjs/common';
|
import { Scope } from '@nestjs/common';
|
||||||
import { Job } from 'bullmq';
|
import { Job } from 'bullmq';
|
||||||
import { ClsService, UseCls } from 'nestjs-cls';
|
import { ClsService, UseCls } from 'nestjs-cls';
|
||||||
import { Process } from '@nestjs/bull';
|
|
||||||
import {
|
import {
|
||||||
OrganizationBuildQueue,
|
OrganizationBuildQueue,
|
||||||
OrganizationBuildQueueJob,
|
|
||||||
OrganizationBuildQueueJobPayload,
|
OrganizationBuildQueueJobPayload,
|
||||||
} from '../Organization.types';
|
} from '../Organization.types';
|
||||||
import { BuildOrganizationService } from '../commands/BuildOrganization.service';
|
import { BuildOrganizationService } from '../commands/BuildOrganization.service';
|
||||||
@@ -22,7 +20,6 @@ export class OrganizationBuildProcessor extends WorkerHost {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Process(OrganizationBuildQueueJob)
|
|
||||||
@UseCls()
|
@UseCls()
|
||||||
async process(job: Job<OrganizationBuildQueueJobPayload>) {
|
async process(job: Job<OrganizationBuildQueueJobPayload>) {
|
||||||
console.log('Processing organization build job:', job.id);
|
console.log('Processing organization build job:', job.id);
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ const providers = [
|
|||||||
},
|
},
|
||||||
migrations: {
|
migrations: {
|
||||||
directory: configService.get('systemDatabase.migrationDir'),
|
directory: configService.get('systemDatabase.migrationDir'),
|
||||||
|
loadExtensions: ['.js'],
|
||||||
},
|
},
|
||||||
seeds: {
|
seeds: {
|
||||||
directory: configService.get('systemDatabase.seedsDir'),
|
directory: configService.get('systemDatabase.seedsDir'),
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ export const TenancyDatabaseProxyProvider = ClsModule.forFeatureAsync({
|
|||||||
},
|
},
|
||||||
migrations: {
|
migrations: {
|
||||||
directory: configService.get('tenantDatabase.migrationsDir'),
|
directory: configService.get('tenantDatabase.migrationsDir'),
|
||||||
|
loadExtensions: ['.js'],
|
||||||
},
|
},
|
||||||
seeds: {
|
seeds: {
|
||||||
directory: configService.get('tenantDatabase.seedsDir'),
|
directory: configService.get('tenantDatabase.seedsDir'),
|
||||||
|
|||||||
19
setup.sh
19
setup.sh
@@ -2,7 +2,6 @@
|
|||||||
# Initialize the essential variables.
|
# Initialize the essential variables.
|
||||||
BRANCH=main
|
BRANCH=main
|
||||||
CURRENT=$PWD
|
CURRENT=$PWD
|
||||||
BIGCAPITAL_INSTALL_DIR=$PWD/bigcapital-$(echo $BRANCH | sed -r 's@(\/|" "|\.)@-@g')
|
|
||||||
BIGCAPITAL_CLONE_TEMP_DIR=$(mktemp -d)
|
BIGCAPITAL_CLONE_TEMP_DIR=$(mktemp -d)
|
||||||
CPU_ARCH=$(uname -m)
|
CPU_ARCH=$(uname -m)
|
||||||
|
|
||||||
@@ -20,8 +19,6 @@ else
|
|||||||
COMPOSE_CMD="docker compose"
|
COMPOSE_CMD="docker compose"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
REPO=https://github.com/bigcapitalhq/bigcapital
|
|
||||||
|
|
||||||
# Prints the Bigcapital logo once running the script.
|
# Prints the Bigcapital logo once running the script.
|
||||||
function print_logo() {
|
function print_logo() {
|
||||||
clear
|
clear
|
||||||
@@ -142,8 +139,8 @@ function askForAction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function install() {
|
function install() {
|
||||||
echo "Installing Bigcaoital.........."
|
echo "Installing Bigcapital.........."
|
||||||
echo "installing is going to take few mintues..."
|
echo "installing is going to take few minutes..."
|
||||||
download
|
download
|
||||||
setup_env
|
setup_env
|
||||||
}
|
}
|
||||||
@@ -203,10 +200,11 @@ function startServices() {
|
|||||||
done
|
done
|
||||||
printf "\r\033[K"
|
printf "\r\033[K"
|
||||||
echo " API server started successfully ✅"
|
echo " API server started successfully ✅"
|
||||||
source "${DOCKER_ENV_PATH}"
|
ACCESS_URL=$(grep -E '^BASE_URL=' "$DOCKER_ENV_PATH" 2>/dev/null | cut -d= -f2-)
|
||||||
|
[ -z "$ACCESS_URL" ] && ACCESS_URL="http://localhost"
|
||||||
echo " Bigcapital server started successfully ✅"
|
echo " Bigcapital server started successfully ✅"
|
||||||
echo ""
|
echo ""
|
||||||
echo " You can access the application at $WEB_URL"
|
echo " You can access the application at $ACCESS_URL"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -223,20 +221,19 @@ function restartServices() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function viewLogs(){
|
function viewLogs(){
|
||||||
ARG_SERVICE_NAME=$2
|
|
||||||
echo
|
echo
|
||||||
echo "Select a Service you want to view the logs for:"
|
echo "Select a Service you want to view the logs for:"
|
||||||
echo " 1) Webapp"
|
echo " 1) Webapp"
|
||||||
echo " 2) API"
|
echo " 2) API"
|
||||||
echo " 3) Migration"
|
echo " 3) Migration"
|
||||||
echo " 4) Nginx Proxy"
|
echo " 4) Envoy Proxy"
|
||||||
echo " 5) MariaDB"
|
echo " 5) MariaDB"
|
||||||
echo " 0) Back to Main Menu"
|
echo " 0) Back to Main Menu"
|
||||||
echo
|
echo
|
||||||
read -p "Service: " DOCKER_SERVICE_NAME
|
read -p "Service: " DOCKER_SERVICE_NAME
|
||||||
|
|
||||||
until (( DOCKER_SERVICE_NAME >= 0 && DOCKER_SERVICE_NAME <= 5 )); do
|
until (( DOCKER_SERVICE_NAME >= 0 && DOCKER_SERVICE_NAME <= 5 )); do
|
||||||
echo "Invalid selection. Please enter a number between 1 and 11."
|
echo "Invalid selection. Please enter a number between 0 and 5."
|
||||||
read -p "Service: " DOCKER_SERVICE_NAME
|
read -p "Service: " DOCKER_SERVICE_NAME
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -248,7 +245,7 @@ function viewLogs(){
|
|||||||
1) viewSpecificLogs "webapp";;
|
1) viewSpecificLogs "webapp";;
|
||||||
2) viewSpecificLogs "server";;
|
2) viewSpecificLogs "server";;
|
||||||
3) viewSpecificLogs "database_migration";;
|
3) viewSpecificLogs "database_migration";;
|
||||||
4) viewSpecificLogs "nginx";;
|
4) viewSpecificLogs "proxy";;
|
||||||
5) viewSpecificLogs "mysql";;
|
5) viewSpecificLogs "mysql";;
|
||||||
0) askForAction;;
|
0) askForAction;;
|
||||||
*) echo "INVALID SERVICE NAME SUPPLIED";;
|
*) echo "INVALID SERVICE NAME SUPPLIED";;
|
||||||
|
|||||||
Reference in New Issue
Block a user