chore(repo): multiple datasources
This commit is contained in:
parent
577f781556
commit
2c313a0dd0
@ -1,6 +1,6 @@
|
||||
import { Body, Controller, HttpCode, HttpStatus, Post, UnauthorizedException, UseGuards } from '@nestjs/common';
|
||||
import { ApiBearerAuth } from '@nestjs/swagger';
|
||||
import { AccountsEntity } from '../database/entities';
|
||||
import { AccountsEntity } from '../database/connections/ebitemp-api/entities';
|
||||
import { LoginDto, LoginResDto } from './auth.dto';
|
||||
import { AuthService } from './auth.service';
|
||||
import { AuthenticatedUser } from './authenticated-user.decorator';
|
||||
@ -17,7 +17,7 @@ export class AuthController {
|
||||
async logIn(@Body() body: LoginDto): Promise<LoginResDto> {
|
||||
const { username, password } = body;
|
||||
const user = await this.authService.getAuthenticatedUser(username, password);
|
||||
|
||||
|
||||
const { accessToken, refreshToken } = await this.authService.signJwts(user);
|
||||
return {
|
||||
accessToken: accessToken,
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { createZodDto } from '@anatine/zod-nestjs';
|
||||
import { z } from 'zod';
|
||||
import { AccountsEntitySchema } from '../database/entities';
|
||||
import { AccountsEntitySchema } from '../database/connections/ebitemp-api/entities';
|
||||
|
||||
export const loginSchema = z.object({
|
||||
username: AccountsEntitySchema.shape.username,
|
||||
|
@ -2,7 +2,7 @@ import { Module } from '@nestjs/common';
|
||||
import { APP_GUARD, Reflector } from '@nestjs/core';
|
||||
import { PassportModule } from '@nestjs/passport';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { AccountsEntity } from '../database/entities';
|
||||
import { AccountsEntity } from '../database/connections/ebitemp-api/entities';
|
||||
import { AuthController } from './auth.controller';
|
||||
import { AuthService } from './auth.service';
|
||||
import { JwtAccessTokenAuthStrategy } from './strategies/jwt/jwt-access-token-auth.strategy';
|
||||
|
@ -2,7 +2,7 @@ import { Inject, Injectable, Logger, UnauthorizedException } from '@nestjs/commo
|
||||
import { JwtService } from '@nestjs/jwt';
|
||||
import * as bcrypt from 'bcrypt';
|
||||
import { isEmpty } from 'lodash';
|
||||
import { AccountsEntity } from '../database/entities';
|
||||
import { AccountsEntity } from '../database/connections/ebitemp-api/entities';
|
||||
import { ACCESS_TOKEN_JWT_SERVICE } from './strategies/jwt/jwt-access-token.module';
|
||||
import { REFRESH_TOKEN_JWT_SERVICE } from './strategies/jwt/jwt-refresh-token.module';
|
||||
import { UsersAuthService } from './users/users-auth.service';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { FastifyRequest } from "fastify";
|
||||
import { AccountsEntity } from "../../database/entities";
|
||||
import { AccountsEntity } from "../../database/connections/ebitemp-api/entities";
|
||||
|
||||
export interface RequestWithUser extends FastifyRequest {
|
||||
user: AccountsEntity;
|
||||
|
@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import bcrypt from 'bcrypt';
|
||||
import { Repository } from 'typeorm';
|
||||
import { AccountsEntity } from '../../database/entities';
|
||||
import { AccountsEntity } from '../../database/connections/ebitemp-api/entities';
|
||||
|
||||
@Injectable()
|
||||
export class UsersAuthService {
|
||||
|
@ -2,7 +2,7 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { UsersAuthService } from './users-auth.service';
|
||||
import { AccountsEntity } from '../../database/entities';
|
||||
import { AccountsEntity } from '../../database/connections/ebitemp-api/entities';
|
||||
|
||||
@Module({
|
||||
imports: [TypeOrmModule.forFeature([AccountsEntity])],
|
||||
|
@ -0,0 +1,10 @@
|
||||
import coerceRecordTypes from '../../../config/utils/coerce-record-types';
|
||||
import { databaseConfigFactory, rawDatabaseSchema } from '../../utils/database-config';
|
||||
|
||||
const env = coerceRecordTypes(process.env);
|
||||
const envParsed = rawDatabaseSchema.strict().parse({
|
||||
connectionString: env['DATABASE_EBITEMPAPI_CONNECTION_STRING'],
|
||||
secure: env['DATABASE_EBITEMPAPI_SECURE'],
|
||||
});
|
||||
|
||||
export const databaseConfig = databaseConfigFactory(envParsed);
|
@ -0,0 +1,29 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { DatabaseConfig } from '../../utils/database-config';
|
||||
import { typeormTransactionalDataSourceFactory } from '../../utils/typeorm-data-source-factory';
|
||||
import { typeormEntitiesFromImport } from '../../utils/typeorm-import-entities';
|
||||
import { typeormModuleOptionsFactory } from '../../utils/typeorm-module-options-factory';
|
||||
import { databaseConfig } from './database.config';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
ConfigModule.forFeature(databaseConfig),
|
||||
TypeOrmModule.forRootAsync({
|
||||
imports: databaseConfig.asProvider().imports,
|
||||
dataSourceFactory: typeormTransactionalDataSourceFactory(),
|
||||
useFactory: async (dbConfig: DatabaseConfig) => {
|
||||
const config = await typeormModuleOptionsFactory(
|
||||
dbConfig,
|
||||
await typeormEntitiesFromImport(await import('./index'))
|
||||
);
|
||||
return config;
|
||||
},
|
||||
inject: [databaseConfig.KEY],
|
||||
}),
|
||||
],
|
||||
providers: [],
|
||||
exports: [TypeOrmModule],
|
||||
})
|
||||
export class EbitempApiDatabaseModule {}
|
@ -1,5 +1,5 @@
|
||||
import { Column, Entity, Index } from 'typeorm';
|
||||
import { Enumify } from '../../enumify/enumify';
|
||||
import { Enumify } from '../../../../enumify/enumify';
|
||||
|
||||
export class InviaMailSeErrori {
|
||||
@Column('bit', { name: 'flag', default: () => '(0)' })
|
@ -0,0 +1 @@
|
||||
export * from './entities';
|
@ -0,0 +1,10 @@
|
||||
import coerceRecordTypes from '../../../config/utils/coerce-record-types';
|
||||
import { databaseConfigFactory, rawDatabaseSchema } from '../../utils/database-config';
|
||||
|
||||
const env = coerceRecordTypes(process.env);
|
||||
const envParsed = rawDatabaseSchema.strict().parse({
|
||||
connectionString: env['DATABASE_OCEANO_CONNECTION_STRING'],
|
||||
secure: env['DATABASE_OCEANO_SECURE'],
|
||||
});
|
||||
|
||||
export const databaseConfig = databaseConfigFactory(envParsed);
|
@ -0,0 +1,29 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { DatabaseConfig } from '../../utils/database-config';
|
||||
import { typeormTransactionalDataSourceFactory } from '../../utils/typeorm-data-source-factory';
|
||||
import { typeormEntitiesFromImport } from '../../utils/typeorm-import-entities';
|
||||
import { typeormModuleOptionsFactory } from '../../utils/typeorm-module-options-factory';
|
||||
import { databaseConfig } from './database.config';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
ConfigModule.forFeature(databaseConfig),
|
||||
TypeOrmModule.forRootAsync({
|
||||
imports: databaseConfig.asProvider().imports,
|
||||
dataSourceFactory: typeormTransactionalDataSourceFactory(),
|
||||
useFactory: async (dbConfig: DatabaseConfig) => {
|
||||
const config = await typeormModuleOptionsFactory(
|
||||
dbConfig,
|
||||
await typeormEntitiesFromImport(await import('./index'))
|
||||
);
|
||||
return config;
|
||||
},
|
||||
inject: [databaseConfig.KEY],
|
||||
}),
|
||||
],
|
||||
providers: [],
|
||||
exports: [TypeOrmModule],
|
||||
})
|
||||
export class OceanoDatabaseModule {}
|
@ -0,0 +1,653 @@
|
||||
import { Column, Entity, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm';
|
||||
@Index('PK_gruppo', ['codiceGruppo'], { unique: true })
|
||||
@Entity('gruppo')
|
||||
export class GruppoEntity {
|
||||
@Column('bigint', { primary: true, name: 'codiceGruppo' })
|
||||
codiceGruppo!: string;
|
||||
|
||||
@Column('nvarchar', { name: 'gruppo', nullable: true, length: 80 })
|
||||
gruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'descrizioneGruppo',
|
||||
nullable: true,
|
||||
length: 255,
|
||||
})
|
||||
descrizioneGruppo!: string | null;
|
||||
|
||||
@Column('ntext', { name: 'noteGruppo', nullable: true })
|
||||
noteGruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'referenteGruppo', nullable: true, length: 80 })
|
||||
referenteGruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'telefonoReferente', nullable: true, length: 80 })
|
||||
telefonoReferente!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'cellulareReferente',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
cellulareReferente!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'emailReferente', nullable: true, length: 80 })
|
||||
emailReferente!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'indirizzoGruppo', nullable: true, length: 80 })
|
||||
indirizzoGruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'numeroCivicoGruppo',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
numeroCivicoGruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'capGruppo', nullable: true, length: 10 })
|
||||
capGruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'localitaGruppo', nullable: true, length: 80 })
|
||||
localitaGruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'telefono1Gruppo', nullable: true, length: 80 })
|
||||
telefono1Gruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'telefono2Gruppo', nullable: true, length: 80 })
|
||||
telefono2Gruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'faxGruppo', nullable: true, length: 80 })
|
||||
faxGruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'emailGruppo', nullable: true, length: 80 })
|
||||
emailGruppo!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'sitoWebGruppo', nullable: true, length: 80 })
|
||||
sitoWebGruppo!: string | null;
|
||||
|
||||
@Column('int', { name: 'gruppoAttivo', nullable: true })
|
||||
gruppoAttivo!: number | null;
|
||||
|
||||
@Column('int', { name: 'esolverAttivo', nullable: true })
|
||||
esolverAttivo!: number | null;
|
||||
|
||||
@Column('nvarchar', { name: 'serverEsolver', nullable: true, length: 80 })
|
||||
serverEsolver!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'databaseEsolver', nullable: true, length: 80 })
|
||||
databaseEsolver!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'usernameEsolver', nullable: true, length: 80 })
|
||||
usernameEsolver!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'passwordEsolver', nullable: true, length: 80 })
|
||||
passwordEsolver!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'gruppoEsolver', nullable: true, length: 80 })
|
||||
gruppoEsolver!: string | null;
|
||||
|
||||
@Column('image', { name: 'logoGruppo', nullable: true })
|
||||
logoGruppo!: Buffer | null;
|
||||
|
||||
@Column('bigint', { name: 'utenteCreazione', nullable: true })
|
||||
utenteCreazione!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'dataCreazione', nullable: true, length: 10 })
|
||||
dataCreazione!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'oraCreazione', nullable: true, length: 8 })
|
||||
oraCreazione!: string | null;
|
||||
|
||||
@Column('bigint', { name: 'utenteModifica', nullable: true })
|
||||
utenteModifica!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'dataModifica', nullable: true, length: 10 })
|
||||
dataModifica!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'oraModifica', nullable: true, length: 8 })
|
||||
oraModifica!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'direttivaReport', nullable: true, length: 512 })
|
||||
direttivaReport!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'direttivaReportPers',
|
||||
nullable: true,
|
||||
length: 512,
|
||||
})
|
||||
direttivaReportPers!: string | null;
|
||||
|
||||
@Column('bigint', { name: 'statoGruppo', nullable: true })
|
||||
statoGruppo!: string | null;
|
||||
|
||||
@Column('bigint', { name: 'provinciaGruppo', nullable: true })
|
||||
provinciaGruppo!: string | null;
|
||||
|
||||
@Column('int', { name: 'fondo', nullable: true })
|
||||
fondo!: number | null;
|
||||
|
||||
@Column('decimal', {
|
||||
name: 'tassaIscrizione',
|
||||
nullable: true,
|
||||
precision: 18,
|
||||
scale: 2,
|
||||
})
|
||||
tassaIscrizione!: number | null;
|
||||
|
||||
@Column('nvarchar', { name: 'codiceFiscale', nullable: true, length: 80 })
|
||||
codiceFiscale!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'serverFTP', nullable: true, length: 200 })
|
||||
serverFtp!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'usernameFTP', nullable: true, length: 200 })
|
||||
usernameFtp!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'passwordFTP', nullable: true, length: 200 })
|
||||
passwordFtp!: string | null;
|
||||
|
||||
@Column('decimal', {
|
||||
name: 'massimalePresaCarico',
|
||||
nullable: true,
|
||||
precision: 18,
|
||||
scale: 2,
|
||||
})
|
||||
massimalePresaCarico!: number | null;
|
||||
|
||||
@Column('nvarchar', { name: 'elencoLivello1', nullable: true, length: 80 })
|
||||
elencoLivello1!: string | null;
|
||||
|
||||
@Column('ntext', { name: 'testoEmailPreventivo', nullable: true })
|
||||
testoEmailPreventivo!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'emailPreventivoMittente',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
emailPreventivoMittente!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'emailPreventivoNotifica',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
emailPreventivoNotifica!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'desPreventivoMittente',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
desPreventivoMittente!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'desPreventivoNotifica',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
desPreventivoNotifica!: string | null;
|
||||
|
||||
@Column('bigint', { name: 'codiceContrattoIndividuali', nullable: true })
|
||||
codiceContrattoIndividuali!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'codiceAziendaBollettini',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
codiceAziendaBollettini!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'rigaTesserino1', nullable: true, length: 80 })
|
||||
rigaTesserino1!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'rigaTesserino2', nullable: true, length: 80 })
|
||||
rigaTesserino2!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'rigaTesserino3', nullable: true, length: 80 })
|
||||
rigaTesserino3!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'cartellaCondivisa',
|
||||
nullable: true,
|
||||
length: 512,
|
||||
})
|
||||
cartellaCondivisa!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'serverSMTP', nullable: true, length: 80 })
|
||||
serverSmtp!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'usernameSMTP', nullable: true, length: 80 })
|
||||
usernameSmtp!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'passwordSMTP', nullable: true, length: 80 })
|
||||
passwordSmtp!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'emailIBAN', nullable: true, length: 255 })
|
||||
emailIban!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'emailFatture', nullable: true, length: 255 })
|
||||
emailFatture!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'emailRA', nullable: true, length: 255 })
|
||||
emailRa!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'emailAreaRiservataSoci',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
default: () => "''",
|
||||
})
|
||||
emailAreaRiservataSoci!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'desAreaRiservataSoci',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
default: () => "''",
|
||||
})
|
||||
desAreaRiservataSoci!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'usernameSMS',
|
||||
nullable: true,
|
||||
length: 255,
|
||||
default: () => "''",
|
||||
})
|
||||
usernameSms!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'passwordSMS',
|
||||
nullable: true,
|
||||
length: 255,
|
||||
default: () => "''",
|
||||
})
|
||||
passwordSms!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittenteSMS',
|
||||
nullable: true,
|
||||
length: 255,
|
||||
default: () => "''",
|
||||
})
|
||||
mittenteSms!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'sitoWebDati', length: 255, default: () => "''" })
|
||||
sitoWebDati!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'identificativoCreditore',
|
||||
length: 35,
|
||||
default: () => "''",
|
||||
})
|
||||
identificativoCreditore!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'SMSProtocollo',
|
||||
nullable: true,
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
smsProtocollo!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailBonifico',
|
||||
nullable: true,
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailBonifico!: string | null;
|
||||
|
||||
@Column('ntext', {
|
||||
name: 'emailBonifico',
|
||||
nullable: true,
|
||||
default: () => "''",
|
||||
})
|
||||
emailBonifico!: string | null;
|
||||
|
||||
@Column('ntext', {
|
||||
name: 'emailAssegno',
|
||||
nullable: true,
|
||||
default: () => "''",
|
||||
})
|
||||
emailAssegno!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailAssegno',
|
||||
nullable: true,
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailAssegno!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'SMSRimborsoBonifico',
|
||||
nullable: true,
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
smsRimborsoBonifico!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'SMSRimborsoAssegno',
|
||||
nullable: true,
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
smsRimborsoAssegno!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'emailPIC', nullable: true, length: 255 })
|
||||
emailPic!: string | null;
|
||||
|
||||
@Column('nvarchar', { name: 'stelline', length: 10, default: () => "''" })
|
||||
stelline!: string;
|
||||
|
||||
@Column('nvarchar', { name: 'mittentePIC', length: 400, default: () => "''" })
|
||||
mittentePic!: string;
|
||||
|
||||
@Column('ntext', { name: 'oggettoPIC', default: () => "''" })
|
||||
oggettoPic!: string;
|
||||
|
||||
@Column('ntext', { name: 'messaggioPIC', default: () => "''" })
|
||||
messaggioPic!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'nomeSupportoContrattoPosta',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
default: () => "''",
|
||||
})
|
||||
nomeSupportoContrattoPosta!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'codiceContrattoPosta',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
default: () => "''",
|
||||
})
|
||||
codiceContrattoPosta!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'passwordContrattoPosta',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
default: () => "''",
|
||||
})
|
||||
passwordContrattoPosta!: string | null;
|
||||
|
||||
@Column('bigint', {
|
||||
name: 'codiceSpedizione',
|
||||
nullable: true,
|
||||
default: () => '(0)',
|
||||
})
|
||||
codiceSpedizione!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailBonificoDomiciliato',
|
||||
nullable: true,
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailBonificoDomiciliato!: string | null;
|
||||
|
||||
@Column('ntext', {
|
||||
name: 'emailBonificoDomiciliato',
|
||||
nullable: true,
|
||||
default: () => "''",
|
||||
})
|
||||
emailBonificoDomiciliato!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'SMSRimborsoBonificoDomiciliato',
|
||||
nullable: true,
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
smsRimborsoBonificoDomiciliato!: string | null;
|
||||
|
||||
@Column('int', { name: 'notifichePush', default: () => '(0)' })
|
||||
notifichePush!: number;
|
||||
|
||||
@Column('int', { name: 'controlloCodiceFiscale', default: () => '(-1)' })
|
||||
controlloCodiceFiscale!: number;
|
||||
|
||||
@Column('ntext', { name: 'emailSuperamentoPIC', default: () => "''" })
|
||||
emailSuperamentoPic!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'SMSProtocolloNotificaEsplicita',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
smsProtocolloNotificaEsplicita!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittenteSportello',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
mittenteSportello!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailBonificoDomiciliatoSportello',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailBonificoDomiciliatoSportello!: string;
|
||||
|
||||
@Column('ntext', {
|
||||
name: 'emailBonificoDomiciliatoSportello',
|
||||
default: () => "''",
|
||||
})
|
||||
emailBonificoDomiciliatoSportello!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailBonificoSportello',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailBonificoSportello!: string;
|
||||
|
||||
@Column('ntext', { name: 'emailBonificoSportello', default: () => "''" })
|
||||
emailBonificoSportello!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailSospensioneSportello',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailSospensioneSportello!: string;
|
||||
|
||||
@Column('ntext', { name: 'emailSospensioneSportello', default: () => "''" })
|
||||
emailSospensioneSportello!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailRespingimentoSportello',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailRespingimentoSportello!: string;
|
||||
|
||||
@Column('ntext', { name: 'emailRespingimentoSportello', default: () => "''" })
|
||||
emailRespingimentoSportello!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailSospensione',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailSospensione!: string;
|
||||
|
||||
@Column('ntext', { name: 'emailSospensione', default: () => "''" })
|
||||
emailSospensione!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailRespingimento',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailRespingimento!: string;
|
||||
|
||||
@Column('ntext', { name: 'emailRespingimento', default: () => "''" })
|
||||
emailRespingimento!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittentePICdisdetta',
|
||||
nullable: true,
|
||||
length: 400,
|
||||
})
|
||||
mittentePiCdisdetta!: string | null;
|
||||
|
||||
@Column('ntext', { name: 'oggettoPICdisdetta', nullable: true })
|
||||
oggettoPiCdisdetta!: string | null;
|
||||
|
||||
@Column('ntext', { name: 'messaggioPICdisdetta', nullable: true })
|
||||
messaggioPiCdisdetta!: string | null;
|
||||
|
||||
@Column('int', { name: 'modalitaMassimaleBonifico', default: () => '(0)' })
|
||||
modalitaMassimaleBonifico!: number;
|
||||
|
||||
@Column('nvarchar', { name: 'portaSMTP', length: 10, default: () => "''" })
|
||||
portaSmtp!: string;
|
||||
|
||||
@Column('int', { name: 'useSSL', default: () => '(0)' })
|
||||
useSsl!: number;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'serverSMTPSpot',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
serverSmtpSpot!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'usernameSMTPSpot',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
usernameSmtpSpot!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'passwordSMTPSpot',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
passwordSmtpSpot!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'portaSMTPSpot',
|
||||
length: 10,
|
||||
default: () => "''",
|
||||
})
|
||||
portaSmtpSpot!: string;
|
||||
|
||||
@Column('int', { name: 'useSSLSpot', default: () => '(0)' })
|
||||
useSslSpot!: number;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'cartellaPubblicazioneLocale',
|
||||
length: 512,
|
||||
default: () => "''",
|
||||
})
|
||||
cartellaPubblicazioneLocale!: string;
|
||||
|
||||
@Column('int', { name: 'portaFTP', default: () => '(0)' })
|
||||
portaFtp!: number;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'cartellaAllegatiFTP',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
cartellaAllegatiFtp!: string;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittentiEmailNotificaEmissioneRimborsoSocio',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
mittentiEmailNotificaEmissioneRimborsoSocio!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittentiEmailInvioAllegatiPraticaSocio',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
mittentiEmailInvioAllegatiPraticaSocio!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittentiEmailRichiestaDatiBancariSocio',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
mittentiEmailRichiestaDatiBancariSocio!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittentiEmailLettereRichiestaContributiRinnoviIndividuali',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
mittentiEmailLettereRichiestaContributiRinnoviIndividuali!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittentiEmailLettereSoci',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
mittentiEmailLettereSoci!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittentiEmailLettereStrutture',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
mittentiEmailLettereStrutture!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'mittentiEmailLettereContratti',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
mittentiEmailLettereContratti!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'emailNotificaCodiciFiscaliDoppiMittente',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
emailNotificaCodiciFiscaliDoppiMittente!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'emailNotificaCodiciFiscaliDoppiDestinatari',
|
||||
nullable: true,
|
||||
length: 80,
|
||||
})
|
||||
emailNotificaCodiciFiscaliDoppiDestinatari!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'emailNotificaCodiciFiscaliDoppiCc',
|
||||
nullable: true,
|
||||
length: 200,
|
||||
})
|
||||
emailNotificaCodiciFiscaliDoppiCc!: string | null;
|
||||
|
||||
@Column('nvarchar', {
|
||||
name: 'oggettoEmailRichiestaDatiBancari',
|
||||
length: 200,
|
||||
default: () => "''",
|
||||
})
|
||||
oggettoEmailRichiestaDatiBancari!: string;
|
||||
|
||||
@Column('ntext', { name: 'emailRichiestaDatiBancari', default: () => "''" })
|
||||
emailRichiestaDatiBancari!: string;
|
||||
|
||||
@Column('int', {
|
||||
name: 'flagAllegaModuloIbanEmailRichiestaDatiBancari',
|
||||
nullable: true,
|
||||
})
|
||||
flagAllegaModuloIbanEmailRichiestaDatiBancari!: number | null;
|
||||
|
||||
constructor(init?: Partial<GruppoEntity>) {
|
||||
Object.assign(this, init);
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
export * from './gruppo.entity';
|
@ -0,0 +1 @@
|
||||
export * from './entities';
|
@ -1,36 +1,19 @@
|
||||
import { Global, Module } from '@nestjs/common';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { DataSource } from 'typeorm';
|
||||
import { DatabaseConfig, databaseConfig } from './database.config';
|
||||
import { APP_DATASOURCES } from './database.constants';
|
||||
import { typeormTransactionalDataSourceFactory } from './utils/typeorm-data-source-factory';
|
||||
import { typeormModuleOptionsFactory } from './utils/typeorm-module-options-factory';
|
||||
import { typeormEntitiesFromImport } from './utils/typeorm-import-entities';
|
||||
|
||||
const dataSources: DataSource[] = [];
|
||||
|
||||
const typeormModules = [
|
||||
TypeOrmModule.forRootAsync({
|
||||
imports: databaseConfig.asProvider().imports,
|
||||
dataSourceFactory: typeormTransactionalDataSourceFactory(),
|
||||
useFactory: async (dbConfig: DatabaseConfig) => {
|
||||
const config = await typeormModuleOptionsFactory(dbConfig, await typeormEntitiesFromImport(await import('./entities')));
|
||||
return config;
|
||||
},
|
||||
inject: [databaseConfig.KEY],
|
||||
}),
|
||||
];
|
||||
import { EbitempApiDatabaseModule } from './connections/ebitemp-api/database.module';
|
||||
import { dataSources } from './utils/typeorm-data-source-factory';
|
||||
|
||||
const dataSourcesProvider = {
|
||||
provide: APP_DATASOURCES,
|
||||
useValue: dataSources,
|
||||
};
|
||||
|
||||
const databaseModules = [EbitempApiDatabaseModule];
|
||||
|
||||
@Global()
|
||||
@Module({
|
||||
imports: [ConfigModule.forFeature(databaseConfig), ...typeormModules],
|
||||
imports: [...databaseModules],
|
||||
providers: [dataSourcesProvider],
|
||||
exports: [...typeormModules, dataSourcesProvider],
|
||||
exports: [dataSourcesProvider, ...databaseModules],
|
||||
})
|
||||
export class AppDatabaseModule {}
|
||||
|
@ -2,7 +2,6 @@ import { registerAs } from '@nestjs/config';
|
||||
import { ConnectionString } from 'connection-string';
|
||||
import { first } from 'lodash';
|
||||
import { z } from 'zod';
|
||||
import coerceRecordTypes from '../config/utils/coerce-record-types';
|
||||
|
||||
export const databaseSchema = z.object({
|
||||
connectionString: z.string(),
|
||||
@ -34,21 +33,16 @@ export const databaseSchema = z.object({
|
||||
database: z.string(),
|
||||
secure: z.boolean(),
|
||||
});
|
||||
|
||||
export type DatabaseConfig = z.TypeOf<typeof databaseSchema>;
|
||||
const rawDatabaseSchema = z.object({
|
||||
|
||||
export const rawDatabaseSchema = z.object({
|
||||
connectionString: z.string(),
|
||||
secure: z.boolean().default(true),
|
||||
});
|
||||
export type RawDatabaseConfigSchema = z.TypeOf<typeof rawDatabaseSchema>;
|
||||
|
||||
export const databaseConfig = registerAs('database', () => {
|
||||
const env = coerceRecordTypes(process.env);
|
||||
const envParsed = rawDatabaseSchema.strict().parse({
|
||||
connectionString: env['DATABASE_CONNECTION_STRING'],
|
||||
secure: env['DATABASE_SECURE'],
|
||||
});
|
||||
|
||||
const connectionString = new ConnectionString(envParsed.connectionString);
|
||||
export const databaseConfigFactory = (opts: RawDatabaseConfigSchema) => registerAs('database', () => {
|
||||
const connectionString = new ConnectionString(opts.connectionString);
|
||||
const config: DatabaseConfig = databaseSchema.strict().parse({
|
||||
connectionString: connectionString.toString(),
|
||||
type: connectionString.protocol,
|
||||
@ -57,7 +51,7 @@ export const databaseConfig = registerAs('database', () => {
|
||||
username: connectionString.user,
|
||||
password: connectionString.password,
|
||||
database: first(connectionString.path),
|
||||
secure: envParsed.secure,
|
||||
secure: opts.secure,
|
||||
});
|
||||
return config;
|
||||
});
|
@ -1,6 +1,6 @@
|
||||
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
|
||||
import { DatabaseConfig } from '../database.config';
|
||||
import { SnakeNamingStrategy } from 'typeorm-naming-strategies';
|
||||
import { DatabaseConfig } from './database-config';
|
||||
|
||||
export const typeormModuleOptionsFactory = async (
|
||||
databaseConfig: DatabaseConfig,
|
||||
|
@ -3,7 +3,7 @@ import { registerAs } from '@nestjs/config';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const enumifySchema = z.object({
|
||||
shouldUpdateEnumFromDbOnStartup: z.boolean().default(false),
|
||||
shouldUpdateEnumFromDbOnStartup: z.boolean().default(true),
|
||||
});
|
||||
export type EnumifyConfig = z.infer<typeof enumifySchema>;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ScheduleModule } from '@nestjs/schedule';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { TipiJobsEntity } from '../database/entities';
|
||||
import { TipiJobsEntity } from '../database/connections/ebitemp-api/entities';
|
||||
import { SchedulerService } from './schedule.service';
|
||||
|
||||
@Module({
|
||||
|
@ -3,7 +3,7 @@ import { SchedulerRegistry } from '@nestjs/schedule';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { CronJob, CronTime } from 'cron';
|
||||
import { Repository } from 'typeorm';
|
||||
import { TipiJobsEntity } from '../database/entities/tipi_jobs.entity';
|
||||
import { TipiJobsEntity } from '../database/connections/ebitemp-api/entities/tipi_jobs.entity';
|
||||
import { isError } from '@stdlib/assert';
|
||||
|
||||
@Injectable()
|
||||
|
Reference in New Issue
Block a user