REPASO GENERAL ADAPTAR A DOCKERS

This commit is contained in:
David Arranz 2025-11-04 21:54:35 +01:00
parent da15e9d44d
commit 92d7fb4ca6
24 changed files with 284 additions and 625 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@erp/factuges-server",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"scripts": {
"build": "tsup src/index.ts --config tsup.config.ts",
@ -55,10 +55,7 @@
"passport": "^0.7.0",
"passport-jwt": "^4.0.1",
"passport-local": "^1.0.0",
"path": "^0.12.7",
"pg-hstore": "^2.3.4",
"puppeteer": "^24.20.0",
"puppeteer-report": "^3.2.0",
"reflect-metadata": "^0.2.2",
"response-time": "^2.3.3",
"sequelize": "^6.37.5",

View File

@ -1,7 +1,7 @@
{
"name": "@erp/factuges-web",
"private": true,
"version": "0.0.4",
"version": "0.0.5",
"type": "module",
"scripts": {
"dev": "vite --host --clearScreen false",

View File

@ -1,6 +1,6 @@
{
"name": "@erp/auth",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"type": "module",
"sideEffects": false,
@ -16,17 +16,16 @@
"./client": "./src/web/index.ts"
},
"peerDependencies": {
"@erp/core": "workspace:*",
"dinero.js": "^1.9.1",
"express": "^4.18.2",
"i18next": "^25.1.1",
"zod": "^3.25.67"
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
"devDependencies": {
"@biomejs/biome": "^2.3.1",
"@types/express": "^4.17.21",
"@types/react": "^19.1.2",
"@types/react-dom": "^19.1.3",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.9.3"
},
"dependencies": {
@ -34,9 +33,8 @@
"@repo/rdx-ddd": "workspace:*",
"@repo/rdx-ui": "workspace:*",
"@repo/shadcn-ui": "workspace:*",
"@tanstack/react-query": "^5.74.11",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"@tanstack/react-query": "^5.90.6",
"i18next": "^25.1.1",
"react-hook-form": "^7.56.2",
"react-router-dom": "^6.26.0",
"react-secure-storage": "^1.3.2"

View File

@ -1,6 +1,6 @@
{
"name": "@erp/core",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"type": "module",
"sideEffects": false,
@ -20,14 +20,16 @@
"./hooks": "./src/web/hooks/index.ts"
},
"peerDependencies": {
"dinero.js": "^1.9.1",
"react": "^19.1.0"
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
"devDependencies": {
"@hookform/devtools": "^4.4.0",
"@types/dinero.js": "^1.9.4",
"@types/express": "^4.17.21",
"@types/react": "^19.1.2",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.9.3"
},
"dependencies": {
@ -40,6 +42,7 @@
"@repo/shadcn-ui": "workspace:*",
"@tanstack/react-query": "^5.75.4",
"axios": "^1.9.0",
"dinero.js": "^1.9.1",
"express": "^4.18.2",
"http-status": "^2.1.0",
"i18next": "^25.1.1",
@ -47,6 +50,7 @@
"react-hook-form": "^7.58.1",
"react-i18next": "^15.5.1",
"react-router-dom": "^6.26.0",
"sequelize": "^6.37.5",
"zod": "^4.1.11"
}
}

View File

@ -1,5 +1,5 @@
{
"extends": "@repo/typescript-config/buildless.json",
"extends": "../../tsconfig.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {

View File

@ -15,6 +15,10 @@
"./client": "./src/web/manifest.ts",
"./globals.css": "./src/web/globals.css"
},
"peerDependencies": {
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
"devDependencies": {
"@hookform/devtools": "^4.4.0",
"@types/dinero.js": "^1.9.4",
@ -22,10 +26,11 @@
"@types/react": "^19.1.2",
"@types/react-dom": "^19.1.3",
"@types/react-router-dom": "^5.3.3",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.9.3"
},
"dependencies": {
"@ag-grid-community/locale": "34.0.0",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
@ -39,10 +44,8 @@
"@repo/rdx-ui": "workspace:*",
"@repo/rdx-utils": "workspace:*",
"@repo/shadcn-ui": "workspace:*",
"@tanstack/react-query": "^5.74.11",
"@tanstack/react-query": "^5.90.6",
"@tanstack/react-table": "^8.21.3",
"ag-grid-community": "^33.3.0",
"ag-grid-react": "^33.3.0",
"class-variance-authority": "^0.7.1",
"date-fns": "^4.1.0",
"dinero.js": "^1.9.1",
@ -51,13 +54,13 @@
"i18next": "^25.1.1",
"libphonenumber-js": "^1.12.7",
"lucide-react": "^0.503.0",
"pg-hstore": "^2.3.4",
"puppeteer": "^24.20.0",
"puppeteer-report": "^3.2.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-hook-form": "^7.58.1",
"react-i18next": "^15.5.1",
"react-router-dom": "^6.26.0",
"sequelize": "^6.37.5",
"zod": "^4.1.11"
}
}

View File

@ -1,15 +1,13 @@
{
"name": "@erp/customers",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"type": "module",
"sideEffects": false,
"scripts": {
"typecheck": "tsc -p tsconfig.json --noEmit",
"clean": "rimraf .turbo node_modules dist"
},
"exports": {
".": "./src/common/index.ts",
"./common": "./src/common/index.ts",
@ -18,28 +16,19 @@
"./globals.css": "./src/web/globals.css",
"./components": "./src/web/components/index.ts"
},
"peerDependencies": {
"@tanstack/react-query": "^5.74.11",
"ag-grid-community": "^33.3.0",
"dinero.js": "^1.9.1",
"express": "^4.18.2",
"i18next": "^25.1.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-hook-form": "^7.58.1",
"react-i18next": "^15.5.1",
"zod": "^4.1.11"
"react-dom": "^19.1.0"
},
"devDependencies": {
"@types/express": "^4.17.21",
"@types/react": "^19.1.2",
"@types/react-router-dom": "^5.3.3",
"typescript": "^5.9.3",
"vitest": "^3.2.4"
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.9.3"
},
"dependencies": {
"@ag-grid-community/locale": "34.0.0",
"@erp/auth": "workspace:*",
"@erp/core": "workspace:*",
"@hookform/resolvers": "^5.0.1",
@ -49,11 +38,16 @@
"@repo/rdx-ui": "workspace:*",
"@repo/rdx-utils": "workspace:*",
"@repo/shadcn-ui": "workspace:*",
"@tanstack/react-query": "^5.90.6",
"@tanstack/react-table": "^8.21.3",
"ag-grid-react": "^33.3.0",
"i18next": "^25.6.0",
"lucide-react": "^0.503.0",
"react-data-table-component": "^7.7.0",
"react-hook-form": "^7.58.1",
"react-i18next": "^16.2.4",
"react-router-dom": "^6.26.0",
"use-debounce": "^10.0.5"
"sequelize": "^6.37.5",
"use-debounce": "^10.0.5",
"zod": "^4.1.11"
}
}

View File

@ -1,13 +1,13 @@
import { PageHeader } from '@erp/core/components';
import { PageHeader } from "@erp/core/components";
import { AppContent, AppHeader, BackHistoryButton, useDebounce } from "@repo/rdx-ui/components";
import { Button } from "@repo/shadcn-ui/components";
import { PlusIcon } from "lucide-react";
import { useMemo, useState } from 'react';
import { useMemo, useState } from "react";
import { Outlet, useNavigate } from "react-router-dom";
import { ErrorAlert } from '../../components';
import { useCustomerListQuery } from '../../hooks';
import { ErrorAlert } from "../../components";
import { useCustomerListQuery } from "../../hooks";
import { useTranslation } from "../../i18n";
import { CustomersListGrid } from './customers-list-grid';
import { CustomersListGrid } from "./customers-list-grid";
export const CustomersListPage = () => {
const { t } = useTranslation();
@ -28,13 +28,7 @@ export const CustomersListPage = () => {
[pageSize, pageIndex, debouncedQ]
);
const {
data: customersPageData,
isLoading,
isError,
error,
} = useCustomerListQuery({ criteria });
const { data: customersPageData, isLoading, isError, error } = useCustomerListQuery({ criteria });
const handlePageChange = (newPageIndex: number) => {
setPageIndex(newPageIndex);
@ -51,7 +45,6 @@ export const CustomersListPage = () => {
setPageIndex(0);
};
if (isError || !customersPageData) {
return (
<AppContent>
@ -74,11 +67,11 @@ export const CustomersListPage = () => {
<div className='flex items-center space-x-2'>
<Button
onClick={() => navigate("/customers/create")}
variant={'default'}
variant={"default"}
aria-label={t("pages.create.title")}
className='cursor-pointer'
>
<PlusIcon className="mr-2 h-4 w-4" aria-hidden />
<PlusIcon className='mr-2 h-4 w-4' aria-hidden />
{t("pages.create.title")}
</Button>
</div>

View File

@ -1,3 +1,6 @@
import { formHasAnyDirty, pickFormDirtyValues } from "@erp/core/client";
import { UnsavedChangesProvider, useHookForm } from "@erp/core/hooks";
import { showErrorToast, showSuccessToast, showWarningToast } from "@repo/rdx-ui/helpers";
import {
Button,
Dialog,
@ -11,18 +14,13 @@ import {
TabsTrigger,
} from "@repo/shadcn-ui/components";
import { X } from "lucide-react";
import { FieldErrors, FormProvider } from "react-hook-form";
import { useNavigate } from "react-router-dom";
import { CustomerEditorSkeleton } from "../../components";
import { CustomerAdditionalConfigFields } from "../../components/editor/customer-additional-config-fields";
import { CustomerAddressFields } from "../../components/editor/customer-address-fields";
import { CustomerBasicInfoFields } from "../../components/editor/customer-basic-info-fields";
import { useNavigate } from "react-router-dom";
import { formHasAnyDirty, pickFormDirtyValues } from "@erp/core/client";
import { UnsavedChangesProvider, useHookForm } from "@erp/core/hooks";
import { showErrorToast, showSuccessToast, showWarningToast } from "@repo/rdx-ui/helpers";
import { CustomerEditorSkeleton } from "../../components";
import { useCustomerQuery, useUpdateCustomer } from "../../hooks";
import { useTranslation } from "../../i18n";
import { CustomerFormData, CustomerFormSchema, defaultCustomerFormData } from "../../schemas";

View File

@ -1,5 +1,14 @@
import { PageHeader } from "@erp/core/components";
import { useUrlParamId } from "@erp/core/hooks";
import { AppContent, AppHeader, BackHistoryButton } from "@repo/rdx-ui/components";
import { Button, Card, CardContent, CardHeader, CardTitle } from "@repo/shadcn-ui/components";
import {
Badge,
Button,
Card,
CardContent,
CardHeader,
CardTitle,
} from "@repo/shadcn-ui/components";
import {
Banknote,
EditIcon,
@ -10,13 +19,9 @@ import {
MapPin,
MoreVertical,
Phone,
Smartphone
Smartphone,
} from "lucide-react";
import { useNavigate } from "react-router-dom";
import { PageHeader } from '@erp/core/components';
import { useUrlParamId } from "@erp/core/hooks";
import { Badge } from "@repo/shadcn-ui/components";
import { CustomerEditorSkeleton, ErrorAlert } from "../../components";
import { useCustomerQuery } from "../../hooks";
import { useTranslation } from "../../i18n";
@ -63,13 +68,22 @@ export const CustomerViewPage = () => {
<AppHeader>
<PageHeader
backIcon
title={(<div className="flex flex-wrap items-center gap-2">{customer?.name} {customer?.trade_name && <span className="text-muted-foreground">({customer.trade_name})</span>}</div>)}
description={<div className='mt-2 flex items-center gap-3'>
<Badge variant='secondary' className='font-mono'>
{customer?.tin}
</Badge>
<Badge variant='outline'>{customer?.is_company ? "Empresa" : "Persona"}</Badge>
</div>}
title={
<div className='flex flex-wrap items-center gap-2'>
{customer?.name}{" "}
{customer?.trade_name && (
<span className='text-muted-foreground'>({customer.trade_name})</span>
)}
</div>
}
description={
<div className='mt-2 flex items-center gap-3'>
<Badge variant='secondary' className='font-mono'>
{customer?.tin}
</Badge>
<Badge variant='outline'>{customer?.is_company ? "Empresa" : "Persona"}</Badge>
</div>
}
rightSlot={
<div className='flex gap-2'>
<Button variant='outline' size='icon' onClick={() => navigate("/customers/list")}>
@ -101,20 +115,20 @@ export const CustomerViewPage = () => {
</div>
<div>
<dt className='text-sm font-medium text-muted-foreground'>Referencia</dt>
<dd className='mt-1 font-mono text-base text-foreground'>
{customer?.reference}
</dd>
<dd className='mt-1 font-mono text-base text-foreground'>{customer?.reference}</dd>
</div>
<div>
<dt className='text-sm font-medium text-muted-foreground'>Registro Legal</dt>
<dd className='mt-1 text-base text-foreground'>{customer?.legal_record}</dd>
</div>
<div>
<dt className='text-sm font-medium text-muted-foreground'>
Impuestos por Defecto
</dt>
<dt className='text-sm font-medium text-muted-foreground'>Impuestos por Defecto</dt>
<dd className='mt-1'>
{customer?.default_taxes.map((tax) => (<Badge key={tax} variant={"secondary"}>{tax}</Badge>))}
{customer?.default_taxes.map((tax) => (
<Badge key={tax} variant={"secondary"}>
{tax}
</Badge>
))}
</dd>
</div>
</CardContent>
@ -259,15 +273,9 @@ export const CustomerViewPage = () => {
<div className='flex items-start gap-3'>
<Globe className='mt-0.5 h-4 w-4 text-muted-foreground' />
<div className='flex-1'>
<dt className='text-sm font-medium text-muted-foreground'>
Sitio Web
</dt>
<dt className='text-sm font-medium text-muted-foreground'>Sitio Web</dt>
<dd className='mt-1 text-base text-primary hover:underline'>
<a
href={customer?.website}
target='_blank'
rel='noopener noreferrer'
>
<a href={customer?.website} target='_blank' rel='noopener noreferrer'>
{customer?.website}
</a>
</dd>
@ -303,18 +311,14 @@ export const CustomerViewPage = () => {
<div className='flex items-start gap-3'>
<Languages className='mt-0.5 h-4 w-4 text-muted-foreground' />
<div className='flex-1'>
<dt className='text-sm font-medium text-muted-foreground'>
Idioma Preferido
</dt>
<dt className='text-sm font-medium text-muted-foreground'>Idioma Preferido</dt>
<dd className='mt-1 text-base text-foreground'>{customer?.language_code}</dd>
</div>
</div>
<div className='flex items-start gap-3'>
<Banknote className='mt-0.5 h-4 w-4 text-muted-foreground' />
<div className='flex-1'>
<dt className='text-sm font-medium text-muted-foreground'>
Moneda Preferida
</dt>
<dt className='text-sm font-medium text-muted-foreground'>Moneda Preferida</dt>
<dd className='mt-1 text-base text-foreground'>{customer?.currency_code}</dd>
</div>
</div>
@ -322,7 +326,7 @@ export const CustomerViewPage = () => {
</CardContent>
</Card>
</div>
</AppContent >
</AppContent>
</>
);
};

View File

@ -1,3 +1,3 @@
export * from "./customer-resume.form.schema";
export * from "./customer.api.schema";
export * from "./customer.form.schema";
export * from "./customer-resume.form.schema";

View File

@ -1,6 +1,6 @@
{
"name": "@erp/doc-numbering",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"type": "module",
"sideEffects": false,
@ -13,11 +13,14 @@
"./api": "./src/api/index.ts"
},
"peerDependencies": {
"express": "^4.18.2",
"zod": "^4.1.11"
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
"devDependencies": {
"@types/express": "^4.17.21"
"@types/express": "^4.17.21",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.9.3"
},
"dependencies": {
"@erp/auth": "workspace:*",

View File

@ -1,6 +1,6 @@
{
"name": "@erp/verifactu",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"type": "module",
"sideEffects": false,
@ -14,11 +14,14 @@
"./common": "./src/common/index.ts"
},
"peerDependencies": {
"express": "^4.18.2",
"zod": "^4.1.11"
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
"devDependencies": {
"@types/express": "^4.17.21"
"@types/express": "^4.17.21",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.9.3"
},
"dependencies": {
"@erp/auth": "workspace:*",

View File

@ -1,6 +1,6 @@
{
"name": "@repo/rdx-criteria",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"type": "module",
"sideEffects": false,

View File

@ -1,6 +1,6 @@
{
"name": "@repo/rdx-ddd",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"type": "module",
"sideEffects": false,

View File

@ -1,6 +1,6 @@
{
"name": "@repo/rdx-logger",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"type": "module",
"sideEffects": false,

View File

@ -18,13 +18,8 @@
]
},
"peerDependencies": {
"date-fns": "^4.1.0",
"i18next": "^25.1.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-hook-form": "^7.58.1",
"typescript": "^5.9.3",
"zod": "^4.1.11"
"react-dom": "^19.1.0"
},
"devDependencies": {
"@biomejs/biome": "^2.3.1",
@ -37,6 +32,9 @@
"@vitejs/plugin-react": "^4.4.1",
"esbuild-plugin-react18": "^0.2.6",
"esbuild-plugin-react18-css": "^0.0.4",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.6.0",
"tailwindcss": "^4.1.5",
"tsup": "^8.4.0",
"tw-animate-css": "^1.2.9",

View File

@ -1,6 +1,6 @@
{
"name": "@repo/rdx-utils",
"version": "0.0.4",
"version": "0.0.5",
"private": true,
"type": "module",
"sideEffects": false,

View File

@ -20,10 +20,8 @@
"ui:add": "pnpm dlx shadcn@latest add"
},
"peerDependencies": {
"lucide-react": "^0.503.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.9.3"
"react-dom": "^19.1.0"
},
"devDependencies": {
"@biomejs/biome": "^2.3.1",
@ -33,7 +31,11 @@
"@types/node": "^22.15.12",
"@types/react": "^19.1.2",
"@types/react-dom": "^19.1.3",
"postcss": "^8.5.3"
"postcss": "^8.5.3",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.6.0",
"tailwindcss": "^4.1.5"
},
"dependencies": {
"@hookform/resolvers": "^5.2.2",
@ -75,15 +77,12 @@
"lucide-react": "^0.503.0",
"next-themes": "^0.4.6",
"pnpm": "^10.10.0",
"react": "^19.1.0",
"react-day-picker": "9.11.1",
"react-dom": "^19.1.0",
"react-hook-form": "^7.65.0",
"react-resizable-panels": "^3.0.6",
"recharts": "^2.15.4",
"sonner": "^2.0.7",
"tailwind-merge": "^3.2.0",
"tailwindcss": "^4.1.5",
"tw-animate-css": "^1.2.9",
"vaul": "^1.1.2",
"zod": "^3.25.76"

View File

@ -1,3 +1,5 @@
"use client"
import * as React from "react"
import * as SeparatorPrimitive from "@radix-ui/react-separator"

View File

@ -1,5 +1,6 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Default",
"compilerOptions": {
"composite": false,
"declaration": true,
@ -8,13 +9,18 @@
"forceConsistentCasingInFileNames": true,
"inlineSources": false,
"isolatedModules": true,
"incremental": false,
"lib": ["es2022", "DOM", "DOM.Iterable"],
"module": "NodeNext",
"moduleResolution": "NodeNext",
"noUnusedLocals": false,
"noUnusedParameters": false,
"preserveWatchOutput": true,
"skipLibCheck": true,
"strict": true
},
"exclude": ["node_modules"]
"strict": true,
"moduleDetection": "force",
"noUncheckedIndexedAccess": true,
"resolveJsonModule": true,
"target": "ES2022"
}
}

View File

@ -1,16 +1,16 @@
{
"extends": "./base.json",
"compilerOptions": {
"target": "ESNext",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ESNext", "DOM"],
"sourceMap": true,
"resolveJsonModule": true,
"noEmit": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true
},
"exclude": ["node_modules"]
}
"extends": "./base.json",
"compilerOptions": {
"target": "ESNext",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ESNext", "DOM"],
"sourceMap": true,
"resolveJsonModule": true,
"noEmit": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true
},
"exclude": ["node_modules"]
}

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_VERSION="1.0.4"
SCRIPT_VERSION="1.0.5"
# =====================================================
# FACTUGES Build Script