Compare commits
45 Commits
preced_all
...
ver-1.2.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5ab24b2abd | ||
|
|
09a05a11d5 | ||
|
|
6c254a6a8e | ||
|
|
240a7be7f1 | ||
|
|
58839c32e1 | ||
|
|
b77a0579f1 | ||
|
|
6e8d1fcff1 | ||
|
|
192fd4706c | ||
|
|
fcc3755c19 | ||
|
|
97abe8b46d | ||
|
|
e40fbd550b | ||
|
|
3d4f8b0d04 | ||
|
|
95793fd73f | ||
|
|
4b4e3963ac | ||
|
|
85e2df56e1 | ||
|
|
58431c144c | ||
|
|
ad45ce60ee | ||
|
|
fba2ebd710 | ||
|
|
8e8a3204a7 | ||
|
|
e1ca4ef17f | ||
|
|
5431fe118e | ||
|
|
789dc1dcae | ||
|
|
76bacf3f5a | ||
|
|
d94cbde948 | ||
|
|
dfe492df45 | ||
|
|
6c50f35b2b | ||
|
|
a03c4cf613 | ||
|
|
7d845355a9 | ||
|
|
aeb83a512b | ||
|
|
e04247b1b6 | ||
|
|
f713f66369 | ||
|
|
f32bd189dc | ||
|
|
0017f04e45 | ||
|
|
65b29a6eee | ||
|
|
7827e49760 | ||
|
|
d106a59bb5 | ||
|
|
4758ce0857 | ||
|
|
6579c6bb3f | ||
|
|
6270991b76 | ||
|
|
f6d8e1bb0b | ||
|
|
f3597facd3 | ||
|
|
8363d65456 | ||
|
|
0a4cea94ae | ||
|
|
53a70a1c96 | ||
|
|
45d06b0923 |
14
.env.dev.pcb
14
.env.dev.pcb
@@ -8,24 +8,21 @@ appTelegram_TEST=["1","17"]
|
|||||||
appTelegram=["1","17"]
|
appTelegram=["1","17"]
|
||||||
appTelegram_DEVELOP=["17"]
|
appTelegram_DEVELOP=["17"]
|
||||||
DOMAIN=mongodb://localhost:27017/
|
DOMAIN=mongodb://localhost:27017/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=0
|
||||||
MONGODB_USER=admin
|
|
||||||
MONGODB_PWD=mypwadmin@1A
|
|
||||||
ENABLE_PUSHNOTIFICATION=1
|
ENABLE_PUSHNOTIFICATION=1
|
||||||
URLBASE_APP1=https://localhost
|
URLBASE_APP1=https://localhost
|
||||||
PORT_APP1=8080
|
PORT_APP1=8080
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
HTTPS_LOCALHOST=true
|
HTTPS_LOCALHOST=true
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=0
|
||||||
VITE_DEBUG=0
|
|
||||||
TESTING_ON=1
|
TESTING_ON=1
|
||||||
LOCALE=1
|
LOCALE=1
|
||||||
DELAY_SENDEMAIL=2000
|
DELAY_SENDEMAIL=2000
|
||||||
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
||||||
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
||||||
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
||||||
PATH_CERT_KEY=localhost.key
|
PATH_CERT_KEY=localhost-key.pem
|
||||||
PATH_SERVER_CRT=localhost.crt
|
PATH_SERVER_CRT=localhost.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
GCM_API_KEY=""
|
GCM_API_KEY=""
|
||||||
@@ -45,6 +42,5 @@ MIAB_HOST=box.lamiaposta.org
|
|||||||
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
||||||
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
||||||
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
||||||
|
SERVER_A_URL="http://51.77.156.69:3000"
|
||||||
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
||||||
SERVER_A_URL="http://51.77.156.69:3000"
|
|
||||||
@@ -8,31 +8,28 @@ appTelegram_TEST=["1","13"]
|
|||||||
appTelegram=["1","13"]
|
appTelegram=["1","13"]
|
||||||
appTelegram_DEVELOP=["13"]
|
appTelegram_DEVELOP=["13"]
|
||||||
DOMAIN=mongodb://localhost:27017/
|
DOMAIN=mongodb://localhost:27017/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=0
|
||||||
MONGODB_USER=admin
|
|
||||||
MONGODB_PWD=mypwadmin@1A
|
|
||||||
ENABLE_PUSHNOTIFICATION=1
|
ENABLE_PUSHNOTIFICATION=1
|
||||||
URLBASE_APP1=https://localhost
|
URLBASE_APP1=https://localhost
|
||||||
PORT_APP1=8080
|
PORT_APP1=8080
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
HTTPS_LOCALHOST=true
|
HTTPS_LOCALHOST=true
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=0
|
||||||
VITE_DEBUG=0
|
|
||||||
TESTING_ON=1
|
TESTING_ON=1
|
||||||
LOCALE=1
|
LOCALE=1
|
||||||
DELAY_SENDEMAIL=2000
|
DELAY_SENDEMAIL=2000
|
||||||
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
||||||
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
||||||
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
||||||
PATH_CERT_KEY=localhost.key
|
PATH_CERT_KEY=localhost-key.pem
|
||||||
PATH_SERVER_CRT=localhost.crt
|
PATH_SERVER_CRT=localhost.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
GCM_API_KEY=""
|
GCM_API_KEY=""
|
||||||
PROD=0
|
PROD=0
|
||||||
PROJECT_DESCR_MAIN='__PROJECTS'
|
PROJECT_DESCR_MAIN='__PROJECTS'
|
||||||
SECRK=Askb38v23jjDFaoskBOWj92axXCQ
|
SECRK=Askb38v23jjDFaoskBOWj92axXCQ
|
||||||
TOKEN_LIFE=2h
|
TOKEN_LIFE=1m
|
||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
FTPSERVER_HOST=139.162.166.31
|
FTPSERVER_HOST=139.162.166.31
|
||||||
FTPSERVER_PORT=21
|
FTPSERVER_PORT=21
|
||||||
|
|||||||
@@ -8,24 +8,21 @@ appTelegram_TEST=["1","17"]
|
|||||||
appTelegram=["1","17"]
|
appTelegram=["1","17"]
|
||||||
appTelegram_DEVELOP=["17"]
|
appTelegram_DEVELOP=["17"]
|
||||||
DOMAIN=mongodb://localhost:27017/
|
DOMAIN=mongodb://localhost:27017/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=0
|
||||||
MONGODB_USER=admin
|
|
||||||
MONGODB_PWD=mypwadmin@1A
|
|
||||||
ENABLE_PUSHNOTIFICATION=1
|
ENABLE_PUSHNOTIFICATION=1
|
||||||
URLBASE_APP1=https://localhost
|
URLBASE_APP1=https://localhost
|
||||||
PORT_APP1=8080
|
PORT_APP1=8080
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
HTTPS_LOCALHOST=true
|
HTTPS_LOCALHOST=true
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=0
|
||||||
VITE_DEBUG=0
|
|
||||||
TESTING_ON=1
|
TESTING_ON=1
|
||||||
LOCALE=1
|
LOCALE=1
|
||||||
DELAY_SENDEMAIL=2000
|
DELAY_SENDEMAIL=2000
|
||||||
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
VAPI_KEY_SUBJECT=mailto:paolo@freeplanet.app
|
||||||
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
PUBLIC_VAPI_KEY=BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8
|
||||||
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
PRIVATE_VAPI_KEY=uB2-jQkrbysyDtqN3ziMBDsVn0wdEaDsksX81zoOGQo
|
||||||
PATH_CERT_KEY=localhost.key
|
PATH_CERT_KEY=localhost-key.pem
|
||||||
PATH_SERVER_CRT=localhost.crt
|
PATH_SERVER_CRT=localhost.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
GCM_API_KEY=""
|
GCM_API_KEY=""
|
||||||
@@ -45,6 +42,5 @@ MIAB_HOST=box.lamiaposta.org
|
|||||||
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
||||||
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
||||||
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
DS_API_KEY="sk-222e3addb3d8455d8b0516d93906eec7"
|
||||||
|
SERVER_A_URL="http://51.77.156.69:3000"
|
||||||
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
||||||
SERVER_A_URL="http://51.77.156.69:3000"
|
|
||||||
@@ -8,7 +8,9 @@ DIRECTORY_SERVER=/var/www/www.freeplanet_server
|
|||||||
SERVERDIR_WEBSITE=/var/www/www.freeplanet_server
|
SERVERDIR_WEBSITE=/var/www/www.freeplanet_server
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:27017/
|
DOMAIN=mongodb://localhost:27017/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:27017/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_USER=admin
|
MONGODB_USER=admin
|
||||||
MONGODB_PWD=mypwadminREAL@1A
|
MONGODB_PWD=mypwadminREAL@1A
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
@@ -19,7 +21,7 @@ VAPI_KEY_SUBJECT="mailto:paolo@freeplanet.app"
|
|||||||
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
||||||
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
||||||
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
||||||
PATH_CERT_KEY=key.pem
|
PATH_CERT_KEY=privkey.pem
|
||||||
PATH_SERVER_CRT=fullchain.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
|
|||||||
@@ -10,8 +10,11 @@ ENABLE_PUSHNOTIFICATION=1
|
|||||||
DIRECTORY_SERVER=/var/www/nodejs_piuchebuono_server
|
DIRECTORY_SERVER=/var/www/nodejs_piuchebuono_server
|
||||||
SERVERDIR_WEBSITE=/var/www/piuchebuono.app
|
SERVERDIR_WEBSITE=/var/www/piuchebuono.app
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:32001/
|
DOMAIN_OFF=mongodb://localhost:32001/
|
||||||
|
DOMAIN_AUTH_OLD=mongodb://{username}:{password}@127.0.0.1:32001/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:27030/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_USER=admin
|
MONGODB_USER=admin
|
||||||
MONGODB_PWD=mypwadminREAL@1A
|
MONGODB_PWD=mypwadminREAL@1A
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
@@ -31,15 +34,11 @@ TOKEN_LIFE=2h
|
|||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNVZZ
|
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNVZZ
|
||||||
DOMAINS=[{"hostname":"piuchebuono.app","port":"3030"},{"hostname":"gruppomacro.app","port":"3010"}]
|
DOMAINS=[{"hostname":"piuchebuono.app","port":"3030"},{"hostname":"gruppomacro.app","port":"3010"}]
|
||||||
|
DOMAINS_ALLOWED=[]
|
||||||
SCRIPTS_DIR=admin_scripts
|
SCRIPTS_DIR=admin_scripts
|
||||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||||
MIAB_HOST=box.lamiaposta.org
|
MIAB_HOST=box.lamiaposta.org
|
||||||
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
||||||
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
||||||
|
SERVER_A_URL="http://51.77.156.69:3000"
|
||||||
#DB_CONNECTION=sqlsrv
|
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
||||||
DB_HOST_SQLSRVTEST=31.3.180.50
|
|
||||||
DB_PORT_SQLSRVTEST=14338
|
|
||||||
DB_DATABASE_SQLSRVTEST=ANAG_MACRO
|
|
||||||
DB_USERNAME_SQLSRVTEST=woo
|
|
||||||
DB_PASSWORD_SQLSRVTEST=4n4traPe@
|
|
||||||
@@ -7,8 +7,11 @@ ENABLE_PUSHNOTIFICATION=1
|
|||||||
DIRECTORY_SERVER=/var/www/nodejs_riso_server
|
DIRECTORY_SERVER=/var/www/nodejs_riso_server
|
||||||
SERVERDIR_WEBSITE=/var/www/riso.app
|
SERVERDIR_WEBSITE=/var/www/riso.app
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:32015/
|
DOMAIN_OFF=mongodb://localhost:32015/
|
||||||
|
DOMAIN_AUTH_OLD=mongodb://{username}:{password}@127.0.0.1:32015/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:27030/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_USER=admin
|
MONGODB_USER=admin
|
||||||
MONGODB_PWD=mypwadminREAL@1A
|
MONGODB_PWD=mypwadminREAL@1A
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
@@ -28,6 +31,7 @@ TOKEN_LIFE=2h
|
|||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||||
DOMAINS=[{"hostname":"riso.app","port":"3006"},{"hostname":"freeplanet.app","port":"3000"}]
|
DOMAINS=[{"hostname":"riso.app","port":"3006"},{"hostname":"freeplanet.app","port":"3000"}]
|
||||||
|
DOMAINS_ALLOWED=["comunitanuovomondo.app","kolibrilab.it","artenergetica.org","freeplanet.app","www.freeplanet.app","freeplanet.app:3000","freeplanet.app:3001","www.freeplanet.app:3000","www.freeplanet.app:3001"]
|
||||||
#DOMAINS=[{"hostname":"abitaregliiblei.it","port":"3021"},{"hostname":"riso.app","port":"3005"}]
|
#DOMAINS=[{"hostname":"abitaregliiblei.it","port":"3021"},{"hostname":"riso.app","port":"3005"}]
|
||||||
SCRIPTS_DIR=admin_scripts
|
SCRIPTS_DIR=admin_scripts
|
||||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||||
|
|||||||
@@ -11,9 +11,11 @@ DIRECTORY_SERVER=/var/www/nodejs_test.piuchebuono_server
|
|||||||
SERVERDIR_WEBSITE=var/www/test.piuchebuono.app
|
SERVERDIR_WEBSITE=var/www/test.piuchebuono.app
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:32002/
|
DOMAIN=mongodb://localhost:32002/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:32002/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_USER=admin
|
MONGODB_USER=admin
|
||||||
MONGODB_PWD=mypwadmin@1A
|
MONGODB_PWD=mypwadminS1A
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=0
|
||||||
LOCALE=0
|
LOCALE=0
|
||||||
@@ -22,7 +24,7 @@ VAPI_KEY_SUBJECT="mailto:surya@riso.app"
|
|||||||
PUBLIC_VAPI_KEY="BJgo8XR_upbnbMLWgCAUELo6DK7dRXffYAnFOxbaMMz5favBgcQBKT-eISqouO-jRad4Sw8l5nd2wCF6KorGiTc"
|
PUBLIC_VAPI_KEY="BJgo8XR_upbnbMLWgCAUELo6DK7dRXffYAnFOxbaMMz5favBgcQBKT-eISqouO-jRad4Sw8l5nd2wCF6KorGiTc"
|
||||||
PRIVATE_VAPI_KEY="LVpFDJuKscdHuQr5pe20dFuYuWX1-ZRb6x72PP-Pp4I"
|
PRIVATE_VAPI_KEY="LVpFDJuKscdHuQr5pe20dFuYuWX1-ZRb6x72PP-Pp4I"
|
||||||
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
||||||
PATH_CERT_KEY=key.pem
|
PATH_CERT_KEY=privkey.pem
|
||||||
PATH_SERVER_CRT=fullchain.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
@@ -33,8 +35,11 @@ TOKEN_LIFE=2h
|
|||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||||
DOMAINS=[{"hostname":"piuchebuono.app","port":"3031"},{"hostname":"gruppomacro.app","port":"3011"}]
|
DOMAINS=[{"hostname":"piuchebuono.app","port":"3031"},{"hostname":"gruppomacro.app","port":"3011"}]
|
||||||
|
DOMAINS_ALLOWED=[]
|
||||||
SCRIPTS_DIR=admin_scripts
|
SCRIPTS_DIR=admin_scripts
|
||||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||||
MIAB_HOST=box.lamiaposta.org
|
MIAB_HOST=box.lamiaposta.org
|
||||||
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
MIAB_ADMIN_EMAIL=admin@lamiaposta.org
|
||||||
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
MIAB_ADMIN_PASSWORD=passpao1pabox@1A
|
||||||
|
SERVER_A_URL="http://51.77.156.69:3000"
|
||||||
|
API_KEY_MSSQL="m68yADSr123MIVIDA@154$DSAGVOK"
|
||||||
@@ -8,28 +8,31 @@ DIRECTORY_SERVER=/var/www/nodejs_test.riso_server
|
|||||||
SERVERDIR_WEBSITE=/var/www/test.riso.app
|
SERVERDIR_WEBSITE=/var/www/test.riso.app
|
||||||
PORT_APP1="0"
|
PORT_APP1="0"
|
||||||
DOMAIN=mongodb://localhost:32012/
|
DOMAIN=mongodb://localhost:32012/
|
||||||
|
DOMAIN_AUTH=mongodb://{username}:{password}@127.0.0.1:32012/
|
||||||
AUTH_MONGODB=1
|
AUTH_MONGODB=1
|
||||||
MONGODB_USER=admin
|
AUTH_DB_PASSING=1
|
||||||
MONGODB_PWD=mypwadmin@1A
|
MONGODB_USER="admin"
|
||||||
|
MONGODB_PWD="mypwadminS1A"
|
||||||
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
SIGNCODE=SU2134hncaskjdbo231oihJSDNHEI$1@AB
|
||||||
VITE_DEBUG=0
|
VITE_DEBUG=1
|
||||||
LOCALE=0
|
LOCALE=0
|
||||||
DELAY_SENDEMAIL=1000
|
DELAY_SENDEMAIL=1000
|
||||||
VAPI_KEY_SUBJECT="mailto:surya@riso.app"
|
VAPI_KEY_SUBJECT="mailto:surya@riso.app"
|
||||||
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
||||||
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
||||||
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
||||||
PATH_CERT_KEY=key.pem
|
PATH_CERT_KEY=privkey.pem
|
||||||
PATH_SERVER_CRT=fullchain.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
PROD=0
|
PROD=0
|
||||||
PROJECT_DESCR_MAIN='__PROJECTS'
|
PROJECT_DESCR_MAIN='__PROJECTS'
|
||||||
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
SECRK=iUUb38v23jjDFaosWj92axkBOXCQ
|
||||||
TOKEN_LIFE=1m
|
TOKEN_LIFE=2h
|
||||||
REFRESH_TOKEN_LIFE=14d
|
REFRESH_TOKEN_LIFE=14d
|
||||||
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV
|
||||||
DOMAINS=[{"hostname":"riso.app","port":"3005"}]
|
DOMAINS=[{"hostname":"riso.app","port":"3005"}]
|
||||||
|
DOMAINS_ALLOWED=["comunitanuovomondo.app","kolibrilab.it","artenergetica.org","freeplanet.app","www.freeplanet.app","freeplanet.app:3000","freeplanet.app:3001","www.freeplanet.app:3000","www.freeplanet.app:3001"]
|
||||||
SCRIPTS_DIR=admin_scripts
|
SCRIPTS_DIR=admin_scripts
|
||||||
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
CLOUDFLARE_TOKENS=[{"label":"Paolo.arena77@gmail.com","value":"M9EM309v8WFquJKpYgZCw-TViM2wX6vB3wlK6GD0"},{"label":"gruppomacro.com","value":"bqmzGShoX7WqOBzkXocoECyBkPq3GfqcM5t6VFd8"}]
|
||||||
MIAB_HOST=box.lamiaposta.org
|
MIAB_HOST=box.lamiaposta.org
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ VAPI_KEY_SUBJECT="mailto:paolo@freeplanet.app"
|
|||||||
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
PUBLIC_VAPI_KEY="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
||||||
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
PRIVATE_VAPI_KEY="St9UMzcS76Q9yKG6RInAuYydYjFRliqwHTJY3A5wjO0"
|
||||||
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
GCM_API_KEY="AIzaSyD7w1jztfVV05mX1iyxoI-r1pZWxuxdUK8"
|
||||||
PATH_CERT_KEY=key.pem
|
PATH_CERT_KEY=privkey.pem
|
||||||
PATH_SERVER_CRT=fullchain.pem
|
PATH_SERVER_CRT=fullchain.pem
|
||||||
PATH_SSL_ROOT_PEM=root.pem
|
PATH_SSL_ROOT_PEM=root.pem
|
||||||
PATH_SSL_CHAIN_PEM=chain.pem
|
PATH_SSL_CHAIN_PEM=chain.pem
|
||||||
|
|||||||
76
OFF_deploynodejs_on_production.sh.off
Executable file
76
OFF_deploynodejs_on_production.sh.off
Executable file
@@ -0,0 +1,76 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.production
|
||||||
|
|
||||||
|
msg="*** SERVER DI PRODUZIONE **** SEI SICURO DI INVIARE GLI AGGIORNAMENTI SERVERSIDE (NODE JS) - SUL SERVER DI PRODUZIONE ?? $SERVERDIR_WEBSITE (Y/N) ? "
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso NODEPRODUZIONE ... $SERVERDIR_WEBSITE/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="suryapaolo"
|
||||||
|
REMOTE_HOST="servereng"
|
||||||
|
REMOTE_PORT="8855"
|
||||||
|
REMOTE_DIR="$SERVERDIR_WEBSITE"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
|
||||||
|
# Array di cartelle e file da sincronizzare
|
||||||
|
SYNC_ITEMS=(
|
||||||
|
"css"
|
||||||
|
"docs"
|
||||||
|
"emails"
|
||||||
|
"plugins"
|
||||||
|
"admin_scripts"
|
||||||
|
"sass"
|
||||||
|
"src"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Sincronizzazione Cartelle su $REMOTE_DIR ..."
|
||||||
|
|
||||||
|
|
||||||
|
# Esegui rsync per le cartelle
|
||||||
|
rsync -avz --delete \
|
||||||
|
--exclude='src/server/router/upload/' \
|
||||||
|
-e "ssh $SSH_OPTIONS" \
|
||||||
|
"${SYNC_ITEMS[@]}" \
|
||||||
|
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file .env.production ... "
|
||||||
|
|
||||||
|
# Sincronizza i file specifici
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
.env.production "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file package.json ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file ecosystem.config.js ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
ecosystem.config.js "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
||||||
|
|
||||||
|
# Verifica il risultato
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Sincronizzazione completata con successo. SERVER PRODUZIONE! "
|
||||||
|
else
|
||||||
|
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
db.myelems.insertMany([
|
db.myelems.insertMany([
|
||||||
{
|
{
|
||||||
"_id": ObjectId("669fbf9dc9d625d0628eb12f"),
|
"_id": new ObjectId("669fbf9dc9d625d0628eb12f"),
|
||||||
"order": 20,
|
"order": 20,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -13,14 +13,14 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"containerHtml": "<div style=\"text-align: center;\"><b><font size=\"4\">Abitare Gli Iblei</font></b></div>",
|
"containerHtml": "<div style=\"text-align: center;\"><b><font size=\"4\">Abitare Gli Iblei</font></b></div>",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66e456981e0719a1012121c0"),
|
"_id": new ObjectId("66e456981e0719a1012121c0"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
"timingtype": "ease-in-out"
|
"timingtype": "ease-in-out"
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"_id": ObjectId("669fbfc3c9d625d0628eb131"),
|
"_id": new ObjectId("669fbfc3c9d625d0628eb131"),
|
||||||
"order": 100,
|
"order": 100,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 145,
|
"type": 145,
|
||||||
@@ -32,7 +32,7 @@ db.myelems.insertMany([
|
|||||||
"list": [],
|
"list": [],
|
||||||
"__v": 0
|
"__v": 0
|
||||||
}, {
|
}, {
|
||||||
"_id": ObjectId("66db2a45054b3b09f85e6983"),
|
"_id": new ObjectId("66db2a45054b3b09f85e6983"),
|
||||||
"order": 26,
|
"order": 26,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 35,
|
"type": 35,
|
||||||
@@ -45,7 +45,7 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"image": "logo.jpg",
|
"image": "logo.jpg",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66db34215740efc77547a93a"),
|
"_id": new ObjectId("66db34215740efc77547a93a"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
@@ -55,7 +55,7 @@ db.myelems.insertMany([
|
|||||||
"align": 2
|
"align": 2
|
||||||
}
|
}
|
||||||
, {
|
, {
|
||||||
"_id": ObjectId("66db38a77e24f4509eef655b"),
|
"_id": new ObjectId("66db38a77e24f4509eef655b"),
|
||||||
"order": 26,
|
"order": 26,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -68,7 +68,7 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"containerHtml": "<style>\nbody {\n font-family: Arial, sans-serif;\n margin: 0;\n padding: 20px;\n background-color: #f0f0f0;\n color: #333;\n}\n\nh1 {\n color: #0056b3;\n text-align: center;\n}\n\n\np, li {\n line-height: 1.6;\n}\n\n\nul {\n list-style-type: none;\n padding: 0;\n}\n\n\nli {\n background-color: #fff !important;\n margin-bottom: 10px !important;\n padding: 10px !important;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; \n}\n\n\na {\n color: #007bff;\n text-decoration: none;\n}\n\n\na:hover {\n text-decoration: underline;\n}\n\n\n.container {\n max-width: 800px;\n margin: 0 auto;\n background-color: #fff;\n padding: 20px;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n}\n\n\n.strong {\n font-weight: bold;\n}\n</style>\n\n\n<p><strong>“Abitare gli Iblei”</strong> è una rete aperta che ha lo scopo di riunire tutte quelle persone che vogliono valorizzare e qualificare la vita nel territorio degli Iblei. </p>\n \n <p>Chi aderisce alla rete si riconosce in una <strong>Carta dei valori comuni</strong> e usa la rete per scambiare conoscenze, esperienze, risorse e prodotti sviluppati nell’ambito delle proprie iniziative (profit e non profit) individuali o collettive.</p>\n\n\n <p>L’area territoriale di questa rete è quella dei <strong>Monti Iblei orientali e occidentali</strong> (Noto, Avola, Canicattini, Siracusa, Palazzolo, Buccheri, Ferla, Modica, …).</p>\n\n\n <p>La rete <strong>“Abitare gli Iblei”</strong> offre i seguenti servizi utili per il territorio ed i suoi abitanti, frutto di una costruzione collettiva:</p>\n \n <ul>\n <li><strong>1. Mappa delle attività virtuose:</strong> permette di identificare attività pubbliche e private nel territorio che possono essere utili nella vita quotidiana. Queste attività possono riguardare artigiani, produttori o fornitori di servizi di cui almeno un membro della rete conosca la qualità e l’affidabilità (agricoltori, falegnami, fabbri, idraulici, imprese edili, strutture ricettive, …). Altre informazioni utili possono riguardare associazioni/istituzioni operanti in vari settori. – <strong>Accesso pubblico</strong></li>\n <li><strong>2. Calendario:</strong> permette di accedere ad annunci di eventi utili alla crescita culturale del territorio. La pubblicazione di eventi è riservata ai soli membri della rete che possono presentare iniziative anche di altri organizzatori. – <strong>Accesso pubblico</strong></li>\n <li><strong>3. Scambi di servizi, prodotti e ospitalità:</strong> questa funzione è riservata ai soli membri della rete e si realizza attraverso la Rete italiana di scambi orizzontali (RISO). – <strong>Accesso riservato</strong></li>\n <li><strong>4. Segnalazione di pericoli per il territorio:</strong> attraverso questa mappa è possibile segnalare incendi, immondizia abbandonata, discariche abusive, fonti di inquinamento per corsi d’acqua e spiagge, presenza di inquinamento nell’aria, … – <strong>Accesso riservato</strong></li>\n </ul>\n \n <p>Se vuoi aderire alla rete puoi richiederne la registrazione utilizzando questo Link <a href=\"#\"><strong>(Pagina in Costruzione)</strong></a>.</p>\n\n",
|
"containerHtml": "<style>\nbody {\n font-family: Arial, sans-serif;\n margin: 0;\n padding: 20px;\n background-color: #f0f0f0;\n color: #333;\n}\n\nh1 {\n color: #0056b3;\n text-align: center;\n}\n\n\np, li {\n line-height: 1.6;\n}\n\n\nul {\n list-style-type: none;\n padding: 0;\n}\n\n\nli {\n background-color: #fff !important;\n margin-bottom: 10px !important;\n padding: 10px !important;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; \n}\n\n\na {\n color: #007bff;\n text-decoration: none;\n}\n\n\na:hover {\n text-decoration: underline;\n}\n\n\n.container {\n max-width: 800px;\n margin: 0 auto;\n background-color: #fff;\n padding: 20px;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n}\n\n\n.strong {\n font-weight: bold;\n}\n</style>\n\n\n<p><strong>“Abitare gli Iblei”</strong> è una rete aperta che ha lo scopo di riunire tutte quelle persone che vogliono valorizzare e qualificare la vita nel territorio degli Iblei. </p>\n \n <p>Chi aderisce alla rete si riconosce in una <strong>Carta dei valori comuni</strong> e usa la rete per scambiare conoscenze, esperienze, risorse e prodotti sviluppati nell’ambito delle proprie iniziative (profit e non profit) individuali o collettive.</p>\n\n\n <p>L’area territoriale di questa rete è quella dei <strong>Monti Iblei orientali e occidentali</strong> (Noto, Avola, Canicattini, Siracusa, Palazzolo, Buccheri, Ferla, Modica, …).</p>\n\n\n <p>La rete <strong>“Abitare gli Iblei”</strong> offre i seguenti servizi utili per il territorio ed i suoi abitanti, frutto di una costruzione collettiva:</p>\n \n <ul>\n <li><strong>1. Mappa delle attività virtuose:</strong> permette di identificare attività pubbliche e private nel territorio che possono essere utili nella vita quotidiana. Queste attività possono riguardare artigiani, produttori o fornitori di servizi di cui almeno un membro della rete conosca la qualità e l’affidabilità (agricoltori, falegnami, fabbri, idraulici, imprese edili, strutture ricettive, …). Altre informazioni utili possono riguardare associazioni/istituzioni operanti in vari settori. – <strong>Accesso pubblico</strong></li>\n <li><strong>2. Calendario:</strong> permette di accedere ad annunci di eventi utili alla crescita culturale del territorio. La pubblicazione di eventi è riservata ai soli membri della rete che possono presentare iniziative anche di altri organizzatori. – <strong>Accesso pubblico</strong></li>\n <li><strong>3. Scambi di servizi, prodotti e ospitalità:</strong> questa funzione è riservata ai soli membri della rete e si realizza attraverso la Rete italiana di scambi orizzontali (RISO). – <strong>Accesso riservato</strong></li>\n <li><strong>4. Segnalazione di pericoli per il territorio:</strong> attraverso questa mappa è possibile segnalare incendi, immondizia abbandonata, discariche abusive, fonti di inquinamento per corsi d’acqua e spiagge, presenza di inquinamento nell’aria, … – <strong>Accesso riservato</strong></li>\n </ul>\n \n <p>Se vuoi aderire alla rete puoi richiederne la registrazione utilizzando questo Link <a href=\"#\"><strong>(Pagina in Costruzione)</strong></a>.</p>\n\n",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66db393e3b885ccdfaed28d6"),
|
"_id": new ObjectId("66db393e3b885ccdfaed28d6"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
@@ -76,7 +76,7 @@ db.myelems.insertMany([
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
, {
|
, {
|
||||||
"_id": ObjectId("66e41cff78c8d880eebfbf1c"),
|
"_id": new ObjectId("66e41cff78c8d880eebfbf1c"),
|
||||||
"order": 32.5,
|
"order": 32.5,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -89,7 +89,7 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"containerHtml": "ORAAAA",
|
"containerHtml": "ORAAAA",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66e459421e0719a1012123ad"),
|
"_id": new ObjectId("66e459421e0719a1012123ad"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
@@ -98,7 +98,7 @@ db.myelems.insertMany([
|
|||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e4270d78c8d880eebfbf24"),
|
"_id": new ObjectId("66e4270d78c8d880eebfbf24"),
|
||||||
"order": 40,
|
"order": 40,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -111,14 +111,14 @@ db.myelems.insertMany([
|
|||||||
"__v": 0,
|
"__v": 0,
|
||||||
"containerHtml": "BBB",
|
"containerHtml": "BBB",
|
||||||
"anim": {
|
"anim": {
|
||||||
"_id": ObjectId("66e4568d1e0719a1012121a6"),
|
"_id": new ObjectId("66e4568d1e0719a1012121a6"),
|
||||||
"name": "",
|
"name": "",
|
||||||
"clduration": "",
|
"clduration": "",
|
||||||
"cldelay": "",
|
"cldelay": "",
|
||||||
"timingtype": "ease-in-out"
|
"timingtype": "ease-in-out"
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"_id": ObjectId("66e45b0c78c8d880eebfbf45"),
|
"_id": new ObjectId("66e45b0c78c8d880eebfbf45"),
|
||||||
"order": 70,
|
"order": 70,
|
||||||
"active": true,
|
"active": true,
|
||||||
"type": 20,
|
"type": 20,
|
||||||
@@ -136,7 +136,7 @@ db.myelems.insertMany([
|
|||||||
db.sites.insert(
|
db.sites.insert(
|
||||||
/* 1 */
|
/* 1 */
|
||||||
{
|
{
|
||||||
"_id": ObjectId("669fbef7fc704b8912263af9"),
|
"_id": new ObjectId("669fbef7fc704b8912263af9"),
|
||||||
"confpages": {
|
"confpages": {
|
||||||
"font": "",
|
"font": "",
|
||||||
"col_toolbar": "",
|
"col_toolbar": "",
|
||||||
@@ -235,7 +235,7 @@ db.sites.insert(
|
|||||||
|
|
||||||
db.users.insert(
|
db.users.insert(
|
||||||
{
|
{
|
||||||
"_id": ObjectId("669fbef7c9d625d0628eb12d"),
|
"_id": new ObjectId("669fbef7c9d625d0628eb12d"),
|
||||||
"profile": {
|
"profile": {
|
||||||
"paymenttypes": [],
|
"paymenttypes": [],
|
||||||
"notif_idCities": [],
|
"notif_idCities": [],
|
||||||
@@ -343,7 +343,7 @@ db.users.insert(
|
|||||||
"tokens": [
|
"tokens": [
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI3NjIzNjY1fQ.6QaBaiE1pv7mDy7S8YUReqH8m0CCK7jTmd57eGHgnzE",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI3NjIzNjY1fQ.6QaBaiE1pv7mDy7S8YUReqH8m0CCK7jTmd57eGHgnzE",
|
||||||
"_id": ObjectId("66e6fcf1ac95a84fd0e11b2c"),
|
"_id": new ObjectId("66e6fcf1ac95a84fd0e11b2c"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Linux; Android 11; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.127 Mobile Safari/537.36",
|
"browser": "Mozilla/5.0 (Linux; Android 11; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.127 Mobile Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI2NDIxMjY1fQ.wCZcQ5uSQXnVgS_ZGyzjl6TOQk8rflfe2HSxSku0Aj4",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI2NDIxMjY1fQ.wCZcQ5uSQXnVgS_ZGyzjl6TOQk8rflfe2HSxSku0Aj4",
|
||||||
@@ -351,7 +351,7 @@ db.users.insert(
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI3NjQwNTgwfQ.YdB5unWwaZ21kk87RRPolLGiWxf7bKX0piKd-bGQifU",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI3NjQwNTgwfQ.YdB5unWwaZ21kk87RRPolLGiWxf7bKX0piKd-bGQifU",
|
||||||
"_id": ObjectId("66e73f04ac95a84fd0e122ae"),
|
"_id": new ObjectId("66e73f04ac95a84fd0e122ae"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
"browser": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI2NDM4MTgwfQ.TMF1UNbgw-EpGVWWDNnY3wRdLYOyp5HzAQiakpyaL_4",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI2NDM4MTgwfQ.TMF1UNbgw-EpGVWWDNnY3wRdLYOyp5HzAQiakpyaL_4",
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ db.mygroups.insert(
|
|||||||
"photos": [],
|
"photos": [],
|
||||||
"admins": [
|
"admins": [
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e2e6276b502b07f1e89571"),
|
"_id": new ObjectId("66e2e6276b502b07f1e89571"),
|
||||||
"username": "paoloar77"
|
"username": "paoloar77"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
db.mypages.insertMany([
|
db.mypages.insertMany([
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66db21118009ea4503bb6a01"),
|
"_id": new ObjectId("66db21118009ea4503bb6a01"),
|
||||||
"order": 10,
|
"order": 10,
|
||||||
"idapp": "19",
|
"idapp": "19",
|
||||||
"path": "home",
|
"path": "home",
|
||||||
@@ -8,7 +8,7 @@ db.mypages.insertMany([
|
|||||||
"title": "Home",
|
"title": "Home",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66db21118009ea4503bb6a03"),
|
"_id": new ObjectId("66db21118009ea4503bb6a03"),
|
||||||
"order": 10,
|
"order": 10,
|
||||||
"idapp": "19",
|
"idapp": "19",
|
||||||
"path": "home_logout",
|
"path": "home_logout",
|
||||||
@@ -16,7 +16,7 @@ db.mypages.insertMany([
|
|||||||
"title": "Home NoLoggato",
|
"title": "Home NoLoggato",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e322dd5a6360e3b3c71c5a"),
|
"_id": new ObjectId("66e322dd5a6360e3b3c71c5a"),
|
||||||
"order": 40,
|
"order": 40,
|
||||||
"idapp": "19",
|
"idapp": "19",
|
||||||
"path": "presentazione",
|
"path": "presentazione",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
db.users.insertMany([
|
db.users.insertMany([
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66db21115281b23462d496d2"),
|
"_id": new ObjectId("66db21115281b23462d496d2"),
|
||||||
"profile": {
|
"profile": {
|
||||||
"paymenttypes": [],
|
"paymenttypes": [],
|
||||||
"notif_idCities": [],
|
"notif_idCities": [],
|
||||||
@@ -66,7 +66,7 @@ db.users.insertMany([
|
|||||||
"tokens": [
|
"tokens": [
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZkYjIxMTE1MjgxYjIzNDYyZDQ5NmQyIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG9hcjc3IiwiaWF0IjoxNzI2NTEyODY1LCJleHAiOjE3Mjc3MjI0NjV9.EOvF89kswT1eqVJCSwVMMI-jB4kokP-aQVhi7xSUods",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZkYjIxMTE1MjgxYjIzNDYyZDQ5NmQyIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG9hcjc3IiwiaWF0IjoxNzI2NTEyODY1LCJleHAiOjE3Mjc3MjI0NjV9.EOvF89kswT1eqVJCSwVMMI-jB4kokP-aQVhi7xSUods",
|
||||||
"_id": ObjectId("66e87ee1bbe2ce0f77adf6b8"),
|
"_id": new ObjectId("66e87ee1bbe2ce0f77adf6b8"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
"browser": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZkYjIxMTE1MjgxYjIzNDYyZDQ5NmQyIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG9hcjc3IiwiaWF0IjoxNzI2NTEyODY1LCJleHAiOjE3MjY1MjAwNjV9.ESvyTWmXhfAQ0i-wwjxZR1A1Y5Bwixb60uG_UcOPQ5Y",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZkYjIxMTE1MjgxYjIzNDYyZDQ5NmQyIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG9hcjc3IiwiaWF0IjoxNzI2NTEyODY1LCJleHAiOjE3MjY1MjAwNjV9.ESvyTWmXhfAQ0i-wwjxZR1A1Y5Bwixb60uG_UcOPQ5Y",
|
||||||
@@ -90,7 +90,7 @@ db.users.insertMany([
|
|||||||
"useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
|
"useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e49515d18d313a144ead56"),
|
"_id": new ObjectId("66e49515d18d313a144ead56"),
|
||||||
"profile": {
|
"profile": {
|
||||||
"paymenttypes": [],
|
"paymenttypes": [],
|
||||||
"notif_idCities": [],
|
"notif_idCities": [],
|
||||||
@@ -187,7 +187,7 @@ db.users.insertMany([
|
|||||||
"tokens": [
|
"tokens": [
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNDk1MTVkMThkMzEzYTE0NGVhZDU2IiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG90ZXN0IiwiaWF0IjoxNzI2MzQ3MzE1LCJleHAiOjE3Mjc1NTY5MTV9.NHnFUXOL0MbjRs9F6HrQsEBRGXG89AsBYP7jU9m8icY",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNDk1MTVkMThkMzEzYTE0NGVhZDU2IiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG90ZXN0IiwiaWF0IjoxNzI2MzQ3MzE1LCJleHAiOjE3Mjc1NTY5MTV9.NHnFUXOL0MbjRs9F6HrQsEBRGXG89AsBYP7jU9m8icY",
|
||||||
"_id": ObjectId("66e5f83392c9540e18f89730"),
|
"_id": new ObjectId("66e5f83392c9540e18f89730"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
"browser": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNDk1MTVkMThkMzEzYTE0NGVhZDU2IiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG90ZXN0IiwiaWF0IjoxNzI2MzQ3MzE1LCJleHAiOjE3MjYzNTQ1MTV9.HTr1kNMhBU_38R2Tfy6m22XCbiRh5IsBKC3fl0ipIgM",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNDk1MTVkMThkMzEzYTE0NGVhZDU2IiwiYWNjZXNzIjoiYXV0aCIsInVuIjoicGFvbG90ZXN0IiwiaWF0IjoxNzI2MzQ3MzE1LCJleHAiOjE3MjYzNTQ1MTV9.HTr1kNMhBU_38R2Tfy6m22XCbiRh5IsBKC3fl0ipIgM",
|
||||||
@@ -207,7 +207,7 @@ db.users.insertMany([
|
|||||||
"perm": 16
|
"perm": 16
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"_id": ObjectId("66e6fb5aac95a84fd0e11881"),
|
"_id": new ObjectId("66e6fb5aac95a84fd0e11881"),
|
||||||
"profile": {
|
"profile": {
|
||||||
"paymenttypes": [],
|
"paymenttypes": [],
|
||||||
"notif_idCities": [],
|
"notif_idCities": [],
|
||||||
@@ -304,7 +304,7 @@ db.users.insertMany([
|
|||||||
"tokens": [
|
"tokens": [
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI3NjIzNjY1fQ.6QaBaiE1pv7mDy7S8YUReqH8m0CCK7jTmd57eGHgnzE",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI3NjIzNjY1fQ.6QaBaiE1pv7mDy7S8YUReqH8m0CCK7jTmd57eGHgnzE",
|
||||||
"_id": ObjectId("66e6fcf1ac95a84fd0e11b2c"),
|
"_id": new ObjectId("66e6fcf1ac95a84fd0e11b2c"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Linux; Android 11; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.127 Mobile Safari/537.36",
|
"browser": "Mozilla/5.0 (Linux; Android 11; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.127 Mobile Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI2NDIxMjY1fQ.wCZcQ5uSQXnVgS_ZGyzjl6TOQk8rflfe2HSxSku0Aj4",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQxNDA2NSwiZXhwIjoxNzI2NDIxMjY1fQ.wCZcQ5uSQXnVgS_ZGyzjl6TOQk8rflfe2HSxSku0Aj4",
|
||||||
@@ -312,7 +312,7 @@ db.users.insertMany([
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI3NjQwNTgwfQ.YdB5unWwaZ21kk87RRPolLGiWxf7bKX0piKd-bGQifU",
|
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI3NjQwNTgwfQ.YdB5unWwaZ21kk87RRPolLGiWxf7bKX0piKd-bGQifU",
|
||||||
"_id": ObjectId("66e73f04ac95a84fd0e122ae"),
|
"_id": new ObjectId("66e73f04ac95a84fd0e122ae"),
|
||||||
"access": "auth",
|
"access": "auth",
|
||||||
"browser": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
"browser": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36",
|
||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI2NDM4MTgwfQ.TMF1UNbgw-EpGVWWDNnY3wRdLYOyp5HzAQiakpyaL_4",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiJQUk9WQU1TR0AxQSIsInNtYXJ0IjoiNjZlNmZiNWFhYzk1YTg0ZmQwZTExODgxIiwiYWNjZXNzIjoiYXV0aCIsInVuIjoiRW56byIsImlhdCI6MTcyNjQzMDk4MCwiZXhwIjoxNzI2NDM4MTgwfQ.TMF1UNbgw-EpGVWWDNnY3wRdLYOyp5HzAQiakpyaL_4",
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.prod.pcb
|
|
||||||
|
|
||||||
echo "Sincronizzazione in corso PCB PRODUZIONE ... $DIRECTORY_SERVER/"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Configurazione
|
|
||||||
REMOTE_USER="pcbuser"
|
|
||||||
REMOTE_HOST="pcb"
|
|
||||||
REMOTE_PORT="8822"
|
|
||||||
REMOTE_DIR="$DIRECTORY_SERVER"
|
|
||||||
SSH_OPTIONS="-p $REMOTE_PORT"
|
|
||||||
|
|
||||||
# Array di cartelle e file da sincronizzare
|
|
||||||
SYNC_ITEMS=(
|
|
||||||
"css"
|
|
||||||
"docs"
|
|
||||||
"emails"
|
|
||||||
"plugins"
|
|
||||||
"admin_scripts"
|
|
||||||
"sass"
|
|
||||||
"src"
|
|
||||||
)
|
|
||||||
|
|
||||||
echo $REMOTE_DIR
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia Cartelle ... "
|
|
||||||
|
|
||||||
|
|
||||||
# Esegui rsync per le cartelle
|
|
||||||
rsync -avz --delete \
|
|
||||||
--exclude='src/server/router/upload/' \
|
|
||||||
-e "ssh $SSH_OPTIONS" \
|
|
||||||
"${SYNC_ITEMS[@]}" \
|
|
||||||
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file .env.production ... "
|
|
||||||
|
|
||||||
# Sincronizza i file specifici
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
.env.prod.pcb "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/.env.production"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file package.json ... "
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file ecosystem.config.js ... "
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
ecosystem.config.pcb.js "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
|
||||||
|
|
||||||
# Verifica il risultato
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Sincronizzazione completata con successo. SERVER PCB! "
|
|
||||||
else
|
|
||||||
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.test.pcb
|
|
||||||
|
|
||||||
echo "Sincronizzazione in corso PCB TEST ... $DIRECTORY_SERVER/"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Configurazione
|
|
||||||
REMOTE_USER="pcbuser"
|
|
||||||
REMOTE_HOST="pcb"
|
|
||||||
REMOTE_PORT="8822"
|
|
||||||
REMOTE_DIR="$DIRECTORY_SERVER"
|
|
||||||
SSH_OPTIONS="-p $REMOTE_PORT"
|
|
||||||
|
|
||||||
# Array di cartelle e file da sincronizzare
|
|
||||||
SYNC_ITEMS=(
|
|
||||||
"css"
|
|
||||||
"docs"
|
|
||||||
"emails"
|
|
||||||
"plugins"
|
|
||||||
"admin_scripts"
|
|
||||||
"sass"
|
|
||||||
"src"
|
|
||||||
)
|
|
||||||
|
|
||||||
echo $REMOTE_DIR
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia Cartelle ... "
|
|
||||||
|
|
||||||
|
|
||||||
# Esegui rsync per le cartelle
|
|
||||||
rsync -avz --delete \
|
|
||||||
--exclude='src/server/router/upload/' \
|
|
||||||
-e "ssh $SSH_OPTIONS" \
|
|
||||||
"${SYNC_ITEMS[@]}" \
|
|
||||||
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file .env.test ... "
|
|
||||||
|
|
||||||
# Sincronizza i file specifici
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
.env.test.pcb "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/.env.test"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file package.json ... "
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file ecosystem.config.testpcb.js in ecosystem.config.js ... "
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
ecosystem.config.testpcb.js "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
|
||||||
|
|
||||||
# Verifica il risultato
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Sincronizzazione completata con successo. SERVER PCB TEST! "
|
|
||||||
else
|
|
||||||
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
|
||||||
fi
|
|
||||||
|
|
||||||
82
deploynode_pcb_prod.sh
Executable file
82
deploynode_pcb_prod.sh
Executable file
@@ -0,0 +1,82 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.prod.pcb
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso PCB PRODUZIONE ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg="*** SERVER DI PRODUZIONE PCB **** INVIARE GLI AGGIORNAMENTI ? (Y/N)"
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso PCB PRODUZIONE ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="pcbuser"
|
||||||
|
REMOTE_HOST="pcb"
|
||||||
|
REMOTE_PORT="8822"
|
||||||
|
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
|
||||||
|
CONFIG_JS="ecosystem.config.pcb_prod.js"
|
||||||
|
ENV_FILE=".env.prod.pcb"
|
||||||
|
ENV_OUT=".env.production"
|
||||||
|
|
||||||
|
# Array di cartelle e file da sincronizzare
|
||||||
|
SYNC_ITEMS=(
|
||||||
|
"css"
|
||||||
|
"docs"
|
||||||
|
"emails"
|
||||||
|
"plugins"
|
||||||
|
"admin_scripts"
|
||||||
|
"sass"
|
||||||
|
"src"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo $REMOTE_DIR
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia Cartelle ... "
|
||||||
|
|
||||||
|
|
||||||
|
# Esegui rsync per le cartelle
|
||||||
|
rsync -avz --delete \
|
||||||
|
--exclude='src/server/router/upload/' \
|
||||||
|
-e "ssh $SSH_OPTIONS" \
|
||||||
|
"${SYNC_ITEMS[@]}" \
|
||||||
|
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file .env.production ... "
|
||||||
|
|
||||||
|
# Sincronizza i file specifici
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
$ENV_FILE "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$ENV_OUT"
|
||||||
|
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file package.json ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file $CONFIG_JS in ecosystem.config.js ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
$CONFIG_JS "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
||||||
|
|
||||||
|
# Verifica il risultato
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Sincronizzazione completata con successo. SERVER PCB PRODUZIONE! "
|
||||||
|
else
|
||||||
|
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
82
deploynode_pcb_test.sh
Executable file
82
deploynode_pcb_test.sh
Executable file
@@ -0,0 +1,82 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.test.pcb
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso PCB TEST ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg="*** SERVER DI TEST PCB **** INVIARE GLI AGGIORNAMENTI ? (Y/N)"
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso PCB TEST ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="pcbuser"
|
||||||
|
REMOTE_HOST="pcb"
|
||||||
|
REMOTE_PORT="8822"
|
||||||
|
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
|
||||||
|
CONFIG_JS="ecosystem.config.pcb_test.js"
|
||||||
|
ENV_FILE=".env.test.pcb"
|
||||||
|
ENV_OUT=".env.test"
|
||||||
|
|
||||||
|
# Array di cartelle e file da sincronizzare
|
||||||
|
SYNC_ITEMS=(
|
||||||
|
"css"
|
||||||
|
"docs"
|
||||||
|
"emails"
|
||||||
|
"plugins"
|
||||||
|
"admin_scripts"
|
||||||
|
"sass"
|
||||||
|
"src"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo $REMOTE_DIR
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia Cartelle ... "
|
||||||
|
|
||||||
|
|
||||||
|
# Esegui rsync per le cartelle
|
||||||
|
rsync -avz --delete \
|
||||||
|
--exclude='src/server/router/upload/' \
|
||||||
|
-e "ssh $SSH_OPTIONS" \
|
||||||
|
"${SYNC_ITEMS[@]}" \
|
||||||
|
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file .env.test ... "
|
||||||
|
|
||||||
|
# Sincronizza i file specifici
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
$ENV_FILE "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$ENV_OUT"
|
||||||
|
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file package.json ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file $CONFIG_JS in ecosystem.config.js ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
$CONFIG_JS "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
||||||
|
|
||||||
|
# Verifica il risultato
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Sincronizzazione completata con successo. SERVER PCB TEST! "
|
||||||
|
else
|
||||||
|
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
77
deploynode_riso_prod.sh
Executable file
77
deploynode_riso_prod.sh
Executable file
@@ -0,0 +1,77 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.prod.riso
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg="*** SERVER DI ### PRODUZIONE ### RISO **** INVIARE GLI AGGIORNAMENTI ? (Y/N)"
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="pcbuser"
|
||||||
|
REMOTE_HOST="pcb"
|
||||||
|
REMOTE_PORT="8822"
|
||||||
|
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
CONFIG_JS="ecosystem.config.riso_prod.js"
|
||||||
|
ENV_FILE=".env.prod.riso"
|
||||||
|
ENV_OUT=".env.production"
|
||||||
|
|
||||||
|
# Array di cartelle e file da sincronizzare
|
||||||
|
SYNC_ITEMS=(
|
||||||
|
"css"
|
||||||
|
"docs"
|
||||||
|
"emails"
|
||||||
|
"plugins"
|
||||||
|
"sass"
|
||||||
|
"admin_scripts"
|
||||||
|
"src"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo $REMOTE_DIR
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia Cartelle ... "
|
||||||
|
|
||||||
|
|
||||||
|
# Esegui rsync per le cartelle
|
||||||
|
rsync -avz --delete \
|
||||||
|
--exclude='src/server/router/upload/' \
|
||||||
|
-e "ssh $SSH_OPTIONS" \
|
||||||
|
"${SYNC_ITEMS[@]}" \
|
||||||
|
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file $ENV_FILE su $ENV_OUT ... "
|
||||||
|
|
||||||
|
# Sincronizza i file specifici
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
$ENV_FILE "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$ENV_OUT"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file package.json ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file ecosystem.config.js ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
"$CONFIG_JS" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
||||||
|
|
||||||
|
# Verifica il risultato
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "✅ Sincronizzazione completata con successo. SERVER $REMOTE_DIR! "
|
||||||
|
else
|
||||||
|
echo "❌ Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
86
deploynode_riso_test.sh
Executable file
86
deploynode_riso_test.sh
Executable file
@@ -0,0 +1,86 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ./.env.test.risosrv
|
||||||
|
|
||||||
|
echo "Sincronizzazione in corso ... $DIRECTORY_SERVER/"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
msg="*** SERVER DI ### TEST ### RISO **** INVIARE GLI AGGIORNAMENTI ? (Y/N)"
|
||||||
|
|
||||||
|
if [ "$1" = "" ]; then
|
||||||
|
read -p "$msg" risposta
|
||||||
|
else
|
||||||
|
echo $msg
|
||||||
|
risposta=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
||||||
|
|
||||||
|
# Configurazione
|
||||||
|
REMOTE_USER="pcbuser"
|
||||||
|
REMOTE_HOST="pcb"
|
||||||
|
REMOTE_PORT="8822"
|
||||||
|
REMOTE_DIR="$DIRECTORY_SERVER"
|
||||||
|
SSH_OPTIONS="-p $REMOTE_PORT"
|
||||||
|
CONFIG_JS="ecosystem.config.riso_test.js"
|
||||||
|
ENV_FILE=".env.test.risosrv"
|
||||||
|
ENV_OUT=".env.test"
|
||||||
|
|
||||||
|
#ENV_FILE=".env.prod.pcb"
|
||||||
|
#ENV_OUT=".env.production"
|
||||||
|
|
||||||
|
# Array di cartelle e file da sincronizzare
|
||||||
|
SYNC_ITEMS=(
|
||||||
|
"css"
|
||||||
|
"docs"
|
||||||
|
"emails"
|
||||||
|
"plugins"
|
||||||
|
"sass"
|
||||||
|
"admin_scripts"
|
||||||
|
"src"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo $REMOTE_DIR
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia Cartelle ... "
|
||||||
|
|
||||||
|
|
||||||
|
# Esegui rsync per le cartelle
|
||||||
|
rsync -avz --delete \
|
||||||
|
--exclude='src/server/router/upload/' \
|
||||||
|
-e "ssh $SSH_OPTIONS" \
|
||||||
|
"${SYNC_ITEMS[@]}" \
|
||||||
|
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file $ENV_FILE su $ENV_OUT ... "
|
||||||
|
|
||||||
|
# Sincronizza i file specifici
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
$ENV_FILE "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$ENV_OUT"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file package.json ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file ecosystem.config.js ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
"$CONFIG_JS" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "*** Copia del file $CONFIG_JS in ecosystem.config.js ... "
|
||||||
|
rsync -avz -e "ssh $SSH_OPTIONS" \
|
||||||
|
$CONFIG_JS "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
||||||
|
|
||||||
|
|
||||||
|
# Verifica il risultato
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Sincronizzazione completata con successo. SERVER $REMOTE_DIR! "
|
||||||
|
else
|
||||||
|
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.prod.riso
|
|
||||||
|
|
||||||
echo "Sincronizzazione in corso ... $DIRECTORY_SERVER/"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Configurazione
|
|
||||||
REMOTE_USER="pcbuser"
|
|
||||||
REMOTE_HOST="pcb"
|
|
||||||
REMOTE_PORT="8822"
|
|
||||||
REMOTE_DIR="$DIRECTORY_SERVER"
|
|
||||||
SSH_OPTIONS="-p $REMOTE_PORT"
|
|
||||||
CONFIG_JS="ecosystem.config.prod_riso.js"
|
|
||||||
ENV_FILE=".env.prod.riso"
|
|
||||||
ENV_OUT=".env.production"
|
|
||||||
|
|
||||||
#ENV_FILE=".env.prod.pcb"
|
|
||||||
#ENV_OUT=".env.production"
|
|
||||||
|
|
||||||
# Array di cartelle e file da sincronizzare
|
|
||||||
SYNC_ITEMS=(
|
|
||||||
"css"
|
|
||||||
"docs"
|
|
||||||
"emails"
|
|
||||||
"plugins"
|
|
||||||
"sass"
|
|
||||||
"admin_scripts"
|
|
||||||
"src"
|
|
||||||
)
|
|
||||||
|
|
||||||
echo $REMOTE_DIR
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia Cartelle ... "
|
|
||||||
|
|
||||||
|
|
||||||
# Esegui rsync per le cartelle
|
|
||||||
rsync -avz --delete \
|
|
||||||
--exclude='src/server/router/upload/' \
|
|
||||||
-e "ssh $SSH_OPTIONS" \
|
|
||||||
"${SYNC_ITEMS[@]}" \
|
|
||||||
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file $ENV_FILE su $ENV_OUT ... "
|
|
||||||
|
|
||||||
# Sincronizza i file specifici
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
$ENV_FILE "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$ENV_OUT"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file package.json ... "
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file ecosystem.config.js ... "
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
"$CONFIG_JS" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
|
||||||
|
|
||||||
# Verifica il risultato
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "✅ Sincronizzazione completata con successo. SERVER $REMOTE_DIR! "
|
|
||||||
else
|
|
||||||
echo "❌ Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.test2
|
|
||||||
|
|
||||||
echo "Directory attuale: $PWD"
|
|
||||||
|
|
||||||
msg="*** SERVER DI TEST2 **** SEI SICURO DI INVIARE GLI AGGIORNAMENTI SERVERSIDE (NODE JS) - SUL SERVER $SERVERDIR_WEBSITE (Y/N) ? "
|
|
||||||
|
|
||||||
if [ "$1" = "" ]; then
|
|
||||||
read -p "$msg" risposta
|
|
||||||
else
|
|
||||||
echo $msg
|
|
||||||
risposta=$1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [[ $risposta == "Y" || $risposta == "y" ]]; then
|
|
||||||
|
|
||||||
echo "Sincronizzazione in corso... $SERVERDIR_WEBSITE"
|
|
||||||
echo "Copiando .env.test2..."
|
|
||||||
rsync -avz -e 'ssh -p 8855' .env.test2 suryapaolo@servereng:$SERVERDIR_WEBSITE/.env.test
|
|
||||||
echo "Sincronizzazione in corso... src"
|
|
||||||
rsync -avz -e 'ssh -p 8855' -a --exclude 'src/router/upload' src suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' package.json suryapaolo@servereng:$SERVERDIR_WEBSITE/package.json
|
|
||||||
rsync -avz -e 'ssh -p 8855' css suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' docs suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' emails suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' images suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' plugins suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
rsync -avz -e 'ssh -p 8855' sass suryapaolo@servereng:$SERVERDIR_WEBSITE/
|
|
||||||
|
|
||||||
echo "Sincronizzazione TERMINATA! - SERVER TEST2!"
|
|
||||||
fi
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source ./.env.test.risosrv
|
|
||||||
|
|
||||||
echo "Sincronizzazione in corso ... $DIRECTORY_SERVER/"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Configurazione
|
|
||||||
REMOTE_USER="pcbuser"
|
|
||||||
REMOTE_HOST="pcb"
|
|
||||||
REMOTE_PORT="8822"
|
|
||||||
REMOTE_DIR="$DIRECTORY_SERVER"
|
|
||||||
SSH_OPTIONS="-p $REMOTE_PORT"
|
|
||||||
CONFIG_JS="ecosystem.config.testriso.js"
|
|
||||||
ENV_FILE=".env.test.risosrv"
|
|
||||||
ENV_OUT=".env.test"
|
|
||||||
|
|
||||||
#ENV_FILE=".env.prod.pcb"
|
|
||||||
#ENV_OUT=".env.production"
|
|
||||||
|
|
||||||
# Array di cartelle e file da sincronizzare
|
|
||||||
SYNC_ITEMS=(
|
|
||||||
"css"
|
|
||||||
"docs"
|
|
||||||
"emails"
|
|
||||||
"plugins"
|
|
||||||
"sass"
|
|
||||||
"admin_scripts"
|
|
||||||
"src"
|
|
||||||
)
|
|
||||||
|
|
||||||
echo $REMOTE_DIR
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia Cartelle ... "
|
|
||||||
|
|
||||||
|
|
||||||
# Esegui rsync per le cartelle
|
|
||||||
rsync -avz --delete \
|
|
||||||
--exclude='src/server/router/upload/' \
|
|
||||||
-e "ssh $SSH_OPTIONS" \
|
|
||||||
"${SYNC_ITEMS[@]}" \
|
|
||||||
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file $ENV_FILE su $ENV_OUT ... "
|
|
||||||
|
|
||||||
# Sincronizza i file specifici
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
$ENV_FILE "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$ENV_OUT"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file package.json ... "
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
package.json "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/package.json"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "*** Copia del file ecosystem.config.js ... "
|
|
||||||
rsync -avz -e "ssh $SSH_OPTIONS" \
|
|
||||||
"$CONFIG_JS" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ecosystem.config.js"
|
|
||||||
|
|
||||||
# Verifica il risultato
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Sincronizzazione completata con successo. SERVER $REMOTE_DIR! "
|
|
||||||
else
|
|
||||||
echo "Errore durante la sincronizzazione. Controlla l'output per i dettagli."
|
|
||||||
fi
|
|
||||||
|
|
||||||
38
docs/aaa.json
Normal file
38
docs/aaa.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"id": "70606",
|
||||||
|
"title": "Grande Libro dell'Autosufficienza - 50 anni - Nuovo",
|
||||||
|
"description": "<em><strong>\"Il Grande Libro dell\u2019Autosufficienza\"<\/strong><\/em> di John Seymour \u00e8 un manuale completo che celebra 50 anni di pratiche di <strong>autosufficienza<\/strong> e <strong>sostenibilit\u00e0<\/strong>. Il libro offre insegnamenti pratici su come creare e gestire un <strong>orto biologico<\/strong>, raccogliere e conservare i raccolti, produrre <strong>energia rinnovabile<\/strong>, allevare animali e ridurre i rifiuti. Seymour ci guida passo passo in un viaggio verso una vita in armonia con la natura, promuovendo l\u2019indipendenza e la sostenibilit\u00e0. Un testo imprescindibile per chi desidera riscoprire le tradizioni agricole e applicarle per vivere in modo pi\u00f9 <strong>sostenibile<\/strong> e <strong>autonomo<\/strong>.\r\n<h2><strong>Con questo libro scoprirai<\/strong>:<\/h2>\r\n<ul>\r\n \t<li>Come <strong>coltivare un orto biologico<\/strong> e ottenere cibo sano.<\/li>\r\n \t<li>Le tecniche per <strong>conservare il raccolto<\/strong> e ottimizzare le risorse naturali.<\/li>\r\n \t<li>Come allevare animali per ottenere cibo e altri prodotti.<\/li>\r\n \t<li>Come produrre <strong>energia rinnovabile<\/strong> e ridurre l\u2019impatto ambientale.<\/li>\r\n \t<li>L\u2019arte di <strong>ridurre e riciclare<\/strong> rifiuti, promuovendo uno stile di vita pi\u00f9 sostenibile.<\/li>\r\n<\/ul>\r\n<h2><strong>Domande cruciali a cui <em>\"Il Grande Libro dell\u2019Autosufficienza\"<\/em> risponde<\/strong>:<\/h2>\r\n<ul>\r\n \t<li>Come posso vivere in modo <strong>autosufficiente<\/strong> e ridurre la mia dipendenza dalle risorse esterne?<\/li>\r\n \t<li>Quali sono le migliori tecniche per <strong>coltivare un orto biologico<\/strong> e garantire un raccolto abbondante?<\/li>\r\n \t<li>Come posso <strong>conservare il raccolto<\/strong> in modo naturale e duraturo?<\/li>\r\n \t<li>In che modo posso <strong>produrre energia rinnovabile<\/strong> a casa mia?<\/li>\r\n \t<li>Come posso vivere in <strong>armonia con la natura<\/strong> e promuovere la <strong>sostenibilit\u00e0<\/strong>?<\/li>\r\n<\/ul>\r\n<h2><strong>Questo libro \u00e8 dedicato a<\/strong>:<\/h2>\r\n<ul>\r\n \t<li>Lettori appassionati di <strong>giardinaggio<\/strong>, <strong>agricoltura biologica<\/strong> e vita rurale.<\/li>\r\n \t<li>Chiunque desideri adottare uno <strong>stile di vita sostenibile<\/strong> e autosufficiente.<\/li>\r\n \t<li><strong>Famiglie eco-consapevoli<\/strong> che vogliono ridurre il proprio impatto ambientale.<\/li>\r\n \t<li><strong>Amanti della natura<\/strong> e sostenitori delle <strong>energie rinnovabili<\/strong>.<\/li>\r\n<\/ul>\r\n<h2><strong>Contenuti chiave <em>\"Il Grande Libro dell\u2019Autosufficienza\"<\/em><\/strong>:<\/h2>\r\n<em>Il Grande Libro dell\u2019Autosufficienza<\/em> offre una panoramica completa di tutte le tecniche per vivere in modo <strong>autonomo<\/strong> e <strong>sostenibile<\/strong>. Attraverso 10 capitoli, il libro esplora vari aspetti dell\u2019autosufficienza, dalla coltivazione di ortaggi e frutti alla produzione di cibo dagli animali, fino alla gestione dell'energia e dei rifiuti. La guida si focalizza sul valore delle <strong>tradizioni agricole<\/strong>, sulla cura dell\u2019ambiente e sul benessere che deriva dal vivere in sintonia con la natura.\r\n\r\n ",
|
||||||
|
"link": "https:\/\/www.fioredellavita.it\/grande-libro-dellautosufficienza-50-anni\/?attribute_pa_versione=nuovo",
|
||||||
|
"image_link": "https:\/\/www.fioredellavita.it\/wp-content\/uploads\/2024\/09\/il-grande-libro-dell-autosufficienza-speciale-50-anni-copertina-web.jpg",
|
||||||
|
"price": "39,00",
|
||||||
|
"sale_price": "37,05",
|
||||||
|
"categories": "Informazione Libera",
|
||||||
|
"isbn": "",
|
||||||
|
"Autore": "John,Seymour",
|
||||||
|
"Editore": "Macro Edizioni",
|
||||||
|
"Tipologia": "Libri",
|
||||||
|
"Collezione": "Libri Informazione Libera,Informazione Libera",
|
||||||
|
"Quantita": "1821",
|
||||||
|
"Lunghezza": "",
|
||||||
|
"Stato": "publish",
|
||||||
|
"Pagine": "",
|
||||||
|
"Edizione": "",
|
||||||
|
"Traduzione": "",
|
||||||
|
"Versione": "Nuovo",
|
||||||
|
"StockStatus": "instock",
|
||||||
|
"downloadable": "no",
|
||||||
|
"img1": "https:\/\/www.fioredellavita.it\/wp-content\/uploads\/2024\/09\/quarta_nuovo_grande_libro_dell_autosufficienza_2024_17038.jpg",
|
||||||
|
"img2": "",
|
||||||
|
"img3": "",
|
||||||
|
"formato": "Cartonato",
|
||||||
|
"preOrderDate": "2025-02-25",
|
||||||
|
"short_descr": null,
|
||||||
|
"availability": "in stock",
|
||||||
|
"checkout_link": "https:\/\/www.fioredellavita.it\/carrello\/?productId=70606",
|
||||||
|
"seo_descr": "Versione: Nuovo",
|
||||||
|
"preord": "no",
|
||||||
|
"addtocart_link": "https:\/\/www.fioredellavita.it\/grande-libro-dellautosufficienza-50-anni\/?attribute_pa_versione=nuovo&variation_id=70606&add-to-cart=70606",
|
||||||
|
"eta": "",
|
||||||
|
"misure": "cm 22x28",
|
||||||
|
"sku": "22464"
|
||||||
|
},
|
||||||
@@ -1,839 +0,0 @@
|
|||||||
require('./config/config');
|
|
||||||
require('./config/config');
|
|
||||||
|
|
||||||
// console.log(" lodash");
|
|
||||||
|
|
||||||
console.log(process.versions);
|
|
||||||
|
|
||||||
const _ = require('lodash');
|
|
||||||
// console.log(" cors");
|
|
||||||
const cors = require('cors');
|
|
||||||
|
|
||||||
// console.log(" 2) fs");
|
|
||||||
const fs = require('fs');
|
|
||||||
|
|
||||||
var https = require('https');
|
|
||||||
|
|
||||||
const NUOVO_METODO_TEST = true;
|
|
||||||
|
|
||||||
const server_constants = require('./tools/server_constants');
|
|
||||||
|
|
||||||
//const throttle = require('express-throttle-bandwidth');
|
|
||||||
// app.use(throttle(1024 * 128)) // throttling bandwidth
|
|
||||||
|
|
||||||
const port = process.env.PORT;
|
|
||||||
|
|
||||||
// var cookieParser = require('cookie-parser')
|
|
||||||
// var csrf = require('csurf')
|
|
||||||
const express = require('express');
|
|
||||||
const bodyParser = require('body-parser');
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const cron = require('node-cron');
|
|
||||||
console.log('Starting mongoose...');
|
|
||||||
|
|
||||||
const tls = require('tls');
|
|
||||||
|
|
||||||
require('./db/mongoose');
|
|
||||||
|
|
||||||
// console.log('Starting pem...');
|
|
||||||
|
|
||||||
// const pem = require('pem')
|
|
||||||
|
|
||||||
const { Settings } = require('./models/settings');
|
|
||||||
|
|
||||||
const Site = require('./models/site');
|
|
||||||
|
|
||||||
// test
|
|
||||||
|
|
||||||
const i18n = require('i18n');
|
|
||||||
|
|
||||||
let credentials = null;
|
|
||||||
|
|
||||||
// OBTAIN
|
|
||||||
// https://www.psclistens.com/insight/blog/enabling-a-nodejs-ssl-webserver-using-let-s-encrypt-pem-certificates/
|
|
||||||
|
|
||||||
|
|
||||||
if ((process.env.NODE_ENV === 'production')) {
|
|
||||||
console.log('*** AMBIENTE DI PRODUZIONE (Aprile 2024) !!!!')
|
|
||||||
} else if (process.env.NODE_ENV === 'test') {
|
|
||||||
console.log('*** ### AMBIENTE DI TEST ')
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
console.log('DB: ' + process.env.DATABASE);
|
|
||||||
// console.log("PORT: " + port);
|
|
||||||
// console.log("MONGODB_URI: " + process.env.MONGODB_URI);
|
|
||||||
|
|
||||||
var app = express();
|
|
||||||
|
|
||||||
|
|
||||||
let telegrambot = null;
|
|
||||||
|
|
||||||
const tools = require('./tools/general');
|
|
||||||
|
|
||||||
const shared_consts = require('./tools/shared_nodejs');
|
|
||||||
|
|
||||||
var mongoose = require('mongoose').set('debug', false);
|
|
||||||
|
|
||||||
mongoose.set('debug', false);
|
|
||||||
|
|
||||||
const { CfgServer } = require('./models/cfgserver');
|
|
||||||
const { ObjectId } = require('mongodb');
|
|
||||||
|
|
||||||
const populate = require('./populate/populate');
|
|
||||||
const { Circuit } = require('./models/circuit');
|
|
||||||
|
|
||||||
const printf = require('util').format;
|
|
||||||
|
|
||||||
myLoad().then(ris => {
|
|
||||||
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
require('./models/todo');
|
|
||||||
require('./models/project');
|
|
||||||
require('./models/subscribers');
|
|
||||||
require('./models/booking');
|
|
||||||
require('./models/sendmsg');
|
|
||||||
require('./models/sendnotif');
|
|
||||||
require('./models/mailinglist');
|
|
||||||
require('./models/newstosent');
|
|
||||||
require('./models/mypage');
|
|
||||||
require('./models/myelem');
|
|
||||||
require('./models/bot');
|
|
||||||
require('./models/calzoom');
|
|
||||||
const mysql_func = require('./mysql/mysql_func');
|
|
||||||
|
|
||||||
const index_router = require('./router/index_router');
|
|
||||||
const push_router = require('./router/push_router');
|
|
||||||
const newsletter_router = require('./router/newsletter_router');
|
|
||||||
const booking_router = require('./router/booking_router');
|
|
||||||
const dashboard_router = require('./router/dashboard_router');
|
|
||||||
const myevent_router = require('./router/myevent_router');
|
|
||||||
const subscribe_router = require('./router/subscribe_router');
|
|
||||||
const sendmsg_router = require('./router/sendmsg_router');
|
|
||||||
const sendnotif_router = require('./router/sendnotif_router');
|
|
||||||
const email_router = require('./router/email_router');
|
|
||||||
const todos_router = require('./router/todos_router');
|
|
||||||
const test_router = require('./router/test_router');
|
|
||||||
const projects_router = require('./router/projects_router');
|
|
||||||
const report_router = require('./router/report_router');
|
|
||||||
const users_router = require('./router/users_router');
|
|
||||||
const reactions_router = require('./router/reactions_router');
|
|
||||||
const mygroups_router = require('./router/mygroups_router');
|
|
||||||
const circuits_router = require('./router/circuits_router');
|
|
||||||
const accounts_router = require('./router/accounts_router');
|
|
||||||
const iscrittiConacreis_router = require('./router/iscrittiConacreis_router');
|
|
||||||
const iscrittiArcadei_router = require('./router/iscrittiArcadei_router');
|
|
||||||
const site_router = require('./router/site_router');
|
|
||||||
const admin_router = require('./router/admin_router');
|
|
||||||
const products_router = require('./router/products_router');
|
|
||||||
const cart_router = require('./router/cart_router');
|
|
||||||
const orders_router = require('./router/orders_router');
|
|
||||||
const city_router = require('./router/city_router');
|
|
||||||
const myskills_router = require('./router/myskills_router');
|
|
||||||
const mygoods_router = require('./router/mygoods_router');
|
|
||||||
const mygen_router = require('./router/mygen_router');
|
|
||||||
const aitools_router = require('./router/aitools_router');
|
|
||||||
|
|
||||||
const { MyEvent } = require('./models/myevent');
|
|
||||||
|
|
||||||
app.use(bodyParser.json({ limit: '50mb' }));
|
|
||||||
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
|
|
||||||
|
|
||||||
app.use(express.static('views'));
|
|
||||||
|
|
||||||
// app.use(express.static(path.join(__dirname, 'client')));
|
|
||||||
|
|
||||||
app.use(bodyParser.json());
|
|
||||||
|
|
||||||
// app.set('view engine', 'pug');
|
|
||||||
|
|
||||||
// Set static folder
|
|
||||||
// app.use(express.static(path.join(__dirname, 'public')));
|
|
||||||
|
|
||||||
i18n.configure({
|
|
||||||
locales: ['it', 'enUs', 'es', 'fr', 'pt', 'si'],
|
|
||||||
defaultLocale: 'it',
|
|
||||||
// cookie: 'cook',
|
|
||||||
directory: __dirname + '/locales',
|
|
||||||
api: {
|
|
||||||
'__': 'translate',
|
|
||||||
'__n': 'translateN'
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
app.use(cors({
|
|
||||||
exposedHeaders: ['x-auth', 'x-refrtok'],
|
|
||||||
}));
|
|
||||||
|
|
||||||
app.use(bodyParser.json());
|
|
||||||
|
|
||||||
// app.use(express.cookieParser());
|
|
||||||
app.use(i18n.init);
|
|
||||||
|
|
||||||
console.log('Use Routes \...');
|
|
||||||
|
|
||||||
|
|
||||||
// Use Routes
|
|
||||||
app.use('/', index_router);
|
|
||||||
app.use('/subscribe', subscribe_router);
|
|
||||||
app.use('/sendmsg', sendmsg_router);
|
|
||||||
app.use('/sendnotif', sendnotif_router);
|
|
||||||
app.use('/push', push_router);
|
|
||||||
app.use('/news', newsletter_router);
|
|
||||||
app.use('/booking', booking_router);
|
|
||||||
app.use('/dashboard', dashboard_router);
|
|
||||||
app.use('/event', myevent_router);
|
|
||||||
app.use('/email', email_router);
|
|
||||||
app.use('/todos', todos_router);
|
|
||||||
app.use('/test', test_router);
|
|
||||||
app.use('/projects', projects_router);
|
|
||||||
app.use('/users', users_router);
|
|
||||||
app.use('/reactions', reactions_router);
|
|
||||||
app.use('/mygroup', mygroups_router);
|
|
||||||
app.use('/circuit', circuits_router);
|
|
||||||
app.use('/account', accounts_router);
|
|
||||||
app.use('/iscritti_conacreis', iscrittiConacreis_router);
|
|
||||||
app.use('/iscritti_arcadei', iscrittiArcadei_router);
|
|
||||||
app.use('/report', report_router);
|
|
||||||
app.use('/site', site_router);
|
|
||||||
app.use('/admin', admin_router);
|
|
||||||
app.use('/products', products_router);
|
|
||||||
app.use('/cart', cart_router);
|
|
||||||
app.use('/orders', orders_router);
|
|
||||||
app.use('/city', city_router);
|
|
||||||
app.use('/myskills', myskills_router);
|
|
||||||
app.use('/mygoods', mygoods_router);
|
|
||||||
app.use('/mygen', mygen_router);
|
|
||||||
app.use('/aitools', aitools_router);
|
|
||||||
|
|
||||||
// catch 404 and forward to error handler
|
|
||||||
// app.use(function (req, res, next) {
|
|
||||||
// var err = new Error('Not Found');
|
|
||||||
// err.status = 404;
|
|
||||||
// next(err);
|
|
||||||
// });
|
|
||||||
|
|
||||||
// app.set('views', path.join(__dirname, 'views'));
|
|
||||||
// app.set('view engine', 'pug');
|
|
||||||
|
|
||||||
// development error handler
|
|
||||||
// will print stacktrace
|
|
||||||
if (app.get('env') === 'development') {
|
|
||||||
|
|
||||||
app.use(function (err, req, res, next) {
|
|
||||||
console.log('Server Error: ', err.message);
|
|
||||||
// console.trace();
|
|
||||||
res.status(err.status || 500).send({ error: err.message });
|
|
||||||
// res.render('error', {
|
|
||||||
// message: err.message,
|
|
||||||
// error: err
|
|
||||||
// });
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// require('./telegram/telegrambot');
|
|
||||||
|
|
||||||
// *** DB CONNECTIONS ***
|
|
||||||
// mysql_func.mySqlConn_Shen.connect((err) => {
|
|
||||||
// if (!err)
|
|
||||||
// console.log('DB connection to Shen Database succeded.');
|
|
||||||
// else
|
|
||||||
// console.log('DB connection to Shen Database FAILED \n Error: ' + JSON.stringify(err, undefined, 2));
|
|
||||||
// });
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'production') {
|
|
||||||
console.log('*** PRODUCTION! ');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((process.env.NODE_ENV === 'production') ||
|
|
||||||
(process.env.NODE_ENV === 'test')) {
|
|
||||||
|
|
||||||
const keyStream = path.resolve(`./${process.env.PATH_CERT_KEY}`);
|
|
||||||
const certificateStream = path.resolve(`./${process.env.PATH_SERVER_CRT}`);
|
|
||||||
|
|
||||||
let privateKey = fs.readFileSync(keyStream, "utf8");
|
|
||||||
let certificate = fs.readFileSync(certificateStream, "utf8");
|
|
||||||
|
|
||||||
let credentials = null;
|
|
||||||
|
|
||||||
|
|
||||||
// arrSecureContext = ['piuchebuono.app', 'gruppomacro.app'];
|
|
||||||
arrSecureContext = ['freeplanet.app', 'riso.app', 'comunitanuovomondo.app'];
|
|
||||||
|
|
||||||
let secureContext = {};
|
|
||||||
|
|
||||||
for (let i = 0; i < arrSecureContext.length; i++) {
|
|
||||||
try {
|
|
||||||
secureContext = {
|
|
||||||
...secureContext,
|
|
||||||
[arrSecureContext[i]]: tls.createSecureContext({
|
|
||||||
key: fs.readFileSync('/etc/letsencrypt/live/' + arrSecureContext[i] + '/privkey.pem'),
|
|
||||||
cert: fs.readFileSync('/etc/letsencrypt/live/' + arrSecureContext[i] + '/fullchain.pem')
|
|
||||||
// ca: fs.readFileSync('../path_to_certificate_authority_bundle.ca-bundle1', 'utf8'), // this ca property is optional
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
credentials = {
|
|
||||||
SNICallback: function (domain, cb) {
|
|
||||||
if (secureContext) {
|
|
||||||
if (cb) {
|
|
||||||
cb(null, secureContext);
|
|
||||||
} else {
|
|
||||||
// compatibility for older versions of node
|
|
||||||
return secureContext;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
console.log('Error: ' + err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
let secureContext = {
|
|
||||||
'piuchebuono.app': tls.createSecureContext({
|
|
||||||
key: fs.readFileSync('/etc/letsencrypt/live/piuchebuono.app/privkey.pem'),
|
|
||||||
cert: fs.readFileSync('/etc/letsencrypt/live/piuchebuono.app/fullchain.pem')
|
|
||||||
// ca: fs.readFileSync('../path_to_certificate_authority_bundle.ca-bundle1', 'utf8'), // this ca property is optional
|
|
||||||
}),
|
|
||||||
'gruppomacro.app': tls.createSecureContext({
|
|
||||||
key: fs.readFileSync('/etc/letsencrypt/live/gruppomacro.app/privkey.pem'),
|
|
||||||
cert: fs.readFileSync('/etc/letsencrypt/live/gruppomacro.app/fullchain.pem')
|
|
||||||
// ca: fs.readFileSync('../path_to_certificate_authority_bundle.ca-bundle1', 'utf8'), // this ca property is optional
|
|
||||||
}),
|
|
||||||
}*/
|
|
||||||
|
|
||||||
console.log('secureContext', secureContext);
|
|
||||||
|
|
||||||
if (NUOVO_METODO_TEST) {
|
|
||||||
credentials = {
|
|
||||||
SNICallback: function (domain, cb) {
|
|
||||||
if (secureContext[domain]) {
|
|
||||||
if (cb) {
|
|
||||||
cb(null, secureContext[domain]);
|
|
||||||
} else {
|
|
||||||
// compatibility for older versions of node
|
|
||||||
return secureContext[domain];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new Error('No keys/certificates for domain requested');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// must list a default key and cert because required by tls.createServer()
|
|
||||||
key: privateKey,
|
|
||||||
cert: certificate,
|
|
||||||
}
|
|
||||||
|
|
||||||
/*} else {
|
|
||||||
// NON USATO !
|
|
||||||
credentials = {
|
|
||||||
key: privateKey,
|
|
||||||
cert: certificate,
|
|
||||||
ca: [
|
|
||||||
fs.readFileSync(process.env.PATH_SSL_ROOT_PEM, 'utf8'),
|
|
||||||
fs.readFileSync(process.env.PATH_SSL_CHAIN_PEM, 'utf8'),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/*} else {
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.env.HTTPS_LOCALHOST === "true") {
|
|
||||||
privateKey = fs.readFileSync(process.env.PATH_CERT_KEY, 'utf8');
|
|
||||||
certificate = fs.readFileSync(process.env.PATH_SERVER_CRT, 'utf8');
|
|
||||||
credentials = {
|
|
||||||
key: privateKey,
|
|
||||||
cert: certificate,
|
|
||||||
ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384',
|
|
||||||
honorCipherOrder: true,
|
|
||||||
secureProtocol: 'TLSv1_2_method',
|
|
||||||
};
|
|
||||||
|
|
||||||
} else {
|
|
||||||
var http = require('http');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((process.env.NODE_ENV === 'production') ||
|
|
||||||
(process.env.NODE_ENV === 'test') || process.env.HTTPS_LOCALHOST === "true") {
|
|
||||||
|
|
||||||
const httpsServer = https.createServer(credentials, app);
|
|
||||||
|
|
||||||
console.log('httpsServer: port ', port);
|
|
||||||
httpsServer.listen(port);
|
|
||||||
} else {
|
|
||||||
console.log('httpServer: port ', port);
|
|
||||||
const httpServer = http.createServer(app);
|
|
||||||
httpServer.listen(port);
|
|
||||||
}
|
|
||||||
|
|
||||||
mystart();
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// app.use(throttle(1024 * 128)); // throttling bandwidth
|
|
||||||
|
|
||||||
// app.use((req, res, next) => {
|
|
||||||
// res.header('Access-Control-Allow-Origin', '*')
|
|
||||||
// res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept')
|
|
||||||
// next()
|
|
||||||
// });
|
|
||||||
|
|
||||||
async function myLoad() {
|
|
||||||
|
|
||||||
return tools.loadApps();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mystart() {
|
|
||||||
|
|
||||||
// await estraiTutteLeImmagini();
|
|
||||||
|
|
||||||
await tools.getApps();
|
|
||||||
|
|
||||||
if (process.env.PROD !== 1) {
|
|
||||||
|
|
||||||
testmsgwebpush();
|
|
||||||
|
|
||||||
// tools.sendNotifToAdmin('Riparti', 'Riparti');
|
|
||||||
|
|
||||||
let miapass = '';
|
|
||||||
|
|
||||||
if (miapass !== '') {
|
|
||||||
let crypt = tools.cryptdata(miapass);
|
|
||||||
let decrypt = tools.decryptdata(crypt);
|
|
||||||
|
|
||||||
console.log('crypted:', crypt);
|
|
||||||
console.log('decrypted:', decrypt);
|
|
||||||
}
|
|
||||||
|
|
||||||
mycron();
|
|
||||||
if (!process.env.VITE_DEBUG) {
|
|
||||||
mycron();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
telegrambot = require('./telegram/telegrambot');
|
|
||||||
|
|
||||||
await inizia();
|
|
||||||
|
|
||||||
await resetProcessingJob();
|
|
||||||
|
|
||||||
populate.popolaTabelleNuove();
|
|
||||||
|
|
||||||
faitest();
|
|
||||||
|
|
||||||
// ----------------- MAILCHIMP -----
|
|
||||||
const querystring = require('querystring');
|
|
||||||
const mailchimpClientId = 'xxxxxxxxxxxxxxxx';
|
|
||||||
|
|
||||||
app.get('/mailchimp/auth/authorize', function (req, res) {
|
|
||||||
res.redirect('https://login.mailchimp.com/oauth2/authorize?' +
|
|
||||||
querystring.stringify({
|
|
||||||
'response_type': 'code',
|
|
||||||
'client_id': mailchimpClientId,
|
|
||||||
'redirect_uri': 'http://127.0.0.1:3000/mailchimp/auth/callback',
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------
|
|
||||||
|
|
||||||
function populateDBadmin() {
|
|
||||||
const cfgserv = [
|
|
||||||
{
|
|
||||||
_id: new ObjectId(),
|
|
||||||
idapp: '9',
|
|
||||||
chiave: 'vers',
|
|
||||||
userId: 'ALL',
|
|
||||||
valore: '0.1.2',
|
|
||||||
}];
|
|
||||||
|
|
||||||
let cfg = new CfgServer(cfgserv[0]).save();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mycron() {
|
|
||||||
|
|
||||||
try {
|
|
||||||
const sendemail = require('./sendemail');
|
|
||||||
|
|
||||||
const arr = await tools.getApps();
|
|
||||||
|
|
||||||
for (const app of arr) {
|
|
||||||
sendemail.checkifPendingNewsletter(app.idapp);
|
|
||||||
sendemail.checkifSentNewsletter(app.idapp);
|
|
||||||
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.error('Err mycron', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mycron_30min() {
|
|
||||||
for (const app of await tools.getApps()) {
|
|
||||||
let enablecrontab = false;
|
|
||||||
|
|
||||||
enablecrontab = await Settings.getValDbSettings(app.idapp,
|
|
||||||
tools.ENABLE_CRONTAB, false);
|
|
||||||
|
|
||||||
if (enablecrontab) {
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mycron_everyday() {
|
|
||||||
try {
|
|
||||||
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
const arrapps = await tools.getApps();
|
|
||||||
for (const app of arrapps) {
|
|
||||||
|
|
||||||
// Azzera le richieste di password:
|
|
||||||
const usersblocked = await User.find({ idapp: app.idapp, retry_pwd: { $exists: true, $gte: 29 } }).lean();
|
|
||||||
for (const user of usersblocked) {
|
|
||||||
await User.findOneAndUpdate({ _id: user._id }, { $set: { retry_pwd: 20 } });
|
|
||||||
let text = `⚠️⚠️⚠️ L\'utente ${user.username} (${user.name} ${user.surname}) viene sbloccato dal numero massimo di tentativi di richiesta password!\nTelerlo d\'occhio !\n@${user.profile.username_telegram}`;
|
|
||||||
await telegrambot.sendMsgTelegramToTheAdminAllSites(text, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crea un file con all'interno il nome del dominio per ogni app:
|
|
||||||
await tools.createFileWithDomainName();
|
|
||||||
|
|
||||||
} catch (e) {
|
|
||||||
console.error('mycron_everyday: ', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function testmsgwebpush() {
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
// console.log('nomeapp 1: ' , tools.getNomeAppByIdApp(1));
|
|
||||||
// console.log('nomeapp 2: ' , tools.getNomeAppByIdApp(2));
|
|
||||||
|
|
||||||
User.find({ username: 'paoloar77', idapp: '1' }).then(async (arrusers) => {
|
|
||||||
if (arrusers !== null) {
|
|
||||||
for (const user of arrusers) {
|
|
||||||
await tools.sendNotificationToUser(user._id, 'Server',
|
|
||||||
'Il Server è Ripartito', '/', '', 'server', []).then(ris => {
|
|
||||||
if (ris) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// already sent the error on calling sendNotificationToUser
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cron every X minutes
|
|
||||||
cron.schedule('*/1 * * * *', () => {
|
|
||||||
// console.log('Running Cron Job');
|
|
||||||
// if (!process.env.VITE_DEBUG) {
|
|
||||||
mycron();
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cron every X minutes
|
|
||||||
cron.schedule('*/60 * * * *', async () => {
|
|
||||||
if (!process.env.VITE_DEBUG) {
|
|
||||||
mycron_30min();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cron every 21:00 (1 volta al giorno)
|
|
||||||
cron.schedule('0 21 * * *', async () => {
|
|
||||||
mycron_everyday();
|
|
||||||
});
|
|
||||||
|
|
||||||
// mycron_30min();
|
|
||||||
|
|
||||||
// tools.writelogfile('test', 'prova.txt');
|
|
||||||
|
|
||||||
async function resetProcessingJob() {
|
|
||||||
|
|
||||||
const { Newstosent } = require('./models/newstosent');
|
|
||||||
|
|
||||||
arrrec = await Newstosent.find({});
|
|
||||||
|
|
||||||
for (const rec of arrrec) {
|
|
||||||
rec.processing_job = false;
|
|
||||||
await Newstosent.findOneAndUpdate({ _id: rec.id }, { $set: rec }, { new: false }).
|
|
||||||
then((item) => {
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//app.listen(port, () => {
|
|
||||||
// console.log(`Server started at port ${port}`);
|
|
||||||
//});
|
|
||||||
|
|
||||||
async function inizia() {
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (true) {
|
|
||||||
const url = 'https://raw.githubusercontent.com/matteocontrini/comuni-json/master/comuni.json';
|
|
||||||
const outputPath = './comuni_italia_geojson.json';
|
|
||||||
downloadGeoJSON(url, outputPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
mycron_everyday();
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') {
|
|
||||||
await telegrambot.sendMsgTelegram(tools.FREEPLANET,
|
|
||||||
shared_consts.ADMIN_USER_SERVER,
|
|
||||||
`Ciao ${telegrambot.ADMIN_USER_NAME_SERVER}!`);
|
|
||||||
|
|
||||||
await telegrambot.sendMsgTelegramByIdTelegram(tools.FREEPLANET,
|
|
||||||
telegrambot.ADMIN_IDTELEGRAM_SERVER,
|
|
||||||
`Ciao ${telegrambot.ADMIN_USER_NAME_SERVER}\n` +
|
|
||||||
`🔅 Il Server ${process.env.DATABASE} è appena ripartito!`);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
await telegrambot.sendMsgTelegramToTheAdminAllSites(`Ciao Admin\n` + `🔅🔅🔅 Il Server col BOT di {appname} è appena ripartito!`, false);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
await Site.createFirstUserAdmin();
|
|
||||||
|
|
||||||
/*const {Circuit} = require('./models/circuit');
|
|
||||||
|
|
||||||
await Circuit.setDeperimentoOff();
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} catch (e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
// telegrambot.sendMsgTelegramToTheManagers('7', 'PROVAAA!');
|
|
||||||
|
|
||||||
// if (process.env.PROD !== 1) {
|
|
||||||
// const reg = require('./reg/registration');
|
|
||||||
// const link = reg.getlinkregByEmail('7', 'tomasihelen@dasdasgmail.comAAAA' , 'HelenTomasidasdasd');
|
|
||||||
// const link2 = reg.getlinkregByEmail('7', 'tomasihelen@gmail.com' , 'HelenTomasi');
|
|
||||||
// //const link2 = reg.getlinkregByEmail('7', 'elenaliubicich@gmail.com' , 'Elenaliu');
|
|
||||||
//
|
|
||||||
// console.log(link);
|
|
||||||
// console.log(link2);
|
|
||||||
// }
|
|
||||||
|
|
||||||
async function estraiImmagini(table) {
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
let idapp = '13';
|
|
||||||
|
|
||||||
let arrlist;
|
|
||||||
|
|
||||||
const globalTables = require('./tools/globalTables');
|
|
||||||
|
|
||||||
|
|
||||||
const mytable = globalTables.getTableByTableName(table);
|
|
||||||
if (!mytable)
|
|
||||||
return;
|
|
||||||
|
|
||||||
console.log('INIZIO - estraiImmagini', table);
|
|
||||||
|
|
||||||
arrlist = await mytable.find({ idapp }).lean();
|
|
||||||
|
|
||||||
let file = '';
|
|
||||||
let filetocheck = '';
|
|
||||||
let dirmain = '';
|
|
||||||
let filefrom = '';
|
|
||||||
let filefrom2 = '';
|
|
||||||
let dir = tools.getdirByIdApp(idapp) + dirmain + '/upload/';
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (!tools.sulServer()) {
|
|
||||||
dirmain = '/public';
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const rec of arrlist) {
|
|
||||||
const myuser = await User.findOne({ idapp, _id: rec.userId }).lean();
|
|
||||||
if (myuser) {
|
|
||||||
const myphotos = rec.photos;
|
|
||||||
|
|
||||||
if (myphotos.length > 0) {
|
|
||||||
let folderprof = dir + 'profile/' + myuser.username;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// console.log('checkdir', folderprof);
|
|
||||||
if (!fs.existsSync(folderprof)) {
|
|
||||||
console.log('*** Creadir', folderprof);
|
|
||||||
fs.mkdirSync(folderprof);
|
|
||||||
}
|
|
||||||
|
|
||||||
folderprof = dir + 'profile/' + myuser.username + '/' + table;
|
|
||||||
// console.log('checkdir', folderprof);
|
|
||||||
if (!fs.existsSync(folderprof)) {
|
|
||||||
console.log('creadir', folderprof);
|
|
||||||
fs.mkdirSync(folderprof);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const photo of myphotos) {
|
|
||||||
|
|
||||||
if (photo.imagefile) {
|
|
||||||
file = dir + 'profile/' + myuser.username + '/' + table + '/' +
|
|
||||||
photo.imagefile;
|
|
||||||
filefrom = dir + 'profile/undefined/' + table + '/' + photo.imagefile;
|
|
||||||
filefrom2 = dir + 'profile/' + myuser.username + '/' + photo.imagefile;
|
|
||||||
|
|
||||||
// console.log('file', file);
|
|
||||||
// console.log('filefrom', filefrom);
|
|
||||||
|
|
||||||
if (!tools.isFileExists(file)) {
|
|
||||||
// non esiste
|
|
||||||
console.log('non esiste', file);
|
|
||||||
console.log(' filefrom', filefrom);
|
|
||||||
console.log(' filefrom2', filefrom2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tools.isFileExists(file) && tools.isFileExists(filefrom)) {
|
|
||||||
console.log('@@@@@@ copia file:', filefrom, 'a', file);
|
|
||||||
tools.copy(filefrom, file);
|
|
||||||
}
|
|
||||||
if (!tools.isFileExists(file) && tools.isFileExists(filefrom2)) {
|
|
||||||
console.log('@@@@@@ copia file 2:', filefrom2, 'a', file);
|
|
||||||
tools.copy(filefrom2, file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
console.log('FINE - estraiImmagini', table);
|
|
||||||
} catch (e) {
|
|
||||||
console.error('e', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function estraiTutteLeImmagini() {
|
|
||||||
|
|
||||||
await estraiImmagini('myskills');
|
|
||||||
await estraiImmagini('mygoods');
|
|
||||||
await estraiImmagini('mybachecas');
|
|
||||||
}
|
|
||||||
|
|
||||||
async function faitest() {
|
|
||||||
// console.log('Fai Test:')
|
|
||||||
|
|
||||||
const testfind = false;
|
|
||||||
|
|
||||||
// const $vers = tools.getVersionint('1.92.45');
|
|
||||||
|
|
||||||
if (true) {
|
|
||||||
// tools.execScript("ls -la");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
prova = tools.removeAtChar('@prova');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
const prova = tools.getConfSiteOptionEnabledByIdApp('13', shared_consts.ConfSite.Notif_Reg_Push_Admin);
|
|
||||||
console.log('prova', prova);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (testfind) {
|
|
||||||
const { City } = require('./models/city');
|
|
||||||
|
|
||||||
let miacity = 'roma';
|
|
||||||
const ris = await City.findByCity(miacity);
|
|
||||||
|
|
||||||
console.log('ris', ris);
|
|
||||||
}
|
|
||||||
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
let myuser = await User.findOne({
|
|
||||||
idapp: '1',
|
|
||||||
username: 'paoloar77',
|
|
||||||
});
|
|
||||||
const langdest = 'it';
|
|
||||||
|
|
||||||
telegrambot.askConfirmationUser(myuser.idapp, shared_consts.CallFunz.REGISTRATION, myuser);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
|
|
||||||
const user = await User.findOne({
|
|
||||||
idapp: 12,
|
|
||||||
username: 'paolotest1',
|
|
||||||
});
|
|
||||||
|
|
||||||
await sendemail.sendEmail_Registration('it', 'paolo@arcodiluce.it', user,
|
|
||||||
'12', '');
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false) {
|
|
||||||
|
|
||||||
const { User } = require('./models/user');
|
|
||||||
|
|
||||||
const idapp = tools.FREEPLANET;
|
|
||||||
const idreg = 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
const user = await User.findOne({
|
|
||||||
idapp,
|
|
||||||
username: 'paoloar773',
|
|
||||||
});
|
|
||||||
|
|
||||||
user.aportador_solidario = 'paoloar77';
|
|
||||||
|
|
||||||
let mylocalsconf = {
|
|
||||||
idapp,
|
|
||||||
dataemail: null,
|
|
||||||
locale: user.lang,
|
|
||||||
nomeapp: tools.getNomeAppByIdApp(idapp),
|
|
||||||
strlinksito: tools.getHostByIdApp(idapp),
|
|
||||||
strlinkreg: '',
|
|
||||||
username: user.username,
|
|
||||||
name: user.name,
|
|
||||||
surname: user.surname,
|
|
||||||
forgetpwd: tools.getHostByIdApp(idapp) + '/requestresetpwd',
|
|
||||||
emailto: '',
|
|
||||||
user,
|
|
||||||
};
|
|
||||||
|
|
||||||
await telegrambot.notifyToTelegram(telegrambot.phase.REGISTRATION,
|
|
||||||
mylocalsconf);
|
|
||||||
} catch (e) {
|
|
||||||
console.log('error ' + e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = { app };
|
|
||||||
|
|
||||||
@@ -4,7 +4,6 @@ module.exports = {
|
|||||||
name: "FreePlanetServerSide",
|
name: "FreePlanetServerSide",
|
||||||
script: "./src/server/server.js",
|
script: "./src/server/server.js",
|
||||||
ignore_watch : ["node_modules"],
|
ignore_watch : ["node_modules"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
|
||||||
watch: false,
|
watch: false,
|
||||||
//autorestart: true,
|
//autorestart: true,
|
||||||
instances: 1,
|
instances: 1,
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
apps: [
|
apps: [
|
||||||
{
|
{
|
||||||
name: "PRODUZIONE PiuCheBuono_ServerSide",
|
name: "PiuCheBuono (Prod)",
|
||||||
script: "/var/www/nodejs_piuchebuono_server/src/server/server.js",
|
script: "/var/www/nodejs_piuchebuono_server/src/server/server.js",
|
||||||
ignore_watch: ["node_modules", "logs"],
|
ignore_watch: ["node_modules", "logs"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
interpreter: "/root/.nvm/versions/node/v22.13.1/bin/node",
|
||||||
//autorestart: true,
|
//autorestart: true,
|
||||||
instances: 1,
|
instances: 1,
|
||||||
watch: false,
|
watch: false,
|
||||||
env: {
|
env: {
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
apps: [
|
apps: [
|
||||||
{
|
{
|
||||||
name: "TEST PiuCheBuono_ServerSide",
|
name: "PiuCheBuono (TEST)",
|
||||||
script: "/var/www/nodejs_test.piuchebuono_server/src/server/server.js",
|
script: "/var/www/nodejs_test.piuchebuono_server/src/server/server.js",
|
||||||
ignore_watch: ["node_modules", "logs"],
|
ignore_watch: ["node_modules", "logs"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
interpreter: "/root/.nvm/versions/node/v22.13.1/bin/node",
|
||||||
//autorestart: true,
|
|
||||||
instances: 1,
|
instances: 1,
|
||||||
watch: false,
|
watch: false,
|
||||||
env: {
|
env: {
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
apps: [
|
apps: [
|
||||||
{
|
{
|
||||||
name: "PRODUZIONE RISO - FREEPLANET",
|
name: "RISO (Prod)",
|
||||||
script: "/var/www/nodejs_riso_server/src/server/server.js",
|
script: "/var/www/nodejs_riso_server/src/server/server.js",
|
||||||
ignore_watch: ["node_modules", "logs"],
|
ignore_watch: ["node_modules", "logs"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
interpreter: "/root/.nvm/versions/node/v22.13.1/bin/node",
|
||||||
//autorestart: true,
|
//autorestart: true,
|
||||||
instances: 1,
|
instances: 1,
|
||||||
watch: false,
|
watch: false,
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
apps: [
|
apps: [
|
||||||
{
|
{
|
||||||
name: "TESTRISO2 FreePlanetServerSide",
|
name: "RISO (TEST)",
|
||||||
script: "./src/server/server.js",
|
script: "./src/server/server.js",
|
||||||
ignore_watch: ["node_modules", "logs"],
|
ignore_watch: ["node_modules", "logs"],
|
||||||
interpreter: "/root/.nvm/versions/node/v16.19.0/bin/node",
|
interpreter: "/root/.nvm/versions/node/v22.13.1/bin/node",
|
||||||
watch: false,
|
watch: false,
|
||||||
//autorestart: true,
|
|
||||||
instances: 1,
|
instances: 1,
|
||||||
env_test: {
|
env_test: {
|
||||||
"PORT": 3001,
|
"PORT": 3001,
|
||||||
BIN
emails/.DS_Store
vendored
BIN
emails/.DS_Store
vendored
Binary file not shown.
@@ -18,232 +18,270 @@
|
|||||||
- var baseimg = baseurl + '/'
|
- var baseimg = baseurl + '/'
|
||||||
doctype html
|
doctype html
|
||||||
html
|
html
|
||||||
- if (dataemail.title)
|
head
|
||||||
head
|
meta(charset="utf-8")
|
||||||
title dataemail.subject
|
meta(name="viewport", content="width=device-width, initial-scale=1")
|
||||||
|
title= dataemail.title || "Email"
|
||||||
|
style.
|
||||||
|
/* embedded CSS */
|
||||||
|
body { margin:0; padding:0; background:#E9F2F9; font-family:Tahoma, Geneva, sans-serif; color:#5b656e; }
|
||||||
|
a { color:#09c; text-decoration:none; }
|
||||||
|
table, td { border-collapse:collapse; }
|
||||||
|
h1,h2,h3,p { margin:0; padding:0; }
|
||||||
|
|
||||||
//- import css/scss stylesheets
|
.logoContainer { text-align:center; padding:20px 0; }
|
||||||
//- these file names will be replace by gulp with proper css file paths
|
.logoContainer img { max-width:200px; }
|
||||||
link(rel="stylesheet", href="../sass/basic.scss")
|
|
||||||
link(rel="stylesheet", href="../sass/one/styles.scss")
|
|
||||||
|
|
||||||
//- embdedded css allowed, but not sass
|
.testomail { padding:10px; font-size:0.75rem; line-height:1.4; }
|
||||||
style.
|
|
||||||
.red {
|
|
||||||
background-color: #E84C50;
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-width {
|
.clpromo {
|
||||||
width: 100%;
|
background-color:orange;
|
||||||
}
|
text-align:center;
|
||||||
|
font-size:1rem;
|
||||||
|
padding:10px;
|
||||||
|
color:#fff;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.emailContainer {
|
||||||
|
background:#fff;
|
||||||
|
border-radius:10px;
|
||||||
|
padding:20px;
|
||||||
|
margin:20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sectionArticleImage img {
|
||||||
|
max-width:150px;
|
||||||
|
border:1px solid #ccc;
|
||||||
|
display:block;
|
||||||
|
margin-bottom:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.teacher {
|
||||||
|
font-style:italic;
|
||||||
|
font-size:0.75rem;
|
||||||
|
color:#555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contrib {
|
||||||
|
font-size:0.75rem;
|
||||||
|
font-weight:bold;
|
||||||
|
color:#333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button a {
|
||||||
|
display:inline-block;
|
||||||
|
padding:10px 20px;
|
||||||
|
background:#f75666;
|
||||||
|
color:#fff !important;
|
||||||
|
text-decoration:none;
|
||||||
|
border-radius:10px;
|
||||||
|
font-size:13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button2 a {
|
||||||
|
display:block;
|
||||||
|
padding:12px 20px;
|
||||||
|
background:#0000ff;
|
||||||
|
color:#fff !important;
|
||||||
|
text-decoration:none;
|
||||||
|
border-radius:10px;
|
||||||
|
font-size:1.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center_img img {
|
||||||
|
display:block;
|
||||||
|
margin:0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discContainer {
|
||||||
|
background:#fff;
|
||||||
|
border-radius:10px;
|
||||||
|
padding:20px;
|
||||||
|
margin:20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.LinkDisc a {
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pDisc:hover {
|
||||||
|
background:#5c8ef4 !important;
|
||||||
|
color:#fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pDisc {
|
||||||
|
padding:5px 10px;
|
||||||
|
border-radius:10px;
|
||||||
|
display:inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.socialMedia {
|
||||||
|
background:#8bafcb;
|
||||||
|
text-align:center;
|
||||||
|
padding:10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.socialMedia img {
|
||||||
|
width:29px;
|
||||||
|
height:auto;
|
||||||
|
border:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.firma-container {
|
||||||
|
background:#ffffff;
|
||||||
|
padding:15px;
|
||||||
|
text-align:center;
|
||||||
|
border-top:1px solid #e0e0e0;
|
||||||
|
font-size:0.85rem;
|
||||||
|
color:#313a42;
|
||||||
|
}
|
||||||
|
|
||||||
|
.disclaimer-container {
|
||||||
|
background:#f9f9f9;
|
||||||
|
padding:15px;
|
||||||
|
text-align:center;
|
||||||
|
font-size:0.75rem;
|
||||||
|
color:#666;
|
||||||
|
border-top:1px solid #eee;
|
||||||
|
border-bottom:1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom-container {
|
||||||
|
background:#e9f2f9;
|
||||||
|
padding:15px;
|
||||||
|
text-align:center;
|
||||||
|
font-size:0.7rem;
|
||||||
|
color:#999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.whitespace {
|
||||||
|
line-height:0;
|
||||||
|
font-size:0;
|
||||||
|
height:20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width:480px) {
|
||||||
|
.button a, .button2 a {
|
||||||
|
font-size:1rem !important;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
.sectionArticleImage,
|
||||||
|
.column {
|
||||||
|
width:100% !important;
|
||||||
|
display:block !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
body(yahoofix)
|
body(yahoofix)
|
||||||
span(id='body_style', style='display:block')
|
span#body_style(style='display:block')
|
||||||
table(class="topHeader", cellpadding="0", cellspacing="0", width="100%")
|
// Header
|
||||||
- if (dataemail.height_logo)
|
table(width="100%", cellpadding="0", cellspacing="0", align="center")
|
||||||
tr
|
|
||||||
td
|
|
||||||
table(cellpadding="0", cellspacing="0", align="center", summary="")
|
|
||||||
tr
|
|
||||||
td.logoContainer
|
|
||||||
a(href=baseurl, title='logo')
|
|
||||||
img.logo(src=baseurl+"/images/logo.png", height=dataemail.height_logo)
|
|
||||||
|
|
||||||
tr
|
tr
|
||||||
td.testomail
|
td.logoContainer
|
||||||
p!= dataemail.templ.testoheadermail_out
|
a(href=baseurl)
|
||||||
|
img.logo(src=baseurl+"/public/images/logo.png", alt="Logo")
|
||||||
|
|
||||||
- if (dataemail.templ.options.includes('SHOW_PROMO'))
|
if dataemail.templ.testoheadermail_out
|
||||||
|
tr
|
||||||
|
td.testomail
|
||||||
|
p!= dataemail.templ.testoheadermail_out
|
||||||
|
|
||||||
|
if dataemail.templ.options.includes('SHOW_PROMO')
|
||||||
tr
|
tr
|
||||||
td.clpromo
|
td.clpromo
|
||||||
p!= dataemail.textpromo
|
p!= dataemail.textpromo
|
||||||
|
|
||||||
- if (dataemail.templ.content)
|
// Main Content
|
||||||
table(cellpadding="0", cellspacing="0", width="95%", align="center")
|
if dataemail.templ.content
|
||||||
|
tr
|
||||||
|
td.emailContainer
|
||||||
|
p!=dataemail.templ.content
|
||||||
|
if dataemail.templ.img
|
||||||
|
img(src=baseimg + dataemail.templ.img, class="center_img")
|
||||||
|
if dataemail.templ.content2
|
||||||
|
p!=dataemail.templ.content2
|
||||||
|
if dataemail.templ.img2
|
||||||
|
img(src=baseimg + dataemail.templ.img2, class="center_img")
|
||||||
|
|
||||||
|
// Events
|
||||||
|
if dataemail.templ.options.includes('SHOW_EVENTS')
|
||||||
|
each event in arrevents
|
||||||
tr
|
tr
|
||||||
td(class="textIniContainer", valign="top")
|
td.emailContainer
|
||||||
p!=dataemail.templ.content
|
table(width="100%", cellpadding="0", cellspacing="0")
|
||||||
- if (dataemail.templ.img)
|
|
||||||
img(src=baseimg + dataemail.templ.img, alt="", class="myimg")
|
|
||||||
- if (dataemail.templ.content2)
|
|
||||||
p!=dataemail.templ.content2
|
|
||||||
- if (dataemail.templ.img2)
|
|
||||||
img(src=baseimg + dataemail.templ.img2, alt="", class="myimg")
|
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", width="640", align="center")
|
|
||||||
- if (dataemail.templ.options.includes('SHOW_EVENTS'))
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="10")
|
|
||||||
p
|
|
||||||
tr
|
|
||||||
td(class="emailContainer", valign="top")
|
|
||||||
|
|
||||||
each event in arrevents
|
|
||||||
- var urlevent = baseurl + '/event/' + event.typol + '?eventid=' + event._id
|
|
||||||
- var imgev = event.img_small
|
|
||||||
- var mydate = prettyDate(event.dateTimeStart)
|
|
||||||
unless (imgev)
|
|
||||||
- imgev = event.img
|
|
||||||
- var teacher1 = ''
|
|
||||||
- var teacher2 = ''
|
|
||||||
- var teacher3 = ''
|
|
||||||
- var teacher4 = ''
|
|
||||||
- var contrib = ''
|
|
||||||
- var myclteach = 'q-chip'
|
|
||||||
- if (event.op1[0] && event.op1[0].username !== 'nessuno')
|
|
||||||
- teacher1 = event.op1[0].name + ' ' + event.op1[0].surname
|
|
||||||
- if ((event.op2[0] && event.op2[0].username !== 'nessuno'))
|
|
||||||
- teacher2 = event.op2[0].name + ' ' + event.op2[0].surname
|
|
||||||
- myclteach = 'q-chip2'
|
|
||||||
- if (event.op3[0] && event.op3[0].username !== 'nessuno')
|
|
||||||
- teacher3 = "<br>" . event.op3[0].name + ' ' + event.op3[0].surname
|
|
||||||
- if (event.op4[0] && event.op4[0].username !== 'nessuno')
|
|
||||||
- teacher4 = "<br>" . event.op4[0].name + ' ' + event.op4[0].surname
|
|
||||||
|
|
||||||
- if (event.contrib[0])
|
|
||||||
- contrib = event.contrib[0].label
|
|
||||||
- if (event.contrib[0].showprice)
|
|
||||||
- contrib += ' ' + event.price + ' €'
|
|
||||||
|
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center")
|
|
||||||
tr
|
tr
|
||||||
td(class="column sectionArticleImage", valign="top")
|
td.column.sectionArticleImage(width="150")
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
if event.news
|
||||||
- if (event.news)
|
p.q-chip.bg-red.text-white Novità
|
||||||
tr
|
img(src=baseimg + (event.img_small || event.img), alt=event.title)
|
||||||
td
|
p.teacher= event.op1[0].name + ' ' + event.op1[0].surname
|
||||||
p(class="q-chip row inline no-wrap items-center cltexth5 chipnews shadow-5 glossy text-right bg-red text-white") Novità
|
td.column
|
||||||
|
h2.sectionContentTitle= event.title
|
||||||
|
p.sectionContentSubTitle= prettyDate(event.dateTimeStart)
|
||||||
|
p.sectionContent!= event.details
|
||||||
|
if event.contrib.length
|
||||||
|
p.contrib= event.contrib[0].label + (event.contrib[0].showprice ? ' ' + event.price + ' €' : '')
|
||||||
|
table.buttonContainer
|
||||||
tr
|
tr
|
||||||
td
|
td.button
|
||||||
img(src=baseimg + imgev, alt="", width="150")
|
a(href=baseurl + '/event/' + event.typol + '?eventid=' + event._id, target="_blank") Apri l'Evento
|
||||||
p(class="teacher") #{teacher1} <br> #{teacher2} #{teacher3} #{teacher4}
|
|
||||||
td(class="column", valign="top")
|
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
tr
|
||||||
tr
|
td.center_img
|
||||||
td(class="sectionContentTitle boldhigh", valign="top")
|
a.button2(href=urlcal, target="_blank") Calendario Eventi
|
||||||
p #{event.title}
|
|
||||||
tr
|
|
||||||
td(class="sectionContentSubTitle", valign="top")
|
|
||||||
p(class="q-chip row inline no-wrap items-center cltexth5 chipnews shadow-5 glossy text-right bg-blue text-white") #{mydate}
|
|
||||||
tr
|
|
||||||
td(class="sectionContent", valign="top")
|
|
||||||
p!= event.details
|
|
||||||
p.contrib= contrib
|
|
||||||
tr
|
|
||||||
td(class="buttonContainer")
|
|
||||||
table(width="50%", cellpadding="0", cellspacing="0", summary="", border="0")
|
|
||||||
tr
|
|
||||||
td(class="button hoverLink")
|
|
||||||
a(href=urlevent, title='Evento', target='_blank') Apri l'Evento
|
|
||||||
|
|
||||||
|
// Disciplines
|
||||||
|
if dataemail.templ.options.includes('SHOW_DISC')
|
||||||
|
tr
|
||||||
|
td.center
|
||||||
|
h2.cltitle_disc= dataemail.disc_title
|
||||||
|
each disc in dataemail.arrdiscipline
|
||||||
tr
|
tr
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0", align="center", class="")
|
td.discContainer
|
||||||
tr
|
table(width="100%", cellpadding="0", cellspacing="0")
|
||||||
td(class="whitespace", height="10")
|
|
||||||
p
|
|
||||||
tr
|
|
||||||
td.center_img(class="button2 hoverLink")
|
|
||||||
a(href=urlcal, title='Calendario Eventi', target='_blank') Calendario Eventi
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="10")
|
|
||||||
p
|
|
||||||
|
|
||||||
- if (dataemail.templ.options.includes('SHOW_DISC'))
|
|
||||||
tr
|
|
||||||
td(class="whitespace bg-white", height="20")
|
|
||||||
p(class="bg-white")
|
|
||||||
tr
|
|
||||||
td(class="center")
|
|
||||||
p(class="cltitle_disc") #{dataemail.disc_title}
|
|
||||||
tr
|
|
||||||
td(class="discContainer", valign="top")
|
|
||||||
|
|
||||||
each disc in dataemail.arrdiscipline
|
|
||||||
- var urldisc = baseurl + disc.linkpage
|
|
||||||
- var imgdisc = disc.img_small
|
|
||||||
unless (imgdisc)
|
|
||||||
- imgdisc = disc.img
|
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center")
|
|
||||||
tr
|
tr
|
||||||
td(class="column sectionArticleImage", valign="top")
|
td.column.sectionArticleImage(width="150")
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
img(src=baseimg + (disc.img_small || disc.img), alt=disc.label)
|
||||||
tr
|
td.column
|
||||||
td
|
p.LinkDisc
|
||||||
img(src=baseimg + imgdisc, alt="", width="150")
|
a(href=baseurl + disc.linkpage, target="_blank")
|
||||||
td(class="column", valign="top")
|
span.pDisc(style=`background-color:`+disc.color)= disc.label
|
||||||
|
p.sectionContent!= disc.description
|
||||||
|
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
// Additional Content
|
||||||
tr
|
if dataemail.content_after_events
|
||||||
td(class="sectionContentTitle boldhigh center LinkDisc", valign="top")
|
|
||||||
a(href=urldisc, title='Disciplina', target='_blank')
|
|
||||||
p(class="q-chip row inline no-wrap items-center cltexth4 chipnews shadow-5 glossy text-right text-white pDisc", style=`background-color: `+disc.color) #{disc.label}
|
|
||||||
tr
|
|
||||||
td(class="sectionContent", valign="top")
|
|
||||||
p!= disc.description
|
|
||||||
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="20")
|
|
||||||
p
|
|
||||||
|
|
||||||
- if (dataemail.content_after_events)
|
|
||||||
tr
|
tr
|
||||||
table(cellpadding="0", cellspacing="0", summary="", border="0")
|
td.testomail
|
||||||
tr
|
p!=dataemail.content_after_events
|
||||||
td.testomail
|
|
||||||
p!=dataemail.content_after_events
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="20")
|
|
||||||
p
|
|
||||||
|
|
||||||
// Social Media
|
// Social Media
|
||||||
table.socialMedia(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center")
|
tr
|
||||||
tr
|
td.socialMedia
|
||||||
td(class="whitespace", height="5")
|
table(width="120", align="center", cellpadding="0", cellspacing="0")
|
||||||
p
|
if dataemail.urlinstagram
|
||||||
tr
|
td
|
||||||
td
|
a(href=dataemail.urlinstagram)
|
||||||
table(width="120", cellpadding="0", cellspacing="0", summary="", border="0", align="center")
|
img(src=imginstagram, alt="Instagram")
|
||||||
tr
|
if dataemail.urltwitter
|
||||||
- if (dataemail.urlinstagram)
|
td
|
||||||
td(width="32", align="center")
|
a(href=dataemail.urltwitter)
|
||||||
a(href=dataemail.urlinstagram, title='Instagram')
|
img(src=imgtwitter, alt="Twitter")
|
||||||
img(src=imginstagram, alt="Instagram", width="29")
|
if dataemail.urlfb
|
||||||
- if (dataemail.urltwitter)
|
td
|
||||||
td(width="32", align="center")
|
a(href=dataemail.urlfb)
|
||||||
a(href=dataemail.urltwitter, title='Twitter')
|
img(src=imgfb, alt="Facebook")
|
||||||
img(src=imgtwitter, alt="Twitter", width="29")
|
if dataemail.urlyoutube
|
||||||
- if (dataemail.urlfb)
|
td
|
||||||
td(width="32", align="center")
|
a(href=dataemail.urlyoutube)
|
||||||
a(href=dataemail.urlfb, title='Facebook')
|
img(src=imgyoutube, alt="YouTube")
|
||||||
img(src=imgfb, alt="Facebook", width="29")
|
|
||||||
- if (dataemail.urlyoutube)
|
|
||||||
td(width="32", align="center")
|
|
||||||
a(href=dataemail.urlyoutube, title='YouTube')
|
|
||||||
img(src=imgyoutube, alt="YouTube", width="29")
|
|
||||||
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="5")
|
|
||||||
p
|
|
||||||
|
|
||||||
// Footer
|
// Footer
|
||||||
table.footer(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center")
|
tr
|
||||||
tr
|
td.firma-container
|
||||||
td(class="whitespace", height="10")
|
p!= dataemail.firma
|
||||||
p
|
tr
|
||||||
tr
|
td.disclaimer-container
|
||||||
td.firma
|
p!= dataemail.disclaimer_out
|
||||||
p!= dataemail.firma
|
tr
|
||||||
|
td.bottom-container
|
||||||
tr
|
p!= dataemail.disc_bottom_out
|
||||||
td.disclaimer
|
|
||||||
p!= dataemail.disclaimer_out
|
|
||||||
|
|
||||||
tr
|
|
||||||
td.bottom
|
|
||||||
p!= dataemail.disc_bottom_out
|
|
||||||
|
|
||||||
tr
|
|
||||||
td(class="whitespace", height="10")
|
|
||||||
p
|
|
||||||
6
filelog.txt
Normal file
6
filelog.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
Dom 02/03 ORE 16:32: USER [surya1977]: ciao
|
||||||
|
|
||||||
|
Lun 10/03 ORE 15:52: USER [surya1977]: ciao
|
||||||
|
|
||||||
|
Lun 10/03 ORE 15:56: USER [surya1977]: ciao
|
||||||
1
localhost-key.pem
Symbolic link
1
localhost-key.pem
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/Users/suryapaolo/certs/localhost-key.pem
|
||||||
1
localhost.pem
Symbolic link
1
localhost.pem
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/Users/suryapaolo/certs/localhost.pem
|
||||||
67
logtrans.txt
67
logtrans.txt
@@ -418,4 +418,69 @@ Gio 09/01 ORE 17:04: [<b>Circuito RIS TerraNFT</b>]: Inviate Monete da terranft
|
|||||||
|
|
||||||
Saldi:
|
Saldi:
|
||||||
terranft (paoloar77): -30.00 RIS]
|
terranft (paoloar77): -30.00 RIS]
|
||||||
SuryaArena: 30.00 RIS]
|
SuryaArena: 30.00 RIS]
|
||||||
|
Ven 28/02 ORE 19:40: [<b>Circuito RIS Bologna</b>]: Inviate Monete da surya1977 a SuryaSecondo 2 RIS [causale: aaa]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 33.90 RIS]
|
||||||
|
SuryaSecondo: 2.10 RIS]
|
||||||
|
Lun 03/03 ORE 00:38: [<b>Circuito RIS Bologna</b>]: Inviate Monete da surya1977 a SuryaSecondo 3 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 30.90 RIS]
|
||||||
|
SuryaSecondo: 5.10 RIS]
|
||||||
|
Lun 03/03 ORE 00:40: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a Giovannifruttadisicilia 5.4 RIS [causale: aranceee !!]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 62.55 RIS]
|
||||||
|
Giovannifruttadisicilia: 362.40 RIS]
|
||||||
|
Lun 03/03 ORE 01:06: [<b>Circuito RIS Arezzo</b>]: Inviate Monete da surya1977 a Andro 1 RIS [causale: test]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: -1.10 RIS]
|
||||||
|
Andro: 1.00 RIS]
|
||||||
|
Mer 12/03 ORE 21:30: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a Giovannifruttadisicilia 60 RIS [causale: prova]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 34.20 RIS]
|
||||||
|
Giovannifruttadisicilia: 458.50 RIS]
|
||||||
|
Gio 13/03 ORE 17:44: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a PiuCheBuono(GaseBottega) 1 RIS [causale: AAA]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 33.20 RIS]
|
||||||
|
PiuCheBuono(GaseBottega): -65.50 RIS]
|
||||||
|
Gio 13/03 ORE 17:45: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a PiuCheBuono(GaseBottega) 3.2 RIS [causale: GGG]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 30.00 RIS]
|
||||||
|
PiuCheBuono(GaseBottega): -62.30 RIS]
|
||||||
|
Gio 13/03 ORE 18:17: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a pontiUmani 2 RIS [causale: bbb]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 28.00 RIS]
|
||||||
|
pontiUmani: 2.00 RIS]
|
||||||
|
Gio 13/03 ORE 18:18: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 2 RIS [causale: ggg]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 26.00 RIS]
|
||||||
|
GruppoYurta: 2.00 RIS]
|
||||||
|
Gio 13/03 ORE 18:48: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 11 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 15.00 RIS]
|
||||||
|
GruppoYurta: 13.00 RIS]
|
||||||
|
Gio 13/03 ORE 18:53: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 3 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 12.00 RIS]
|
||||||
|
GruppoYurta: 16.00 RIS]
|
||||||
|
Gio 13/03 ORE 18:57: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 1 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 11.00 RIS]
|
||||||
|
GruppoYurta: 17.00 RIS]
|
||||||
|
Dom 23/03 ORE 22:24: [<b>Circuito RIS Italia</b>]: Inviate Monete da surya1977 a GruppoYurta 1 RIS [causale: ]
|
||||||
|
|
||||||
|
Saldi:
|
||||||
|
surya1977: 88.20 RIS]
|
||||||
|
GruppoYurta: 6.00 RIS]
|
||||||
91
package.json
91
package.json
@@ -13,78 +13,75 @@
|
|||||||
"starttest": "NODE_ENV=test node src/server/server.js",
|
"starttest": "NODE_ENV=test node src/server/server.js",
|
||||||
"test-watch": "nodemon --exec 'npm test'"
|
"test-watch": "nodemon --exec 'npm test'"
|
||||||
},
|
},
|
||||||
"engines": {
|
|
||||||
"node": "^18.19.0"
|
|
||||||
},
|
|
||||||
"author": "Surya",
|
"author": "Surya",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"basic-ftp": "^5.0.2",
|
"basic-ftp": "^5.0.5",
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^3.0.2",
|
||||||
"bluebird": "^3.7.2",
|
"bluebird": "^3.7.2",
|
||||||
"body-parser": "^1.20.0",
|
"body-parser": "^1.20.3",
|
||||||
"cookie-parser": "^1.4.6",
|
"cookie-parser": "^1.4.7",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"country-codes-list": "^1.6.8",
|
"country-codes-list": "^2.0.0",
|
||||||
"crypto-js": "^4.1.1",
|
"crypto-js": "^4.2.0",
|
||||||
"csurf": "^1.11.0",
|
"csurf": "^1.11.0",
|
||||||
"dotenv": "^16.4.7",
|
"dotenv": "^16.4.7",
|
||||||
"ejs": "^3.1.8",
|
"ejs": "^3.1.10",
|
||||||
"email-templates": "^10.0.1",
|
"email-templates": "^12.0.2",
|
||||||
"express": "^4.18.1",
|
"express": "^4.21.2",
|
||||||
"formidable": "^2.0.1",
|
"formidable": "^3.5.2",
|
||||||
"ghostscript4js": "^3.2.3",
|
"ghostscript4js": "^3.2.3",
|
||||||
"i18n": "^0.15.0",
|
"i18n": "^0.15.1",
|
||||||
"image-downloader": "^4.3.0",
|
"image-downloader": "^4.3.0",
|
||||||
"internet-available": "^1.0.0",
|
"internet-available": "^1.0.0",
|
||||||
"jade": "^1.9.2",
|
"jade": "^1.11.0",
|
||||||
"jsdom": "^24.0.0",
|
"jsdom": "^26.0.0",
|
||||||
"jsonwebtoken": "^9.0.1",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"mongodb": "^4.4.1",
|
"mongodb": "^6.14.2",
|
||||||
"mongoose": "^5.13.15",
|
"mongoose": "^8.12.1",
|
||||||
"multer": "^1.4.5-lts.1",
|
"multer": "^1.4.5-lts.2",
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
"node-cron": "^3.0.2",
|
"node-cron": "^3.0.3",
|
||||||
"node-emoji": "^1.11.0",
|
"node-emoji": "^2.2.0",
|
||||||
"node-image-resizer": "^1.0.0",
|
"node-image-resizer": "^1.0.0",
|
||||||
"node-pre-gyp": "^0.14.0",
|
"node-pre-gyp": "^0.17.0",
|
||||||
"node-pty": "^1.0.0",
|
"node-pty": "^1.0.0",
|
||||||
"node-telegram-bot-api": "^0.65.1",
|
"node-telegram-bot-api": "^0.66.0",
|
||||||
"nodemailer": "^6.7.8",
|
"nodemailer": "^6.10.0",
|
||||||
"npm-check-updates": "^16.14.18",
|
"npm-check-updates": "^17.1.15",
|
||||||
"openai": "^4.83.0",
|
"openai": "^4.86.2",
|
||||||
"pdf-lib": "^1.17.1",
|
"pdf-lib": "^1.17.1",
|
||||||
"pdf-parse": "^1.1.1",
|
"pdf-parse": "^1.1.1",
|
||||||
"pem": "^1.14.6",
|
"pem": "^1.14.8",
|
||||||
"preview-email": "^3.0.7",
|
"preview-email": "^3.1.0",
|
||||||
"pug": "^3.0.2",
|
"pug": "^3.0.3",
|
||||||
"rate-limiter-flexible": "^2.3.9",
|
"rate-limiter-flexible": "^5.0.5",
|
||||||
"request": "^2.34",
|
"request": "^2.88",
|
||||||
"sanitize-html": "^2.13.0",
|
"sanitize-html": "^2.14.0",
|
||||||
"save": "^2.5.0",
|
"save": "^2.9.0",
|
||||||
"sharp": "^0.30.7",
|
"sharp": "^0.33.5",
|
||||||
"superagent": "^8.0.0",
|
"superagent": "^10.1.1",
|
||||||
"tedious": "^18.6.1",
|
"tedious": "^18.6.1",
|
||||||
"url-parse": "^1.5.10",
|
"url-parse": "^1.5.10",
|
||||||
"validator": "^13.7.0",
|
"validator": "^13.12.0",
|
||||||
"vhost": "^3.0.2",
|
"vhost": "^3.0.2",
|
||||||
"web-push": "^3.6.7",
|
"web-push": "^3.6.7",
|
||||||
"xml2js": "^0.6.2",
|
"xml2js": "^0.6.2",
|
||||||
"xoauth2": "^1.2.0"
|
"xoauth2": "^1.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"browser-sync": "^2.27.10",
|
"browser-sync": "^3.0.3",
|
||||||
"expect": "^29.0.2",
|
"expect": "^29.7.0",
|
||||||
"gulp": "^3.9.1",
|
"gulp": "^5.0.0",
|
||||||
"gulp-inline-css": "^2.0.0",
|
"gulp-inline-css": "^4.0.0",
|
||||||
"gulp-pug": "^5.0.0",
|
"gulp-pug": "^5.0.0",
|
||||||
"gulp-rename": "^2.0.0",
|
"gulp-rename": "^2.0.0",
|
||||||
"gulp-replace": "^1.1.3",
|
"gulp-replace": "^1.1.4",
|
||||||
"gulp-sass": "^5.1.0",
|
"gulp-sass": "^6.0.1",
|
||||||
"jest": "^29.0.2",
|
"jest": "^29.7.0",
|
||||||
"mocha": "^10.0.0",
|
"mocha": "^11.1.0",
|
||||||
"nodemon": "^3.0.1",
|
"nodemon": "^3.1.9",
|
||||||
"supertest": "^6.2.4"
|
"supertest": "^7.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
53
scripts/esporta_dati.sh
Normal file
53
scripts/esporta_dati.sh
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Definizione delle costanti
|
||||||
|
targetDB="FreePlanet"
|
||||||
|
MYDOCKER="mongodb_riso"
|
||||||
|
|
||||||
|
# Percorso del file da Esportare (specificare il percorso completo)
|
||||||
|
myCollection="$1"
|
||||||
|
fileToImport="$1.json"
|
||||||
|
|
||||||
|
# Leggi il nome della collezione come primo argomento
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Errore: Devi specificare il nome della collezione come argomento."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Leggi le credenziali dal file di configurazione
|
||||||
|
source ~/batch/.my_cfg.ini
|
||||||
|
|
||||||
|
# Verifica che le variabili siano state impostate correttamente
|
||||||
|
if [ -z "$PWDDB" ]; then
|
||||||
|
echo "Errore: La password del database non è stata trovata in .my_cfg.ini."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Messaggio di conferma
|
||||||
|
echo "Stai per Esportare i dati da '$fileToImport' nella collezione '$myCollection' del database '$targetDB'."
|
||||||
|
read -p "Sei sicuro di voler procedere? (Y/N): " risposta
|
||||||
|
|
||||||
|
# Controllo della risposta dell'utente
|
||||||
|
if [[ "$risposta" != "Y" && "$risposta" != "y" ]]; then
|
||||||
|
echo "Operazione annullata."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Esegui il comando mongoimport dentro il container Docker
|
||||||
|
docker exec $MYDOCKER mongoexport \
|
||||||
|
--username admin \
|
||||||
|
--password "$PWDDB" \
|
||||||
|
--authenticationDatabase admin \
|
||||||
|
--db "$targetDB" \
|
||||||
|
--collection "$myCollection" \
|
||||||
|
--out "$fileToImport" \
|
||||||
|
|
||||||
|
|
||||||
|
# Verifica lo stato dell'operazione
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Esportazione completata con successo! $fileToImport"
|
||||||
|
else
|
||||||
|
echo "Errore durante l'esportazione."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
53
scripts/importa_dati.sh
Normal file
53
scripts/importa_dati.sh
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Definizione delle costanti
|
||||||
|
targetDB="FreePlanet"
|
||||||
|
MYDOCKER="mongodb_riso"
|
||||||
|
|
||||||
|
# Percorso del file da importare (specificare il percorso completo)
|
||||||
|
myCollection="$1"
|
||||||
|
fileToImport="$1.json"
|
||||||
|
|
||||||
|
# Leggi il nome della collezione come primo argomento
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Errore: Devi specificare il nome della collezione come argomento."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Leggi le credenziali dal file di configurazione
|
||||||
|
source ~/batch/.my_cfg.ini
|
||||||
|
|
||||||
|
# Verifica che le variabili siano state impostate correttamente
|
||||||
|
if [ -z "$PWDDB" ]; then
|
||||||
|
echo "Errore: La password del database non è stata trovata in .my_cfg.ini."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Messaggio di conferma
|
||||||
|
echo "Stai per importare i dati da '$fileToImport' nella collezione '$myCollection' del database '$targetDB'."
|
||||||
|
read -p "Sei sicuro di voler procedere? (Y/N): " risposta
|
||||||
|
|
||||||
|
# Controllo della risposta dell'utente
|
||||||
|
if [[ "$risposta" != "Y" && "$risposta" != "y" ]]; then
|
||||||
|
echo "Operazione annullata."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Esegui il comando mongoimport dentro il container Docker
|
||||||
|
docker exec $MYDOCKER mongoimport \
|
||||||
|
--username admin \
|
||||||
|
--password "$PWDDB" \
|
||||||
|
--authenticationDatabase admin \
|
||||||
|
--db "$targetDB" \
|
||||||
|
--collection "$myCollection" \
|
||||||
|
--file "$fileToImport" \
|
||||||
|
--jsonArray
|
||||||
|
|
||||||
|
# Verifica lo stato dell'operazione
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Importazione completata con successo!"
|
||||||
|
else
|
||||||
|
echo "Errore durante l'importazione."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"folders": [
|
|
||||||
{
|
|
||||||
"path": "../.."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "../../../newfreeplanet"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "../../../cnm"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"settings": {
|
|
||||||
"search.useIgnoreFiles": false,
|
|
||||||
"search.useParentIgnoreFiles": false,
|
|
||||||
"files.exclude": {
|
|
||||||
"": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,12 +1,28 @@
|
|||||||
const tools = require('../tools/general');
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
|
console.log('__');
|
||||||
|
console.log('__');
|
||||||
|
console.log('__');
|
||||||
|
console.log('__');
|
||||||
|
console.log('****************************************************');
|
||||||
|
console.log('*** AVVIO DEL SERVER NODE.JS ***');
|
||||||
|
console.log('****************************************************');
|
||||||
|
console.log('__');
|
||||||
|
|
||||||
|
if ((process.env.NODE_ENV === 'production')) {
|
||||||
|
console.log(' *** AMBIENTE DI PRODUZIONE !!!!')
|
||||||
|
} else if (process.env.NODE_ENV === 'test') {
|
||||||
|
console.log(' *** ### AMBIENTE DI TEST ')
|
||||||
|
} else if (process.env.NODE_ENV === 'development') {
|
||||||
|
console.log(' *** ### AMBIENTE DI SVILUPPO (LOCALE) ')
|
||||||
|
}
|
||||||
|
console.log('__');
|
||||||
|
|
||||||
// still in app.js
|
// still in app.js
|
||||||
const node_env = process.env.NODE_ENV || 'production';
|
const node_env = process.env.NODE_ENV || 'production';
|
||||||
console.log('node_env=', node_env);
|
|
||||||
|
|
||||||
var file = `.env.${node_env}`;
|
var file = `.env.${node_env}`;
|
||||||
|
|
||||||
|
|
||||||
// GLOBALI (Uguali per TUTTI)
|
// GLOBALI (Uguali per TUTTI)
|
||||||
process.env.LINKVERIF_REG = '/vreg';
|
process.env.LINKVERIF_REG = '/vreg';
|
||||||
process.env.LINK_REQUEST_NEWPASSWORD = '/requestnewpwd';
|
process.env.LINK_REQUEST_NEWPASSWORD = '/requestnewpwd';
|
||||||
@@ -22,466 +38,18 @@ require('dotenv').config({ path: file });
|
|||||||
process.env.DATABASE = process.env.DATABASE || 'FreePlanet';
|
process.env.DATABASE = process.env.DATABASE || 'FreePlanet';
|
||||||
|
|
||||||
console.log('process.env.DOMAIN:', process.env.DOMAIN);
|
console.log('process.env.DOMAIN:', process.env.DOMAIN);
|
||||||
process.env.MONGODB_URI = process.env.DOMAIN + process.env.DATABASE;
|
const domain = process.env.DOMAIN;
|
||||||
console.log('process.env.MONGODB_URI:', process.env.MONGODB_URI);
|
const username = encodeURIComponent(process.env.MONGODB_USER);
|
||||||
|
const password = encodeURIComponent(process.env.MONGODB_PWD);
|
||||||
|
const database = process.env.DATABASE || "test"; // Nome del database, default a 'test'
|
||||||
|
|
||||||
|
if (process.env.AUTH_DB_PASSING === "1") {
|
||||||
|
// replace username and password in the process.env.DOMAIN
|
||||||
/*
|
process.env.MONGODB_URI = process.env.DOMAIN_AUTH.replace('{username}', username).replace('{password}', password) + database;
|
||||||
if (process.env.NODE_ENV === 'production') {
|
process.env.MONGODB_URI_NOPWD = process.env.DOMAIN_AUTH.replace('{username}', username) + database;
|
||||||
// ---------------- AMBIENTE DI PRODUZIONE !!!!!!!!!! --------------------
|
|
||||||
MYAPPS = [
|
|
||||||
{
|
|
||||||
idapp: '1',
|
|
||||||
name: 'FreePlanet',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'paolo.arena77@gmail.com',
|
|
||||||
host: 'https://freeplanet.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/www.freeplanet.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '2',
|
|
||||||
name: 'Associazione Shen',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: 'info@associazioneshen.it',
|
|
||||||
replyTo: 'info@associazioneshen.it',
|
|
||||||
host: 'https://www.associazioneshen.it',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/associazioneshen.it',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '3',
|
|
||||||
name: 'Brigitte MG Dumont',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'http://brigittemgdumont.com',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '4',
|
|
||||||
name: 'Mandala Solidale',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://mandala.freeplanet.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/mandala.freeplanet.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '6',
|
|
||||||
name: 'Mandala per l\'Anima',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'http://mandalaperlanima.eu',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '8',
|
|
||||||
name: 'CentrOlistico Rimini',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@arcodiluce.it',
|
|
||||||
host: 'https://www.centrolisticorimini.it',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/centrolisticorimini.it',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '9',
|
|
||||||
name: 'SalviamoIlPianeta',
|
|
||||||
adminemail: 'salviamoilpianeta2020@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://salviamoilpianeta.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/salviamoilpianeta.app',
|
|
||||||
email_from: 'salviamoilpianeta2020@gmail.com',
|
|
||||||
email_pwd: 'c6f63e7aba9393c73f56e338a7fe5283a73949363662d26bd375dd05b6f6f37ebkw4vINQ0O/4d8JN71aNH3UsyndeFRgyyMvJMVl4iOk=',
|
|
||||||
telegram_key:'1202788747:AAErwzIsD7k-3Yj5AX6ci3p7ELMuyASq4vA',
|
|
||||||
telegram_bot_name: 'SalviamoIlPianeta_bot',
|
|
||||||
pathreg_add:'_sip',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '10',
|
|
||||||
name: 'Comunità Nuovo Mondo',
|
|
||||||
adminemail: 'cnmrimini@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://comunitanuovomondo.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/comunitanuovomondo.app',
|
|
||||||
// email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
// email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
email_from: 'cnmrimini@gmail.com',
|
|
||||||
email_pwd: '9693e200ae56f1119185a29d34079656a628f2663dc108f7d106496ac0042815F+mvJF79KcQcUnF0twoyIg==',
|
|
||||||
telegram_key:'1646348227:AAF2qgpHB4KprhB0HPefazGLyoVGW_i4jTA',
|
|
||||||
telegram_bot_name: 'cnm_mybot',
|
|
||||||
pathreg_add:'_cnm',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '11',
|
|
||||||
name: 'ArtEnergetica',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://www.artenergetica.org',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
} else if (process.env.NODE_ENV === 'test') {
|
|
||||||
// ---------------- AMBIENTE DI TEST --------------------
|
|
||||||
MYAPPS = [
|
|
||||||
{
|
|
||||||
idapp: '1',
|
|
||||||
name: 'FreePlanet',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'paolo.arena77@gmail.com',
|
|
||||||
host: 'https://test.freeplanet.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/www.freeplanet.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '2',
|
|
||||||
name: 'Associazione Shen',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@associazioneshen.it',
|
|
||||||
host: 'http://test.associazioneshen.it',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/associazioneshen.it',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '3',
|
|
||||||
name: 'Brigitte MG Dumont',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://test.brigittemgdumont.com',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '4',
|
|
||||||
name: 'Mandala Solidale',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'https://mandala.freeplanet.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/mandalatest.freeplanet.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '6',
|
|
||||||
name: 'Mandala per l\'Anima',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://test.mandalaperlanima.eu',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '8',
|
|
||||||
name: 'CentrOlistico Rimini',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@arcodiluce.it',
|
|
||||||
host: 'https://www.centrolisticorimini.it',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/centrolisticorimini.it',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '9',
|
|
||||||
name: 'SalviamoIlPianeta (Server Test)',
|
|
||||||
adminemail: 'info.pianetalibero@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://test.salviamoilpianeta.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/test.salviamoilpianeta.app',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'_sip',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '10',
|
|
||||||
name: 'Comunità Nuovo Mondo (Server Test)',
|
|
||||||
adminemail: 'info.pianetalibero@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: '',
|
|
||||||
host: 'https://test.comunitanuovomondo.app',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/test.comunitanuovomondo.app',
|
|
||||||
// email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
// email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'_cnm',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '3',
|
|
||||||
name: 'Brigitte MG Dumont',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://test.brigittemgdumont.com',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '11',
|
|
||||||
name: 'ArtEnergetica',
|
|
||||||
adminemail: '',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'https://www.artenergetica.org',
|
|
||||||
portapp: '0',
|
|
||||||
dir: '/var/www/artenergetica.org',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
} else {
|
} else {
|
||||||
// ---------------- AMBIENTE IN L O C A L E --------------------
|
process.env.MONGODB_URI = domain + database;
|
||||||
MYAPPS = [
|
process.env.MONGODB_URI_NOPWD = domain + database;
|
||||||
{
|
|
||||||
idapp: '1',
|
|
||||||
name: 'FreePlanet',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'paolo.arena77@gmail.com',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8080',
|
|
||||||
dir: '/home/paolo/myproject/freeplanet/dist/spa',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '2',
|
|
||||||
name: 'Associazione Shen',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@associazioneshen.it',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8081',
|
|
||||||
dir: '/home/paolo/myproject/associazioneShen/dist/spa',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '3',
|
|
||||||
name: 'Brigitte',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8082',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '4',
|
|
||||||
name: 'Mandala Solidale',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8084',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '6',
|
|
||||||
name: 'Mandala per l\'Anima',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8083',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '8',
|
|
||||||
name: 'CentrOlistico Rimini',
|
|
||||||
adminemail: 'pao.loarena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
replyTo: 'info@arcodiluce.it',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8086',
|
|
||||||
dir: '/home/paolo/myproject/centrolisticorimini.it/dist/spa',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key:'',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '9',
|
|
||||||
name: 'SalviamoIlPianeta',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8087',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
telegram_key: '',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
|
|
||||||
// telegram_key:'1049833543:AAE1RhGUJVdm0N_vrj0ijHZ04GCkKjl8TuQ',
|
|
||||||
// telegram_bot_name: 'TestSalviamoIlPianeta_bot',
|
|
||||||
pathreg_add:'_sip',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '10',
|
|
||||||
name: 'Comunità Nuovo Mondo',
|
|
||||||
adminemail: 'cnmrimini@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8090',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'cnmrimini@gmail.com',
|
|
||||||
email_pwd: 'bc61ab32a09d22e3a5097aa6668d3c724854c5856de9c713c427017bb89cdb0ctIESmuHr3FCNTLlRAK6d5Q',
|
|
||||||
telegram_key: '',
|
|
||||||
telegram_bot_name: '',
|
|
||||||
pathreg_add:'_cnm',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
idapp: '11',
|
|
||||||
name: 'ArtEnergetica',
|
|
||||||
adminemail: 'paolo.arena77@gmail.com',
|
|
||||||
manageremail: '',
|
|
||||||
host: 'http://localhost',
|
|
||||||
portapp: '8091',
|
|
||||||
dir: '',
|
|
||||||
email_from: 'info.pianetalibero@gmail.com',
|
|
||||||
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
|
|
||||||
pathreg_add:'',
|
|
||||||
abilitanave: false,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*/
|
console.log('process.env.MONGODB_URI:', process.env.MONGODB_URI_NOPWD);
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,20 @@
|
|||||||
const axios = require('axios');
|
|
||||||
|
|
||||||
const server_constants = require('../tools/server_constants');
|
const server_constants = require('../tools/server_constants');
|
||||||
|
|
||||||
const shared_consts = require('../tools/shared_nodejs');
|
const shared_consts = require('../tools/shared_nodejs');
|
||||||
|
|
||||||
const SERVER_A_URL = process.env.SERVER_A_URL || "http://IP_DI_SERVER_A:3000";
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
|
const axios = require('axios');
|
||||||
|
|
||||||
|
const T_Web_Articoli = require('../models/t_web_articoli');
|
||||||
|
const T_Web_StatiProdotto = require('../models/t_web_statiprodotto');
|
||||||
|
const T_Web_TipiFormato = require('../models/t_web_tipiformato');
|
||||||
|
|
||||||
|
const SERVER_A_URL = process.env.SERVER_A_URL || "";
|
||||||
const API_KEY = process.env.API_KEY_MSSQL;
|
const API_KEY = process.env.API_KEY_MSSQL;
|
||||||
|
|
||||||
|
const mongoose = require('mongoose').set('debug', false);
|
||||||
|
|
||||||
// Funzione per ottenere i dati
|
// Funzione per ottenere i dati
|
||||||
const getArticlesSales = async () => {
|
const getArticlesSales = async () => {
|
||||||
try {
|
try {
|
||||||
@@ -18,8 +26,10 @@ const getArticlesSales = async () => {
|
|||||||
COALESCE(o.totVen, 0) as totVen, COALESCE(u.totFat, 0) as totFat,
|
COALESCE(o.totVen, 0) as totVen, COALESCE(u.totFat, 0) as totFat,
|
||||||
COALESCE(p.rank3M, 0) as rank3M, COALESCE(t.fatrank3M, 0) as fatrank3M,
|
COALESCE(p.rank3M, 0) as rank3M, COALESCE(t.fatrank3M, 0) as fatrank3M,
|
||||||
COALESCE(q.rank6M, 0) as rank6M, COALESCE(r.rank1Y, 0) as rank1Y,
|
COALESCE(q.rank6M, 0) as rank6M, COALESCE(r.rank1Y, 0) as rank1Y,
|
||||||
COALESCE(t.fat3mesi, 0) as fatLast3M, COALESCE(p.venduti3mesi, 0) as vLast3M,
|
COALESCE(t.fat3mesi, 0) as fatLast3M,
|
||||||
COALESCE(q.venduti6mesi, 0) as vLast6M, COALESCE(r.venduti1anno, 0) as vLastY,
|
COALESCE(t2.fat6mesi, 0) as fatLast6M,
|
||||||
|
COALESCE(p.venduti3mesi, 0) as vLast3M,
|
||||||
|
COALESCE(q.venduti6mesi, 0) as vLast6M, COALESCE(r.venduti1anno, 0) as vLast1Y,
|
||||||
s.ultimoOrdine as dataUltimoOrdine
|
s.ultimoOrdine as dataUltimoOrdine
|
||||||
FROM T_WEB_Articoli a
|
FROM T_WEB_Articoli a
|
||||||
LEFT JOIN (SELECT CodArticoloGM, SUM(Qta) as totVen FROM T_WEB_Ordini GROUP BY CodArticoloGM) o
|
LEFT JOIN (SELECT CodArticoloGM, SUM(Qta) as totVen FROM T_WEB_Ordini GROUP BY CodArticoloGM) o
|
||||||
@@ -67,7 +77,24 @@ exports.exportArticlesSalesByJSON = async (req, res) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatDate = (dateValue) => {
|
exports.getTableContent = async (options) => {
|
||||||
|
try {
|
||||||
|
// Chiama getTableContent, se ritorna errore hangup, allora attendi 2 secondi e poi richiamala.
|
||||||
|
const tableContent = await this.getTableContentBase(options);
|
||||||
|
console.log(' uscito dalla funzione getTableContentBase ... ')
|
||||||
|
return tableContent;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error: ', error?.message);
|
||||||
|
if (error.message === 'socket hang up') {
|
||||||
|
console.log('Error: hangup, waiting 2 seconds and retrying...');
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 2000));
|
||||||
|
return await this.getTableContent(options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
exports.formatDate = (dateValue) => {
|
||||||
const date = new Date(dateValue);
|
const date = new Date(dateValue);
|
||||||
const day = String(date.getDate()).padStart(2, '0');
|
const day = String(date.getDate()).padStart(2, '0');
|
||||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||||
@@ -75,14 +102,30 @@ const formatDate = (dateValue) => {
|
|||||||
return `${day}/${month}/${year}`;
|
return `${day}/${month}/${year}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getTableContent = async (options) => {
|
exports.getModelByNameTable = (nameTable) => {
|
||||||
|
switch (nameTable) {
|
||||||
|
case 'T_Web_Articoli':
|
||||||
|
return T_Web_Articoli;
|
||||||
|
case 'T_Web_StatiProdotto':
|
||||||
|
return T_Web_StatiProdotto;
|
||||||
|
case 'T_Web_TipiFormato':
|
||||||
|
return T_Web_TipiFormato;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getTableContentBase = async (options) => {
|
||||||
try {
|
try {
|
||||||
|
const myurl = SERVER_A_URL + '/query';
|
||||||
|
console.log('getTableContentBase...', myurl)
|
||||||
// Verifica se la tabella esiste
|
// Verifica se la tabella esiste
|
||||||
const checkTableQuery = `SELECT COUNT(*) as tableExists FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '${options.nameTable}'`;
|
const checkTableQuery = `SELECT COUNT(*) as tableExists FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '${options.nameTable}'`;
|
||||||
const checkResponse = await axios.post(SERVER_A_URL + '/query', { query: checkTableQuery }, {
|
const checkResponse = await axios.post(myurl, { query: checkTableQuery }, {
|
||||||
headers: { 'x-api-key': API_KEY }
|
headers: { 'x-api-key': API_KEY }
|
||||||
});
|
});
|
||||||
if (!checkResponse.data || checkResponse.data.length === 0 || checkResponse.data[0].tableExists === 0) {
|
console.log(' risposta 1...')
|
||||||
|
if (!checkResponse?.data || checkResponse?.data.length === 0 || checkResponse?.data[0].tableExists === 0) {
|
||||||
return `La tabella '${options.nameTable}' non esiste.`;
|
return `La tabella '${options.nameTable}' non esiste.`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,6 +134,7 @@ const getTableContent = async (options) => {
|
|||||||
const columnsResponse = await axios.post(SERVER_A_URL + '/query', { query: columnsQuery }, {
|
const columnsResponse = await axios.post(SERVER_A_URL + '/query', { query: columnsQuery }, {
|
||||||
headers: { 'x-api-key': API_KEY }
|
headers: { 'x-api-key': API_KEY }
|
||||||
});
|
});
|
||||||
|
console.log(' risposta 2 (schema)...')
|
||||||
const tableColumns = columnsResponse.data.map(col => col.COLUMN_NAME);
|
const tableColumns = columnsResponse.data.map(col => col.COLUMN_NAME);
|
||||||
|
|
||||||
// Mappatura per unire i campi (ID e Descrizione)
|
// Mappatura per unire i campi (ID e Descrizione)
|
||||||
@@ -107,15 +151,62 @@ const getTableContent = async (options) => {
|
|||||||
// Costruisce la query per recuperare i record
|
// Costruisce la query per recuperare i record
|
||||||
let dataQuery = "";
|
let dataQuery = "";
|
||||||
|
|
||||||
let columnsToShow = 'T.*';
|
let records = [];
|
||||||
if (options.fieldGM) {
|
|
||||||
columnsToShow = 'T.' + options.fieldGM;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options.nameTable.toLowerCase() === 't_web_articoli') {
|
if (options?.usaDBGMLocale) {
|
||||||
if (true) {
|
|
||||||
dataQuery = `
|
// Cerca il modello corrispondente alla tabella se esiste
|
||||||
SELECT TOP ${options.numrec}
|
let mymodel = this.getModelByNameTable(options.nameTable);
|
||||||
|
if (!mymodel) {
|
||||||
|
// fai una query sul db locale mongodb dela tabella chiamata "options.nameTable"
|
||||||
|
mymodel = mongoose.model(options.nameTable, new mongoose.Schema({}, { strict: false }));
|
||||||
|
if (!mymodel)
|
||||||
|
return `Il modello per la tabella '${options.nameTable}' non esiste.`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.aggregation) {
|
||||||
|
console.log('options.aggregation', options.aggregation);
|
||||||
|
records = await mymodel.aggregate(options.aggregation);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
const pipeline = [];
|
||||||
|
|
||||||
|
// Filtro base se specificato
|
||||||
|
if (options.where) {
|
||||||
|
const whereConditions = options.where;
|
||||||
|
pipeline.push({ $match: whereConditions });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.sort) {
|
||||||
|
pipeline.push({ $sort: options.sort });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.limit) {
|
||||||
|
pipeline.push({ $limit: options.limit });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Selezione dei campi
|
||||||
|
if (options.fieldGM) {
|
||||||
|
pipeline.push({ $project: { [options.fieldGM]: 1 } });
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(' aggregate pipeline...', pipeline);
|
||||||
|
records = await mymodel.aggregate(pipeline);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('results', records ? records[0] : ' non ricevuto');
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
let columnsToShow = 'T.*';
|
||||||
|
if (options.fieldGM) {
|
||||||
|
columnsToShow = 'T.' + options.fieldGM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.nameTable.toLowerCase() === 't_web_articoli') {
|
||||||
|
if (true) {
|
||||||
|
dataQuery = `
|
||||||
|
SELECT TOP ${options.numrec || 10000}
|
||||||
${columnsToShow}
|
${columnsToShow}
|
||||||
` + (options.campispeciali ? `
|
` + (options.campispeciali ? `
|
||||||
,f.DescrizioneStatoProdotto
|
,f.DescrizioneStatoProdotto
|
||||||
@@ -125,14 +216,14 @@ const getTableContent = async (options) => {
|
|||||||
,z.AutoriCompleti
|
,z.AutoriCompleti
|
||||||
,i2.DescrArgomento
|
,i2.DescrArgomento
|
||||||
,z3.CasaEditrice` : ``) + (options.showQtaDisponibile ? ` ,q.QtaDisponibile ` : ``) +
|
,z3.CasaEditrice` : ``) + (options.showQtaDisponibile ? ` ,q.QtaDisponibile ` : ``) +
|
||||||
` FROM T_WEB_Articoli T
|
` FROM T_WEB_Articoli T
|
||||||
JOIN(
|
JOIN(
|
||||||
SELECT IdArticolo, MAX(DataOra) AS data
|
SELECT IdArticolo, MAX(DataOra) AS data
|
||||||
FROM T_WEB_Articoli
|
FROM T_WEB_Articoli
|
||||||
GROUP BY IdArticolo
|
GROUP BY IdArticolo
|
||||||
) b ON T.IdArticolo = b.IdArticolo AND T.DataOra = b.data `
|
) b ON T.IdArticolo = b.IdArticolo AND T.DataOra = b.data `
|
||||||
+ (options.campispeciali ?
|
+ (options.campispeciali ?
|
||||||
` LEFT JOIN(
|
` LEFT JOIN(
|
||||||
SELECT e.IdStatoProdotto, e.Descrizione as DescrizioneStatoProdotto
|
SELECT e.IdStatoProdotto, e.Descrizione as DescrizioneStatoProdotto
|
||||||
FROM T_WEB_StatiProdotto e
|
FROM T_WEB_StatiProdotto e
|
||||||
JOIN(
|
JOIN(
|
||||||
@@ -212,9 +303,9 @@ const getTableContent = async (options) => {
|
|||||||
GROUP BY IdMarchioEditoriale
|
GROUP BY IdMarchioEditoriale
|
||||||
) aa3 ON a3.IdMarchioEditoriale = aa3.IdMarchioEditoriale AND a3.DataOra = aa3.maxData
|
) aa3 ON a3.IdMarchioEditoriale = aa3.IdMarchioEditoriale AND a3.DataOra = aa3.maxData
|
||||||
) z3 ON T.IdMarchioEditoriale = z3.IdMarchioEditoriale `
|
) z3 ON T.IdMarchioEditoriale = z3.IdMarchioEditoriale `
|
||||||
: ``)
|
: ``)
|
||||||
+ (options.showQtaDisponibile ?
|
+ (options.showQtaDisponibile ?
|
||||||
` LEFT JOIN(
|
` LEFT JOIN(
|
||||||
SELECT o.Codice, o.QtaDisponibile
|
SELECT o.Codice, o.QtaDisponibile
|
||||||
FROM T_WEB_Disponibile o
|
FROM T_WEB_Disponibile o
|
||||||
JOIN(
|
JOIN(
|
||||||
@@ -223,8 +314,8 @@ const getTableContent = async (options) => {
|
|||||||
GROUP BY Codice
|
GROUP BY Codice
|
||||||
) p ON o.Codice = p.Codice AND o.DataOra = p.data1
|
) p ON o.Codice = p.Codice AND o.DataOra = p.data1
|
||||||
) q ON T.IdArticolo = q.Codice` : ``)
|
) q ON T.IdArticolo = q.Codice` : ``)
|
||||||
} else {
|
} else {
|
||||||
dataQuery += `
|
dataQuery += `
|
||||||
SELECT TOP ${options.numrec}
|
SELECT TOP ${options.numrec}
|
||||||
T.*
|
T.*
|
||||||
FROM T_WEB_Articoli T
|
FROM T_WEB_Articoli T
|
||||||
@@ -234,22 +325,28 @@ const getTableContent = async (options) => {
|
|||||||
GROUP BY IdArticolo
|
GROUP BY IdArticolo
|
||||||
) b ON T.IdArticolo = b.IdArticolo AND T.DataOra = b.data
|
) b ON T.IdArticolo = b.IdArticolo AND T.DataOra = b.data
|
||||||
`;
|
`;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dataQuery = `SELECT TOP ${options.numrec || 10000} * FROM ${options.nameTable} `;
|
||||||
}
|
}
|
||||||
} else {
|
if (options.where && options.where.trim() !== "") {
|
||||||
dataQuery = `SELECT TOP ${options.numrec} * FROM ${options.nameTable} `;
|
dataQuery += ` WHERE ${options.where} `;
|
||||||
}
|
}
|
||||||
if (options.where && options.where.trim() !== "") {
|
|
||||||
dataQuery += ` WHERE ${options.where} `;
|
console.log('dataQuery', dataQuery);
|
||||||
|
|
||||||
|
// Esegue la query per recuperare i dati
|
||||||
|
// console.log('dataQuery', dataQuery);
|
||||||
|
const dataResponse = await axios.post(SERVER_A_URL + '/query', { query: dataQuery }, {
|
||||||
|
headers: { 'x-api-key': API_KEY }
|
||||||
|
});
|
||||||
|
|
||||||
|
records = dataResponse?.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Esegue la query per recuperare i dati
|
|
||||||
console.log('dataQuery', dataQuery);
|
|
||||||
const dataResponse = await axios.post(SERVER_A_URL + '/query', { query: dataQuery }, {
|
|
||||||
headers: { 'x-api-key': API_KEY }
|
|
||||||
});
|
|
||||||
const records = dataResponse.data;
|
|
||||||
if (!records || records.length === 0) {
|
if (!records || records.length === 0) {
|
||||||
return `Nessun record trovato nella tabella '${options.nameTable}'.`;
|
console.log(`Nessun record trovato per la tabella ${options.nameTable}.`);
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determina quali colonne visualizzare.
|
// Determina quali colonne visualizzare.
|
||||||
@@ -272,13 +369,13 @@ const getTableContent = async (options) => {
|
|||||||
.map(item => {
|
.map(item => {
|
||||||
const trimmed = item.trim();
|
const trimmed = item.trim();
|
||||||
const parsed = Date.parse(trimmed);
|
const parsed = Date.parse(trimmed);
|
||||||
return !isNaN(parsed) ? formatDate(trimmed) : trimmed;
|
return !isNaN(parsed) ? this.formatDate(trimmed) : trimmed;
|
||||||
})
|
})
|
||||||
.join(', ');
|
.join(', ');
|
||||||
} else {
|
} else {
|
||||||
const parsed = Date.parse(value);
|
const parsed = Date.parse(value);
|
||||||
if (!isNaN(parsed)) {
|
if (!isNaN(parsed)) {
|
||||||
value = formatDate(value);
|
value = this.formatDate(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -295,7 +392,7 @@ const getTableContent = async (options) => {
|
|||||||
// Se c'è un solo record, visualizza una lista di chiavi e valori
|
// Se c'è un solo record, visualizza una lista di chiavi e valori
|
||||||
const record = records[0];
|
const record = records[0];
|
||||||
output += `
|
output += `
|
||||||
< table border = '1' style = "border-collapse: collapse; width: 50%;" >
|
<table border='1' style="border-collapse: collapse;" >
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="padding: 8px; background-color: #f2f2f2;">Campo</th>
|
<th style="padding: 8px; background-color: #f2f2f2;">Campo</th>
|
||||||
@@ -314,7 +411,7 @@ const getTableContent = async (options) => {
|
|||||||
});
|
});
|
||||||
output += `
|
output += `
|
||||||
</tbody>
|
</tbody>
|
||||||
</table >
|
</table>
|
||||||
`;
|
`;
|
||||||
} else {
|
} else {
|
||||||
// Se ci sono più record, visualizza una tabella con intestazioni
|
// Se ci sono più record, visualizza una tabella con intestazioni
|
||||||
@@ -345,9 +442,26 @@ const getTableContent = async (options) => {
|
|||||||
records.forEach(record => {
|
records.forEach(record => {
|
||||||
let myrec = {}
|
let myrec = {}
|
||||||
|
|
||||||
displayColumns.forEach(column => {
|
if (options.recordraw) {
|
||||||
myrec[column] = `${getDisplayValue(record, column)} `;
|
myrec = record;
|
||||||
});
|
} else {
|
||||||
|
|
||||||
|
displayColumns.forEach(column => {
|
||||||
|
const value = record[column];
|
||||||
|
if (value !== undefined && value !== null) {
|
||||||
|
const type = typeof value;
|
||||||
|
if (type === 'number' && !mergedMapping[column]) {
|
||||||
|
myrec[column] = value;
|
||||||
|
} else if (type === 'boolean') {
|
||||||
|
myrec[column] = value;
|
||||||
|
} else if (value instanceof Date) {
|
||||||
|
myrec[column] = this.formatDate(value);
|
||||||
|
} else {
|
||||||
|
myrec[column] = `${getDisplayValue(record, column)}`.trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
output.push(myrec)
|
output.push(myrec)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -355,7 +469,8 @@ const getTableContent = async (options) => {
|
|||||||
return output;
|
return output;
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Errore nel recupero della tabella: ", error.message);
|
output = `${error?.response?.data?.error || error?.stack || error.message}`;
|
||||||
|
console.error("Errore nel recupero della tabella: ", `${error.response.data.error || error.stack || error.message}`);
|
||||||
if (options.outhtml) {
|
if (options.outhtml) {
|
||||||
output = `
|
output = `
|
||||||
|
|
||||||
@@ -409,23 +524,226 @@ const getTableContent = async (options) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const setTableContent = async (options) => {
|
||||||
|
try {
|
||||||
|
// checkPermissions()
|
||||||
|
|
||||||
|
const esegui = true
|
||||||
|
|
||||||
|
if (esegui) {
|
||||||
|
|
||||||
|
// Verifica se la tabella esiste
|
||||||
|
const checkTableQuery = `SELECT COUNT(*) as tableExists FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '${options.nameTable}'`;
|
||||||
|
const checkResponse = await axios.post(SERVER_A_URL + '/query', { query: checkTableQuery }, {
|
||||||
|
headers: { 'x-api-key': API_KEY }
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!checkResponse.data || checkResponse.data.length === 0 || checkResponse.data[0].tableExists === 0) {
|
||||||
|
return `La tabella '${options.nameTable}' non esiste.`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Costruisce la query per inserire o aggiornare i record
|
||||||
|
let dataQuery = "";
|
||||||
|
if (options.insertMode) {
|
||||||
|
// Modalità INSERT
|
||||||
|
const columns = Object.keys(options.data);
|
||||||
|
const values = columns.map(col => `'${options.data[col]}'`).join(", ");
|
||||||
|
dataQuery = `
|
||||||
|
INSERT INTO ${options.nameTable} (${columns.join(", ")})
|
||||||
|
VALUES (${values});
|
||||||
|
`;
|
||||||
|
} else {
|
||||||
|
// Modalità UPDATE
|
||||||
|
const updateFields = Object.keys(options.data)
|
||||||
|
.map(col => `${col} = '${options.data[col]}'`)
|
||||||
|
.join(", ");
|
||||||
|
const whereClause = options.where ? `WHERE ${options.where}` : "";
|
||||||
|
dataQuery = `
|
||||||
|
UPDATE ${options.nameTable}
|
||||||
|
SET ${updateFields}
|
||||||
|
${whereClause};
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('dataQuery', dataQuery);
|
||||||
|
|
||||||
|
// Esegue la query per inserire o aggiornare i dati
|
||||||
|
const dataResponse = await axios.post(SERVER_A_URL + '/query', { query: dataQuery }, {
|
||||||
|
headers: { 'x-api-key': API_KEY }
|
||||||
|
});
|
||||||
|
|
||||||
|
if (dataResponse.data && dataResponse.data.affectedRows > 0) {
|
||||||
|
return `Operazione completata con successo su '${options.nameTable}'.`;
|
||||||
|
} else {
|
||||||
|
return `Nessun record modificato nella tabella '${options.nameTable}'.`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Errore nell'inserimento o aggiornamento della tabella: ", error.message);
|
||||||
|
if (options.outhtml) {
|
||||||
|
output = `
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Errore nell'inserimento o aggiornamento della Tabella ${options.nameTable}</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
color: #333;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
.error-container {
|
||||||
|
background-color: #ffe6e6;
|
||||||
|
border: 1px solid #ff4d4d;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||||
|
max-width: 800px;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
.error-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #d8000c;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.error-message {
|
||||||
|
font-size: 16px;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
background: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="error-container">
|
||||||
|
<div class="error-title">Errore nell'inserimento o aggiornamento della Tabella ${options.nameTable}</div>
|
||||||
|
<div class="error-message">
|
||||||
|
${error.response.data.error || error.stack || error.message}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
`;
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
return "Errore nell'inserimento o aggiornamento della tabella.";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const checkPermissions = async (options) => {
|
||||||
|
try {
|
||||||
|
const dataQuery = `
|
||||||
|
SELECT
|
||||||
|
dp.name AS UserName,
|
||||||
|
dp.type_desc AS UserType,
|
||||||
|
o.name AS ObjectName,
|
||||||
|
p.permission_name,
|
||||||
|
p.state_desc AS PermissionState
|
||||||
|
FROM
|
||||||
|
sys.database_permissions p
|
||||||
|
JOIN
|
||||||
|
sys.objects o ON p.major_id = o.object_id
|
||||||
|
JOIN
|
||||||
|
sys.database_principals dp ON p.grantee_principal_id = dp.principal_id
|
||||||
|
WHERE
|
||||||
|
o.name = 'T_WEB_Articoli';
|
||||||
|
`;
|
||||||
|
|
||||||
|
console.log('checkPermissions query:', dataQuery);
|
||||||
|
|
||||||
|
// Esegue la query per inserire o aggiornare i dati
|
||||||
|
const dataResponse = await axios.post(SERVER_A_URL + '/query', { query: dataQuery }, {
|
||||||
|
headers: { 'x-api-key': API_KEY }
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('checkPermissions result:', dataResponse.data);
|
||||||
|
|
||||||
|
if (dataResponse.data && dataResponse.data.affectedRows > 0) {
|
||||||
|
return `Operazione completata con successo.`;
|
||||||
|
} else {
|
||||||
|
return `Nessun permesso.`;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Errore nel check dei Permessi: ", error.message);
|
||||||
|
if (options.outhtml) {
|
||||||
|
output = `
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Errore nell'inserimento o aggiornamento della Tabella ${options.nameTable}</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
color: #333;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
.error-container {
|
||||||
|
background-color: #ffe6e6;
|
||||||
|
border: 1px solid #ff4d4d;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||||
|
max-width: 800px;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
.error-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #d8000c;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.error-message {
|
||||||
|
font-size: 16px;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
background: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="error-container">
|
||||||
|
<div class="error-title">Errore nell'inserimento o aggiornamento della Tabella ${options.nameTable}</div>
|
||||||
|
<div class="error-message">
|
||||||
|
${error.response.data.error || error.stack || error.message}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
`;
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
return "Errore nell'inserimento o aggiornamento della tabella.";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Endpoint per mostrare i dati della tabella
|
// Endpoint per mostrare i dati della tabella
|
||||||
exports.viewTable = async (req, res) => {
|
exports.viewTable = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const options = req.body.options;
|
const options = req.body.options;
|
||||||
const tableContent = await getTableContent(options);
|
const tableContent = await this.getTableContent(options);
|
||||||
|
|
||||||
let out = {};
|
let out = {};
|
||||||
|
|
||||||
if (options.outhtml) {
|
if (options.outhtml) {
|
||||||
out = `
|
out = `
|
||||||
<h2>Tabella: ${options.nameTable}</h2>
|
<h2 class="text-center">Tabella: ${options.nameTable}</h2>
|
||||||
${tableContent}
|
<div class="text-h7 row justify-center text-blue">Query: ${options.where}<br></div>
|
||||||
|
<div class="row justify-center">
|
||||||
|
${tableContent}
|
||||||
|
</div>
|
||||||
`
|
`
|
||||||
} else {
|
} else {
|
||||||
out = tableContent;
|
out = tableContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tableContent && tableContent.length > 0) {
|
||||||
|
if (options.updatelocaldb) {
|
||||||
|
this.updateLocalDb(tableContent[0], options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return res.send({ code: server_constants.RIS_CODE_OK, data: out });
|
return res.send({ code: server_constants.RIS_CODE_OK, data: out });
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -434,17 +752,94 @@ exports.viewTable = async (req, res) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.updateLocalDb = async (tableContent, options) => {
|
||||||
|
try {
|
||||||
|
|
||||||
|
const ProductInfo = require('../models/productInfo');
|
||||||
|
const CatProd = require('../models/catprod');
|
||||||
|
|
||||||
|
let recproductInfo = {
|
||||||
|
code: tableContent.Ean13.trim(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let risrecUpdated = null;
|
||||||
|
|
||||||
|
const recfound = await ProductInfo.findOne({ code: recproductInfo.code }).lean();
|
||||||
|
if (recfound) {
|
||||||
|
|
||||||
|
ListaArgomenti = tableContent.ListaArgomenti;
|
||||||
|
|
||||||
|
let arrayPulito = ListaArgomenti
|
||||||
|
.trim() // Rimuove gli spazi all'inizio e alla fine
|
||||||
|
.replace(/[\(\)]/g, '') // Rimuove le parentesi tonde
|
||||||
|
.split(','); // Divide la stringa in un array usando la virgola come separatore
|
||||||
|
|
||||||
|
if (arrayPulito && arrayPulito.length > 0) {
|
||||||
|
let aggiornacat = false;
|
||||||
|
const precCatProds = recfound.idCatProds;
|
||||||
|
let reccatprods = [];
|
||||||
|
for (let i = 0; i < arrayPulito.length; i++) {
|
||||||
|
const idArgomento = parseInt(arrayPulito[i]);
|
||||||
|
reccateg = await CatProd.findOne({ idArgomento }).lean();
|
||||||
|
|
||||||
|
if (reccateg) {
|
||||||
|
// aggiungi solo se non esiste già
|
||||||
|
if (!reccatprods.includes(reccateg._id)) {
|
||||||
|
reccatprods.push(reccateg._id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ora controlla se l'array reccatprods e' diverso da precCatProds
|
||||||
|
if (reccatprods.length !== precCatProds.length) {
|
||||||
|
aggiornacat = true;
|
||||||
|
} else {
|
||||||
|
for (let i = 0; i < reccatprods.length; i++) {
|
||||||
|
if (reccatprods[i].toString() !== precCatProds[i].toString()) {
|
||||||
|
aggiornacat = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aggiornacat) {
|
||||||
|
recproductInfo.idCatProds = reccatprods;
|
||||||
|
aggiorna = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tableContent.DataPubblicazione.trim()) {
|
||||||
|
recproductInfo.date_pub = new Date(tools.convertiDataItaliana(tableContent.DataPubblicazione.trim()).date);
|
||||||
|
// convert data to timestamp
|
||||||
|
recproductInfo.date_pub_ts = recproductInfo.date_pub.getTime();
|
||||||
|
aggiorna = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aggiorna) {
|
||||||
|
risrecUpdated = await ProductInfo.findOneAndUpdate({ code: recproductInfo.code }, { $set: recproductInfo }, { new: true, upsert: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
return risrecUpdated;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error: ', e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Endpoint per mostrare i dati della tabella
|
// Endpoint per mostrare i dati della tabella
|
||||||
exports.queryTable = async (req, res) => {
|
exports.queryTable = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const options = req.body.options;
|
const options = req.body.options;
|
||||||
const tableContent = await getTableContent(options);
|
const tableContent = await this.getTableContent(options);
|
||||||
|
|
||||||
let out = {};
|
let out = {};
|
||||||
|
|
||||||
if (options.outhtml) {
|
if (options.outhtml) {
|
||||||
out = `
|
out = `
|
||||||
<h2>Tabella: ${options.nameTable}</h2>
|
<h2>Tabella: ${options.nameTable}</h2>
|
||||||
|
<div class="text-h7 row justify-center text-blue">Query: ${options.where}<br></div>
|
||||||
${tableContent}
|
${tableContent}
|
||||||
`
|
`
|
||||||
} else {
|
} else {
|
||||||
@@ -458,3 +853,107 @@ exports.queryTable = async (req, res) => {
|
|||||||
return res.send({ code: server_constants.RIS_CODE_ERR, error });
|
return res.send({ code: server_constants.RIS_CODE_ERR, error });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
// Endpoint per salvare i dati di una tabella
|
||||||
|
exports.saveTable = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const options = req.body.options;
|
||||||
|
const tableContent = await setTableContent(options);
|
||||||
|
|
||||||
|
let out = {};
|
||||||
|
|
||||||
|
if (options.outhtml) {
|
||||||
|
out = `
|
||||||
|
<h2 class="text-center">Tabella: ${options.nameTable}</h2>
|
||||||
|
<div class="text-h7 row justify-center text-blue">Query: ${options.where}<br></div>
|
||||||
|
<div class="row justify-center">
|
||||||
|
${tableContent}
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
} else {
|
||||||
|
out = tableContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.send({ code: server_constants.RIS_CODE_OK, data: out });
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error: ', error);
|
||||||
|
return res.send({ code: server_constants.RIS_CODE_ERR, error });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.mssqlmigrateTables = async (req) => {
|
||||||
|
const MssqlMigrator = require('../modules/MssqlMigrator'); // Importa la classe Macro
|
||||||
|
|
||||||
|
try {
|
||||||
|
const options = req.body.mydata.options;
|
||||||
|
let listaTabelle = [];
|
||||||
|
if (options?.parte1 || options?.tutte) {
|
||||||
|
listaTabelle.push({ table: 'T_WEB_TitoliOriginali', usaDataOra: true, fieldId: 'IdTitoloOriginale' });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_TestateOrdini', usaDataOra: false });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Ordini', usaDataOra: false });
|
||||||
|
listaTabelle.push({ table: 'T_WOO_TestateOrdini', usaDataOra: false });
|
||||||
|
listaTabelle.push({ table: 'T_WOO_Ordini', usaDataOra: false });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Articoli', usaDataOra: true, fieldId: 'IdArticolo' });
|
||||||
|
}
|
||||||
|
if (options?.parte2 || options?.tutte) {
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Disponibile', usaDataOra: true, fieldId: 'Codice' });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Argomenti', usaDataOra: true, fieldId: 'IdArgomento' });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_ClientiInternet', usaDataOra: false });
|
||||||
|
listaTabelle.push({ table: 'T_WOO_Clienti', usaDataOra: false });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Autori', usaDataOra: true, fieldId: 'IdAutore' });
|
||||||
|
}
|
||||||
|
if (options?.parte3 || options?.tutte) {
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Collane', usaDataOra: true, fieldId: 'IdCollana' });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_MarchiEditoriali', usaDataOra: true, fieldId: 'IdMarchioEditoriale' });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_StatiProdotto', usaDataOra: true, fieldId: 'IdStatoProdotto' });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_TipiFormato', usaDataOra: true, fieldId: 'IdTipoFormato' });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Tipologie', usaDataOra: true, fieldId: 'IdTipologia' });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_ArticoliFatturati', usaDataOra: false });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_IdInternetFatturati', usaDataOra: false });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Edizioni', usaDataOra: true, fieldId: 'IdEdizione' });
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Contratti', usaDataOra: true, fieldId: 'IdArticolo' });
|
||||||
|
}
|
||||||
|
if (options?.test) {
|
||||||
|
listaTabelle.push({ table: 'T_WEB_Articoli', usaDataOra: true, fieldId: 'IdArticolo' });
|
||||||
|
}
|
||||||
|
|
||||||
|
const migrator = new MssqlMigrator();
|
||||||
|
return await migrator.migrateTables(listaTabelle);
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e.message);
|
||||||
|
return 'Errore: ' + e.message
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
exports.updateAllBook = async (idapp, options) => {
|
||||||
|
|
||||||
|
const Macro = require('../modules/Macro'); // Importa la classe Macro
|
||||||
|
|
||||||
|
try {
|
||||||
|
const macro = new Macro(idapp); // Crea un'istanza della classe Macro
|
||||||
|
options.idapp = idapp;
|
||||||
|
return await macro.updateLocalDbFromGM_T_Web_Articoli(options);
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e.message);
|
||||||
|
return e.message;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.updateAllBookRoute = async (req, res) => {
|
||||||
|
|
||||||
|
try {
|
||||||
|
const idapp = req.body.idapp;
|
||||||
|
const options = req.body.options;
|
||||||
|
const result = await this.updateAllBook(idapp, options);
|
||||||
|
|
||||||
|
return res.status(200).send({ data: result });
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e.message);
|
||||||
|
if (res) {
|
||||||
|
return res.status(400).send(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,75 +1,84 @@
|
|||||||
var mongoose = require('mongoose').set('debug', false)
|
var mongoose = require('mongoose').set('debug', process.env.VITE_DEBUG);
|
||||||
|
|
||||||
|
// Configurazione globale di Mongoose
|
||||||
mongoose.Promise = global.Promise;
|
mongoose.Promise = global.Promise;
|
||||||
|
|
||||||
mongoose.level = "";
|
mongoose.level = "";
|
||||||
|
|
||||||
|
|
||||||
mongoose.plugin(schema => {
|
|
||||||
schema.options.usePushEach = true
|
|
||||||
});
|
|
||||||
|
|
||||||
mongoose.set('debug', false);
|
mongoose.set('debug', false);
|
||||||
|
mongoose.set('strictQuery', false);
|
||||||
|
|
||||||
|
// Opzioni di connessione
|
||||||
let options = {
|
let options = {
|
||||||
// user: process.env.UDB,
|
maxPoolSize: 5,
|
||||||
// pass: process.env.PDB,
|
// useNewUrlParser: true,
|
||||||
// useMongoClient: true,
|
// useUnifiedTopology: true,
|
||||||
// useMongoClient: false,
|
serverSelectionTimeoutMS: 20000, // Timeout di 30 secondi per la selezione del server
|
||||||
useNewUrlParser: true,
|
|
||||||
// useFindAndModify: true,
|
|
||||||
useFindAndModify: false,
|
|
||||||
// useCreateIndex: true,
|
|
||||||
useUnifiedTopology: true,
|
|
||||||
|
|
||||||
promiseLibrary: require('bluebird'),
|
|
||||||
|
|
||||||
// autoIndex: false, // Don't build indexes
|
|
||||||
// reconnectTries: Number.MAX_VALUE, // Never stop trying to reconnect
|
|
||||||
// reconnectInterval: 500, // Reconnect every 500ms
|
|
||||||
// poolSize: 10, // Maintain up to 10 socket connections
|
|
||||||
// // If not connected, return errors immediately rather than waiting for reconnect
|
|
||||||
// bufferMaxEntries: 0,
|
|
||||||
// connectTimeoutMS: 10000, // Give up initial connection after 10 seconds
|
|
||||||
// socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
|
|
||||||
// family: 4 // Use IPv4, skip trying IPv6
|
|
||||||
|
|
||||||
// keepAlive: true, // keepAlive is true by default since mongoose 5.2.0
|
|
||||||
// keepAliveInitialDelay: 300000 // keepAliveInitialDelay is the number of milliseconds to wait before initiating keepAlive on the socket.
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Controllo dell'autenticazione
|
||||||
console.log('process.env.AUTH_MONGODB', process.env.AUTH_MONGODB);
|
console.log('process.env.AUTH_MONGODB', process.env.AUTH_MONGODB);
|
||||||
|
|
||||||
|
const username = encodeURIComponent(process.env.MONGODB_USER);
|
||||||
|
const password = encodeURIComponent(process.env.MONGODB_PWD);
|
||||||
|
|
||||||
|
|
||||||
if (process.env.AUTH_MONGODB === '1') {
|
if (process.env.AUTH_MONGODB === '1') {
|
||||||
options.auth = {
|
options.auth = {
|
||||||
authSource: "admin",
|
authSource: "admin",
|
||||||
poolSize: 10,
|
username,
|
||||||
user: process.env.MONGODB_USER,
|
password
|
||||||
password: process.env.MONGODB_PWD,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.auth && options.auth.user) {
|
if (options.auth && options.auth.username) {
|
||||||
console.log('MongoDb con Authenticazione:', options.auth.user, '******');
|
console.log('MongoDb con Authenticazione:', options.auth.username, '******');
|
||||||
} else {
|
} else {
|
||||||
console.log('### MongoDb SENZA Authenticazione !!! ');
|
console.log('### MongoDb SENZA Authenticazione !!! ');
|
||||||
}
|
}
|
||||||
|
|
||||||
const db = mongoose.connection;
|
// Stampa delle informazioni di sistema
|
||||||
|
|
||||||
console.log('Node Version ' + process.version);
|
console.log('Node Version ' + process.version);
|
||||||
console.log('Mongoose Version ' + mongoose.version);
|
console.log('Mongoose Version ' + mongoose.version);
|
||||||
|
|
||||||
connectionUrl = process.env.MONGODB_URI;
|
// URL di connessione
|
||||||
|
const connectionUrl = process.env.MONGODB_URI;
|
||||||
|
console.log('Connessione a ' + process.env.MONGODB_URI_NOPWD + ' in corso...');
|
||||||
|
|
||||||
console.log('Connessione a ' + connectionUrl + ' in corso...');
|
// Funzione per connettersi al database con retry
|
||||||
mongoose.connect(connectionUrl, options);
|
async function connectToDatabase(uri, opts) {
|
||||||
|
let isConnected = false;
|
||||||
|
|
||||||
db.on('error', console.error.bind(console, 'connection error:'));
|
while (!isConnected) {
|
||||||
db.once('open', function () {
|
try {
|
||||||
// we're connected!
|
console.log("Sto provando a connettermi al database...");
|
||||||
console.log('*** CONNESSIONE EFFETTUATA ! ' + connectionUrl + ' db: ' + process.env.DATABASE)
|
await mongoose.connect(uri);
|
||||||
|
|
||||||
});
|
console.log(' *** CONNESSIONE EFFETTUATA ! ' + ' db: ' + process.env.DATABASE);
|
||||||
|
|
||||||
module.exports = { mongoose };
|
console.log(' Database corrente:', mongoose.connection.name);
|
||||||
|
|
||||||
|
// Ottieni l'URL completo della connessione
|
||||||
|
// console.log(' URL di connessione:', mongoose.connection.client.s.url);
|
||||||
|
|
||||||
|
const db = mongoose.connection;
|
||||||
|
const serverInfo = await db.db.admin().serverStatus(); // Ottieni lo stato del server
|
||||||
|
console.log(` Versione di MongoDB: ${serverInfo.version}`); // Stampa la versione
|
||||||
|
|
||||||
|
isConnected = true; // Imposta la flag di connessione a true
|
||||||
|
} catch (error) {
|
||||||
|
console.error(" Errore durante la connessione al database:", error.message);
|
||||||
|
|
||||||
|
// if (error.name === 'MongooseServerSelectionError' || error.name === 'MongoServerError') {
|
||||||
|
console.log(" Ritento la connessione tra 1 minuto...");
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 60000)); // Attendi 1 minuto prima di ritentare
|
||||||
|
/*} else {
|
||||||
|
console.error(" Errore irreversibile. Arresto il processo.");
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 10000)); // Attendi 1 minuto prima di ritentare
|
||||||
|
process.exit(1); // Termina il processo in caso di errore irreversibile
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Esporta Mongoose
|
||||||
|
module.exports = { mongoose, connectToDatabase, connectionUrl, options };
|
||||||
@@ -104,8 +104,8 @@
|
|||||||
"ID_CIRCUIT_COINS_ACCEPTED_TO_ME": "🔄 Hai inviato <strong>%s %s</strong> a %s sul '%s'.",
|
"ID_CIRCUIT_COINS_ACCEPTED_TO_ME": "🔄 Hai inviato <strong>%s %s</strong> a %s sul '%s'.",
|
||||||
"ID_CIRCUIT_COINS_REFUSED": "%s %s rifiutati da %s sul '%s'.",
|
"ID_CIRCUIT_COINS_REFUSED": "%s %s rifiutati da %s sul '%s'.",
|
||||||
"ID_CIRCUIT_COINS_REFUSED_TO_ME": "%s %s rifiutati da %s sul '%s'.",
|
"ID_CIRCUIT_COINS_REFUSED_TO_ME": "%s %s rifiutati da %s sul '%s'.",
|
||||||
"CIRCUIT_AMOUNT_EXCEED_FIDO": "L'importo supera la quantità massima concessa per %s",
|
"CIRCUIT_AMOUNT_EXCEED_FIDO": "⚠️ L'importo supera la quantità massima concessa per %s",
|
||||||
"CIRCUIT_AMOUNT_EXCEED_QTAMAX": "L'importo supera la quantità massima che il destinatario (%s) può accumulare",
|
"CIRCUIT_AMOUNT_EXCEED_QTAMAX": "⚠️ L'importo supera la quantità massima che il destinatario (%s) può accumulare",
|
||||||
"CIRCUIT_COINS_ALREADY_PROCESSED": "La richiesta è stata già processata. Stato %s",
|
"CIRCUIT_COINS_ALREADY_PROCESSED": "La richiesta è stata già processata. Stato %s",
|
||||||
"STATUS_SENT": "Inviato",
|
"STATUS_SENT": "Inviato",
|
||||||
"STATUS_REFUSED": "Rifiutato",
|
"STATUS_REFUSED": "Rifiutato",
|
||||||
@@ -127,6 +127,9 @@
|
|||||||
"🚫 Ti è stato rifiutato l'accesso. Probabilmente l'username con cui ti sei registrato non ti conosce. (%s) !<br>Contatta l'Assistenza Tecnica.": "🚫 Ti è stato rifiutato l'accesso. Probabilmente l'username con cui ti sei registrato non ti conosce. (%s) !<br>Contatta l'Assistenza Tecnica.",
|
"🚫 Ti è stato rifiutato l'accesso. Probabilmente l'username con cui ti sei registrato non ti conosce. (%s) !<br>Contatta l'Assistenza Tecnica.": "🚫 Ti è stato rifiutato l'accesso. Probabilmente l'username con cui ti sei registrato non ti conosce. (%s) !<br>Contatta l'Assistenza Tecnica.",
|
||||||
"🚫 %s ha rifiutato l'accesso alla App a %s !": "🚫 %s ha rifiutato l'accesso alla App a %s !",
|
"🚫 %s ha rifiutato l'accesso alla App a %s !": "🚫 %s ha rifiutato l'accesso alla App a %s !",
|
||||||
"✅ Hai Ammesso l'accesso alla App a %s !": "✅ Hai Ammesso l'accesso alla App a %s !",
|
"✅ Hai Ammesso l'accesso alla App a %s !": "✅ Hai Ammesso l'accesso alla App a %s !",
|
||||||
|
"EXCEED_FIDO": "⚠️ L'importo supera la Fiducia concessa per %s",
|
||||||
|
"EXCEED_QTAMAX": "⚠️ Attenzione! %s sta tentando di inviarti %s RIS, ma il tuo conto ha raggiunto il limite massimo di accumulo sul %s. \nPer poter ricevere il pagamento, devi prima spendere alcuni RIS cercando quello che ti serve, in modo da liberare spazio nel tuo conto. 🙏🏻",
|
||||||
|
"EXCEED_QTAMAX_MITTENTE": "⚠️ Attenzione! %s ha raggiunto la quota massima accumulabile in RIS, pertanto non puoi inviarglieli. Dovrebbe prima cercare di spendere i RIS cercando quello che gli serve, in modo da liberare spazio nel suo conto. 🙏🏻",
|
||||||
"Good: %": "Good: %",
|
"Good: %": "Good: %",
|
||||||
"Service: %": "Service: %"
|
"Service: %": "Service: %"
|
||||||
}
|
}
|
||||||
@@ -11,103 +11,58 @@ const auth_default = (req, res, next) => {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const authenticate = (req, res, next) => {
|
const authenticateMiddleware = async (req, res, next, withUser = false, lean = false, noError = false) => {
|
||||||
const token = req.header('x-auth');
|
|
||||||
//const refreshToken = req.header('x-refrtok');
|
|
||||||
|
|
||||||
// console.log('authenticate... ');
|
|
||||||
|
|
||||||
let noaut = false;
|
|
||||||
|
|
||||||
if (req.body.hasOwnProperty('noaut')) {
|
|
||||||
noaut = req.body.noaut;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (noaut) {
|
|
||||||
next();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const access = 'auth';
|
|
||||||
|
|
||||||
return User.findByToken(token, access, true).then((ris) => {
|
|
||||||
|
|
||||||
if (ris && ris.user && !!ris.user.deleted) {
|
|
||||||
if (ris.user.deleted)
|
|
||||||
ris.user = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ris.code === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
|
||||||
return Promise.reject(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ris.user) {
|
|
||||||
return Promise.reject(server_constants.RIS_CODE_HTTP_INVALID_TOKEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!!ris.user) {
|
|
||||||
// Save last time online
|
|
||||||
ris.user.lasttimeonline = new Date();
|
|
||||||
ris.user.retry_pwd = 0
|
|
||||||
ris.user.useragent = req.get('User-Agent');
|
|
||||||
|
|
||||||
return ris.user.save().then(() => {
|
|
||||||
req.user = ris.user;
|
|
||||||
req.token = token;
|
|
||||||
// req.refreshToken = refreshToken;
|
|
||||||
req.access = access;
|
|
||||||
next(); // Esegui il codice successivo
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// tools.mylog('userid', user._id);
|
|
||||||
|
|
||||||
}).catch((e) => {
|
|
||||||
if (e === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
|
||||||
return res.status(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED).send();
|
|
||||||
}
|
|
||||||
tools.mylog("ERR authenticate invalid Token =", e);
|
|
||||||
res.status(server_constants.RIS_CODE_HTTP_INVALID_TOKEN).send();
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const authenticate_noerror = (req, res, next) => {
|
|
||||||
try {
|
try {
|
||||||
const token = req.header('x-auth');
|
const token = req.header('x-auth');
|
||||||
const refreshToken = req.header('x-refrtok');
|
const refreshToken = req.header('x-refrtok');
|
||||||
|
const logPrefix = noError ? (withUser ? (lean ? 'WITHUSERLEAN' : 'WITHUSER') : 'NOERROR') : 'AUTH';
|
||||||
|
|
||||||
const access = 'auth';
|
if (!token) {
|
||||||
|
|
||||||
return User.findByToken(token, access, false).then((ris) => {
|
|
||||||
if (ris.code !== server_constants.RIS_CODE_OK) {
|
|
||||||
req.user = null;
|
|
||||||
req.token = null;
|
|
||||||
req.access = null;
|
|
||||||
req.code = ris.code;
|
|
||||||
} else {
|
|
||||||
req.user = ris.user;
|
|
||||||
req.token = token;
|
|
||||||
req.refreshToken = refreshToken;
|
|
||||||
req.access = access;
|
|
||||||
req.code = ris.code;
|
|
||||||
}
|
|
||||||
if (ris.code === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
|
||||||
return res.status(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED).send();
|
|
||||||
} else {
|
|
||||||
// Vai avanti ad eseguire il codice, in ogni modo !
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
}).catch((e) => {
|
|
||||||
req.user = null;
|
req.user = null;
|
||||||
req.token = null;
|
req.token = null;
|
||||||
req.access = null;
|
req.code = server_constants.RIS_CODE_HTTP_INVALID_TOKEN;
|
||||||
req.code = 0;
|
console.log(` ## ${logPrefix}_TOKEN INVALIDO ❌ ...`);
|
||||||
|
return noError ? next() : res.status(req.code).send();
|
||||||
|
}
|
||||||
|
|
||||||
// Continua comunque !
|
const user = await User.findByToken(token, 'auth', false, withUser, lean);
|
||||||
next();
|
|
||||||
});
|
if (user.code !== server_constants.RIS_CODE_OK) {
|
||||||
|
req.user = null;
|
||||||
|
req.token = null;
|
||||||
|
req.code = user.code;
|
||||||
|
} else {
|
||||||
|
req.user = user.user;
|
||||||
|
req.token = token;
|
||||||
|
req.refreshToken = refreshToken;
|
||||||
|
req.code = user.code;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.code === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
||||||
|
console.log(` TOKEN SCADUTO ! `);
|
||||||
|
if (noError) {
|
||||||
|
return next()
|
||||||
|
} else {
|
||||||
|
return res.status(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED).send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log(` ## ${logPrefix} NEXT ! AVANTI...`);
|
||||||
|
next();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Err', e);
|
console.error('Errore nel middleware di autenticazione:', e);
|
||||||
|
req.user = null;
|
||||||
|
req.token = null;
|
||||||
|
req.code = server_constants.RIS_CODE_HTTP_INVALID_TOKEN;
|
||||||
|
noError ? next() : res.status(req.code).send();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = { authenticate, authenticate_noerror, auth_default };
|
const authenticate = (req, res, next) => authenticateMiddleware(req, res, next);
|
||||||
|
const authenticate_withUser = (req, res, next) => authenticateMiddleware(req, res, next, true);
|
||||||
|
const authenticate_withUserLean = (req, res, next) => authenticateMiddleware(req, res, next, true, true);
|
||||||
|
const authenticate_noerror = (req, res, next) => authenticateMiddleware(req, res, next, false, false, true);
|
||||||
|
const authenticate_noerror_WithUser = (req, res, next) => authenticateMiddleware(req, res, next, true, false, true);
|
||||||
|
const authenticate_noerror_WithUserLean = (req, res, next) => authenticateMiddleware(req, res, next, true, true, true);
|
||||||
|
|
||||||
|
module.exports = { authenticate, authenticate_noerror, auth_default, authenticate_withUser, authenticate_noerror_WithUser, authenticate_noerror_WithUserLean };
|
||||||
|
|||||||
128
src/server/models/JobsInProgress.js
Executable file
128
src/server/models/JobsInProgress.js
Executable file
@@ -0,0 +1,128 @@
|
|||||||
|
const mongoose = require('mongoose').set('debug', false)
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
|
mongoose.Promise = global.Promise;
|
||||||
|
mongoose.level = "F";
|
||||||
|
|
||||||
|
const shared_consts = require('../tools/shared_nodejs');
|
||||||
|
|
||||||
|
// Resolving error Unknown modifier: $pushAll
|
||||||
|
mongoose.plugin(schema => {
|
||||||
|
schema.options.usePushEach = true
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const JobsInProgressSchema = new Schema({
|
||||||
|
idapp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
descr: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
nomeFunzioneDbOp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
terminatedWhy: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
comment: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
date_created: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.chechifExistJobWorking = async function (jobData, terminateiftoolong) {
|
||||||
|
|
||||||
|
// controlla se esiste un altro job, non ancora terminato !STATUS_JOB.FINISH
|
||||||
|
// se esiste già allora ritorna false
|
||||||
|
const existingJob = await this.findOne({ idapp: jobData.idapp, nomeFunzioneDbOp: jobData.nomeFunzioneDbOp, status: { $ne: shared_consts.STATUS_JOB.FINISH } });
|
||||||
|
if (existingJob) {
|
||||||
|
// se il Job trovato è passato troppo tempo (oltre 3 ore date_created), allora fai finta che abbia già terminato
|
||||||
|
// (in questo caso, non ritorna false, ma ritorna il job trovato, per permettere di gestire il caso in cui si vuole forzare il job a terminare)
|
||||||
|
if (Math.abs(Date.now() - existingJob.date_created.getTime()) > 180 * 60 * 1000) {
|
||||||
|
if (terminateiftoolong) {
|
||||||
|
existingJob.status = shared_consts.STATUS_JOB.FINISH;
|
||||||
|
existingJob.terminatedWhy = shared_consts.TERMINATED_WHY.TOOLONGTIME;
|
||||||
|
await existingJob.save();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return true; // E' in FUNZIONE il JOB
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.addNewJob = async function (jobData) {
|
||||||
|
if (!jobData || typeof jobData !== 'object') {
|
||||||
|
console.error('ERRORE: ❌ jobData deve essere un oggetto valido');
|
||||||
|
}
|
||||||
|
|
||||||
|
const esistegia = await this.chechifExistJobWorking(jobData, true);
|
||||||
|
|
||||||
|
if (esistegia) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const newJob = await this.create(jobData);
|
||||||
|
return newJob;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore nell\'aggiungere un nuovo record: ', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
JobsInProgressSchema.methods.terminateJob = async function (witherror) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
this.status = shared_consts.STATUS_JOB.FINISH;
|
||||||
|
this.terminatedWhy = witherror ? shared_consts.TERMINATED_WHY.END_WITHERROR : shared_consts.TERMINATED_WHY.END_NORMALLY;
|
||||||
|
await this.save();
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore durante la terminazione del job: ', err);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.getFieldsForSearch = function () {
|
||||||
|
return [{ field: 'descr', type: tools.FieldType.string }]
|
||||||
|
};
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.executeQueryTable = function (idapp, params, user) {
|
||||||
|
params.fieldsearch = this.getFieldsForSearch();
|
||||||
|
return tools.executeQueryTable(this, idapp, params, user);
|
||||||
|
};
|
||||||
|
|
||||||
|
JobsInProgressSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
const JobsInProgress = this;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return await JobsInProgress.find({ idapp }).then((arrrec) => {
|
||||||
|
return arrrec;
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore: ', err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const JobsInProgress = mongoose.model('JobsInProgress', JobsInProgressSchema);
|
||||||
|
|
||||||
|
JobsInProgress.createIndexes()
|
||||||
|
.then(() => { })
|
||||||
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = { JobsInProgress };
|
||||||
@@ -98,9 +98,7 @@ AccountSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await Account.find(myfind, (err, arrrec) => {
|
return await Account.find(myfind).lean();
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
AccountSchema.pre('save', async function (next) {
|
AccountSchema.pre('save', async function (next) {
|
||||||
@@ -659,7 +657,7 @@ AccountSchema.statics.updateQtaMax = async function (idapp, username, groupname,
|
|||||||
else
|
else
|
||||||
risult = await Account.updateOne({ idapp, username, circuitId }, { $set: paramstoupdate });
|
risult = await Account.updateOne({ idapp, username, circuitId }, { $set: paramstoupdate });
|
||||||
|
|
||||||
return risult && risult.nModified > 0;
|
return risult && risult.modifiedCount > 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
AccountSchema.statics.getAccountsCircuitiNazionali = async function (idapp) {
|
AccountSchema.statics.getAccountsCircuitiNazionali = async function (idapp) {
|
||||||
@@ -764,8 +762,8 @@ AccountSchema.statics.updateSaldoAndTransato_AllAccounts = async function (idapp
|
|||||||
|
|
||||||
const Account = mongoose.model('Account', AccountSchema);
|
const Account = mongoose.model('Account', AccountSchema);
|
||||||
|
|
||||||
Account.createIndexes((err) => {
|
Account.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
module.exports = { Account };
|
module.exports = { Account };
|
||||||
|
|||||||
@@ -42,13 +42,7 @@ AdTypeSchema.pre('save', async function (next) {
|
|||||||
AdTypeSchema.statics.findAllIdApp = async function(idapp) {
|
AdTypeSchema.statics.findAllIdApp = async function(idapp) {
|
||||||
const AdType = this;
|
const AdType = this;
|
||||||
|
|
||||||
const query = [
|
return AdType.find({}).sort({_id: 1}).lean();
|
||||||
{$sort: {_id: 1}},
|
|
||||||
];
|
|
||||||
|
|
||||||
return await AdType.aggregate(query).then((arrrec) => {
|
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -64,8 +58,9 @@ AdTypeSchema.statics.executeQueryTable = function(idapp, params) {
|
|||||||
|
|
||||||
const AdType = mongoose.model('AdType', AdTypeSchema);
|
const AdType = mongoose.model('AdType', AdTypeSchema);
|
||||||
|
|
||||||
AdType.createIndexes((err) => {
|
AdType.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {AdType};
|
module.exports = {AdType};
|
||||||
|
|||||||
@@ -64,8 +64,9 @@ AdTypeGoodSchema.statics.executeQueryTable = function(idapp, params) {
|
|||||||
|
|
||||||
const AdTypeGood = mongoose.model('AdTypeGood', AdTypeGoodSchema);
|
const AdTypeGood = mongoose.model('AdTypeGood', AdTypeGoodSchema);
|
||||||
|
|
||||||
AdTypeGood.createIndexes((err) => {
|
AdTypeGood.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {AdTypeGood};
|
module.exports = {AdTypeGood};
|
||||||
|
|||||||
@@ -134,7 +134,6 @@ const AttivitaSchema = new Schema(
|
|||||||
...tools.getFieldsForAnnunci()
|
...tools.getFieldsForAnnunci()
|
||||||
}, { strict: false });
|
}, { strict: false });
|
||||||
|
|
||||||
AttivitaSchema.index({ 'idapp': 1 });
|
|
||||||
|
|
||||||
|
|
||||||
AttivitaSchema.pre('save', async function (next) {
|
AttivitaSchema.pre('save', async function (next) {
|
||||||
@@ -390,8 +389,9 @@ AttivitaSchema.statics.getCompleteRecord = function (idapp, id) {
|
|||||||
|
|
||||||
const Attivita = mongoose.model('Attivita', AttivitaSchema);
|
const Attivita = mongoose.model('Attivita', AttivitaSchema);
|
||||||
|
|
||||||
Attivita.createIndexes((err) => {
|
Attivita.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Attivita };
|
module.exports = { Attivita };
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
return await Author.find(myfind).sort({name: 1, surname: 1});
|
return await Author.find(myfind).sort({name: 1, surname: 1});
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -68,10 +68,7 @@ bookingSchema.statics.findAllByUserIdAndIdApp = function (userId, idapp, sall) {
|
|||||||
else
|
else
|
||||||
myfind = { userId, idapp, booked: true };
|
myfind = { userId, idapp, booked: true };
|
||||||
|
|
||||||
return Booking.find(myfind, (err, arrbooked) => {
|
return Booking.find(myfind).lean();
|
||||||
// console.log('ris Booking:', arrbooked);
|
|
||||||
return arrbooked
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -94,7 +91,7 @@ function getUsersByBooking(idapp) {
|
|||||||
$Lookup: {
|
$Lookup: {
|
||||||
from: "users",
|
from: "users",
|
||||||
localField: "userId", // field in my collection
|
localField: "userId", // field in my collection
|
||||||
foreignField: "ObjectId(_id)", // field in the 'from' collection
|
foreignField: "new ObjectId(_id)", // field in the 'from' collection
|
||||||
as: "fromItems"
|
as: "fromItems"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -122,8 +119,9 @@ bookingSchema.statics.findAllDistinctByBooking = function (idapp) {
|
|||||||
|
|
||||||
const Booking = mongoose.model('Booking', bookingSchema);
|
const Booking = mongoose.model('Booking', bookingSchema);
|
||||||
|
|
||||||
Booking.createIndexes((err) => {
|
Booking.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Booking };
|
module.exports = { Booking };
|
||||||
|
|||||||
@@ -205,8 +205,9 @@ BotSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const MyBot = mongoose.model('Bot', BotSchema);
|
const MyBot = mongoose.model('Bot', BotSchema);
|
||||||
|
|
||||||
MyBot.createIndexes((err) => {
|
MyBot.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyBot };
|
module.exports = { MyBot };
|
||||||
|
|||||||
@@ -76,8 +76,9 @@ CalZoomSchema.statics.getNextZoom = async function (idapp) {
|
|||||||
|
|
||||||
const CalZoom = mongoose.model('CalZoom', CalZoomSchema);
|
const CalZoom = mongoose.model('CalZoom', CalZoomSchema);
|
||||||
|
|
||||||
CalZoom.createIndexes((err) => {
|
CalZoom.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { CalZoom };
|
module.exports = { CalZoom };
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ module.exports.getCartByUserId = async function (uid, idapp) {
|
|||||||
|
|
||||||
if (!!mycart) {
|
if (!!mycart) {
|
||||||
for (const idkey in mycart.items) {
|
for (const idkey in mycart.items) {
|
||||||
try {
|
try {
|
||||||
let idorder = mycart.items[idkey]._id.toString();
|
let idorder = mycart.items[idkey]._id.toString();
|
||||||
let myorder = mycart.items[idkey].order;
|
let myorder = mycart.items[idkey].order;
|
||||||
if (!!myorder) {
|
if (!!myorder) {
|
||||||
@@ -89,15 +89,17 @@ module.exports.getCartByUserId = async function (uid, idapp) {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.updateCartByUserId = function (userId, newCart, callback) {
|
module.exports.updateCartByUserId = async function (userId, newCart) {
|
||||||
let query = { userId: userId };
|
const query = { userId: userId };
|
||||||
Cart.find(query, function (err, c) {
|
|
||||||
if (err) throw err;
|
|
||||||
|
|
||||||
//exist cart in databse
|
try {
|
||||||
if (c.length > 0) {
|
// Cerca il carrello esistente nel database
|
||||||
Cart.findOneAndUpdate(
|
const existingCart = await Cart.findOne(query);
|
||||||
{ userId: userId },
|
|
||||||
|
if (existingCart) {
|
||||||
|
// Se il carrello esiste, aggiorna i dati
|
||||||
|
const updatedCart = await Cart.findOneAndUpdate(
|
||||||
|
query,
|
||||||
{
|
{
|
||||||
$set: {
|
$set: {
|
||||||
items: newCart.items,
|
items: newCart.items,
|
||||||
@@ -107,14 +109,21 @@ module.exports.updateCartByUserId = function (userId, newCart, callback) {
|
|||||||
userId: userId,
|
userId: userId,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ new: true },
|
{ new: true } // Restituisce il documento aggiornato
|
||||||
callback,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return updatedCart; // Restituisce il carrello aggiornato
|
||||||
} else {
|
} else {
|
||||||
//no cart in database
|
// Se il carrello non esiste, crea un nuovo documento
|
||||||
newCart.save(callback);
|
const createdCart = new Cart(newCart);
|
||||||
|
const savedCart = await createdCart.save();
|
||||||
|
return savedCart; // Restituisce il carrello creato
|
||||||
}
|
}
|
||||||
});
|
} catch (err) {
|
||||||
|
// Gestione degli errori
|
||||||
|
console.error("Errore durante l'aggiornamento del carrello:", err);
|
||||||
|
throw err; // Propaga l'errore al chiamante
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.updateCartByCartId = async function (cartId, newCart) {
|
module.exports.updateCartByCartId = async function (cartId, newCart) {
|
||||||
@@ -148,7 +157,7 @@ module.exports.updateCartByCartId = async function (cartId, newCart) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.exports.deleteCartByCartId = async function (cartId) {
|
module.exports.deleteCartByCartId = async function (cartId) {
|
||||||
return await Cart.remove({ _id: cartId });
|
return await Cart.deleteOne({ _id: cartId });
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createCart = async function (newCart) {
|
module.exports.createCart = async function (newCart) {
|
||||||
@@ -156,6 +165,7 @@ module.exports.createCart = async function (newCart) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Cart.createIndexes((err) => {
|
Cart.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -28,9 +28,10 @@ const CashCategorySchema = new Schema({
|
|||||||
|
|
||||||
var CashCategory = module.exports = mongoose.model('CashCategory', CashCategorySchema);
|
var CashCategory = module.exports = mongoose.model('CashCategory', CashCategorySchema);
|
||||||
|
|
||||||
CashCategory.createIndexes((err) => {
|
CashCategory.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports.getFieldsForSearch = function () {
|
module.exports.getFieldsForSearch = function () {
|
||||||
return []
|
return []
|
||||||
@@ -44,7 +45,7 @@ module.exports.executeQueryTable = function (idapp, params) {
|
|||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await CashCategory.find(myfind);
|
return await CashCategory.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.getAllCashCategory = function (query, sort, callback) {
|
module.exports.getAllCashCategory = function (query, sort, callback) {
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ module.exports.executeQueryTable = function (idapp, params) {
|
|||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await CashSubCategory.find(myfind);
|
return await CashSubCategory.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.getAllCashSubCategory = function (query, sort, callback) {
|
module.exports.getAllCashSubCategory = function (query, sort, callback) {
|
||||||
@@ -70,6 +70,7 @@ module.exports.createCashSubCategory = async function (CashSubCategory) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -49,13 +49,14 @@ CatAISchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
CatAISchema.statics.findAllIdApp = async function (idapp) {
|
CatAISchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await CatAI.find(myfind).sort({ name: 1 });
|
return await CatAI.find(myfind).sort({ name: 1 }).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
const CatAI = mongoose.model('CatAI', CatAISchema);
|
const CatAI = mongoose.model('CatAI', CatAISchema);
|
||||||
|
|
||||||
CatAI.createIndexes((err) => {
|
CatAI.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = CatAI;
|
module.exports = CatAI;
|
||||||
|
|||||||
@@ -26,15 +26,27 @@ const CatalogSchema = new Schema({
|
|||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
type: String,
|
type: String,
|
||||||
|
index: true,
|
||||||
},
|
},
|
||||||
foto_collana: IImg,
|
foto_collana: IImg,
|
||||||
|
|
||||||
idCollane: [{
|
idCollane: [{
|
||||||
|
type: String,
|
||||||
|
}],
|
||||||
|
idTipoFormato: [{
|
||||||
type: Number,
|
type: Number,
|
||||||
}],
|
}],
|
||||||
|
|
||||||
argomenti: [{
|
argomenti: [{
|
||||||
type: String,
|
type: String,
|
||||||
}],
|
}],
|
||||||
|
condition_andor: {
|
||||||
|
type: Number,
|
||||||
|
default: 0,
|
||||||
|
},
|
||||||
|
|
||||||
editore: [{ type: String }],
|
editore: [{ type: String }],
|
||||||
|
|
||||||
descr_introduttiva: {
|
descr_introduttiva: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
@@ -57,9 +69,19 @@ const CatalogSchema = new Schema({
|
|||||||
},
|
},
|
||||||
|
|
||||||
pdf_generato: String,
|
pdf_generato: String,
|
||||||
|
pdf_generato_stampa: String,
|
||||||
data_generato: {
|
data_generato: {
|
||||||
type: Date,
|
type: Date,
|
||||||
},
|
},
|
||||||
|
data_generato_stampa: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
username_lista_generata: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
data_lista_generata: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
pdf_online: String,
|
pdf_online: String,
|
||||||
data_online: {
|
data_online: {
|
||||||
type: Date,
|
type: Date,
|
||||||
@@ -72,6 +94,11 @@ const CatalogSchema = new Schema({
|
|||||||
date_updated: {
|
date_updated: {
|
||||||
type: Date,
|
type: Date,
|
||||||
},
|
},
|
||||||
|
lista_prodotti: [{
|
||||||
|
type: Schema.Types.ObjectId,
|
||||||
|
ref: 'Product',
|
||||||
|
}],
|
||||||
|
isCatalogoGenerale: Boolean,
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -94,7 +121,7 @@ CatalogSchema.statics.executeQueryTable = function (idapp, params, user) {
|
|||||||
return tools.executeQueryTable(this, idapp, params, user);
|
return tools.executeQueryTable(this, idapp, params, user);
|
||||||
};
|
};
|
||||||
|
|
||||||
CatalogSchema.statics.findAllIdApp = async function (idapp) {
|
/*CatalogSchema.statics.OLD_findAllIdApp = async function (idapp) {
|
||||||
const Catalog = this;
|
const Catalog = this;
|
||||||
|
|
||||||
const arrrec = await Catalog.aggregate([
|
const arrrec = await Catalog.aggregate([
|
||||||
@@ -117,12 +144,114 @@ CatalogSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
return arrrec;
|
return arrrec;
|
||||||
|
};*/
|
||||||
|
|
||||||
|
CatalogSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
const Catalog = this;
|
||||||
|
|
||||||
|
try {
|
||||||
|
let arrrec = await Catalog.find({ idapp })
|
||||||
|
.sort({ title: 1 }) // Ordina i risultati per titolo
|
||||||
|
/*.populate({
|
||||||
|
path: "idCollane", // Popola il campo idCollane
|
||||||
|
model: "Collana" // Specifica il modello della collezione Collana
|
||||||
|
})*/
|
||||||
|
.populate({
|
||||||
|
path: "lista_prodotti", // Popola il campo lista_prodotti
|
||||||
|
populate: {
|
||||||
|
path: "idProductInfo",
|
||||||
|
model: "ProductInfo",
|
||||||
|
populate: [
|
||||||
|
{
|
||||||
|
path: "idCatProds",
|
||||||
|
model: "CatProd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "idSubCatProds",
|
||||||
|
model: "SubCatProd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "idAuthors",
|
||||||
|
model: "Author"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: "lista_prodotti",
|
||||||
|
populate: {
|
||||||
|
path: "idProducer",
|
||||||
|
model: "Producer"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: "lista_prodotti",
|
||||||
|
populate: {
|
||||||
|
path: "idProvider",
|
||||||
|
model: "Provider"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: "lista_prodotti",
|
||||||
|
populate: {
|
||||||
|
path: "idStorehouses",
|
||||||
|
model: "Storehouse"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: "lista_prodotti",
|
||||||
|
populate: {
|
||||||
|
path: "idScontisticas",
|
||||||
|
model: "Scontistica"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.populate({
|
||||||
|
path: "lista_prodotti",
|
||||||
|
populate: {
|
||||||
|
path: "idGasordine",
|
||||||
|
model: "Gasordine"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
;
|
||||||
|
|
||||||
|
// controlla prima se nella lista ci sono dei product che non esistono piu allora li devi rimuovere !
|
||||||
|
for (const catalog of arrrec) {
|
||||||
|
const originalLength = catalog.lista_prodotti.length;
|
||||||
|
catalog.lista_prodotti = catalog.lista_prodotti.filter(product => product.idProductInfo);
|
||||||
|
if (catalog.lista_prodotti.length !== originalLength) {
|
||||||
|
await catalog.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const transformedArrRec = arrrec.map(catalog => ({
|
||||||
|
...catalog.toObject(), // Converte il documento Mongoose in un oggetto JavaScript puro
|
||||||
|
lista_prodotti: catalog.lista_prodotti.map(product => ({
|
||||||
|
...product.toObject(),
|
||||||
|
productInfo: {
|
||||||
|
...product.idProductInfo.toObject(), // Copia tutti i campi di idProductInfo
|
||||||
|
catprods: product.idProductInfo.idCatProds, // Rinomina idCatProds in catprods
|
||||||
|
subcatprods: product.idProductInfo.idSubCatProds,
|
||||||
|
collana: product.idProductInfo.idCollana,
|
||||||
|
authors: product.idProductInfo.idAuthors,
|
||||||
|
},
|
||||||
|
producer: product.idProducer,
|
||||||
|
storehouse: product.idStorehouses,
|
||||||
|
scontisticas: product.idScontisticas,
|
||||||
|
gasordine: product.idGasordine,
|
||||||
|
})),
|
||||||
|
}));
|
||||||
|
|
||||||
|
return transformedArrRec;
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore: ', err);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const Catalog = mongoose.model('Catalog', CatalogSchema);
|
const Catalog = mongoose.model('Catalog', CatalogSchema);
|
||||||
|
|
||||||
Catalog.createIndexes((err) => {
|
Catalog.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Catalog };
|
module.exports = { Catalog };
|
||||||
|
|||||||
@@ -45,14 +45,15 @@ CategorySchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
CategorySchema.statics.findAllIdApp = async function (idapp) {
|
CategorySchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Category.find(myfind);
|
return await Category.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
const Category = mongoose.model('Category', CategorySchema);
|
const Category = mongoose.model('Category', CategorySchema);
|
||||||
|
|
||||||
Category.createIndexes((err) => {
|
Category.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Category };
|
module.exports = { Category };
|
||||||
|
|||||||
@@ -80,8 +80,9 @@ CatGrpSchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
|
|
||||||
const CatGrp = mongoose.model('CatGrp', CatGrpSchema);
|
const CatGrp = mongoose.model('CatGrp', CatGrpSchema);
|
||||||
|
|
||||||
CatGrp.createIndexes((err) => {
|
CatGrp.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { CatGrp };
|
module.exports = { CatGrp };
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ const CatProdSchema = new Schema({
|
|||||||
},
|
},
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
|
index: 1,
|
||||||
},
|
},
|
||||||
descr_estesa: {
|
descr_estesa: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -34,6 +35,9 @@ const CatProdSchema = new Schema({
|
|||||||
color: {
|
color: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
|
quanti: {
|
||||||
|
type: Number,
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
CatProdSchema.statics.getAllCategories = function (callback) {
|
CatProdSchema.statics.getAllCategories = function (callback) {
|
||||||
@@ -55,16 +59,16 @@ CatProdSchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
CatProdSchema.statics.findAllIdApp = async function (idapp) {
|
CatProdSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await CatProd.find(myfind).sort({ name: 1 });
|
return await CatProd.find(myfind).sort({ name: 1 }).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
CatProdSchema.statics.getCatProdWithTitleCount = async function (idapp) {
|
CatProdSchema.statics.updateCatDeleteEmpty = async function (idapp) {
|
||||||
try {
|
try {
|
||||||
const result = await CatProd.aggregate([
|
const toDelete = await CatProd.aggregate([
|
||||||
{ $match: { idapp } },
|
{ $match: { idapp } },
|
||||||
{
|
{
|
||||||
$lookup: {
|
$lookup: {
|
||||||
from: 'productinfos', // Nome della tua collezione productInfo
|
from: 'productinfos',
|
||||||
localField: '_id',
|
localField: '_id',
|
||||||
foreignField: 'idCatProds',
|
foreignField: 'idCatProds',
|
||||||
as: 'products'
|
as: 'products'
|
||||||
@@ -77,9 +81,86 @@ CatProdSchema.statics.getCatProdWithTitleCount = async function (idapp) {
|
|||||||
quanti: { $size: '$products' } // Conta il numero di prodotti per ciascun CatProd
|
quanti: { $size: '$products' } // Conta il numero di prodotti per ciascun CatProd
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ $sort: { name: 1 } } // Ordina i risultati per nome
|
{ $match: { quanti: 0 } },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if (toDelete.length > 0) {
|
||||||
|
const ids = toDelete.map(x => x._id);
|
||||||
|
const ris = await CatProd.deleteMany({ _id: { $in: ids } });
|
||||||
|
const deletedRecs = toDelete.map(x => ({ _id: x._id, name: x.name }));
|
||||||
|
if (deletedRecs.length > 0) {
|
||||||
|
return `Lista Argomenti cancellati: ${deletedRecs.map(x => x.name).join(', ')}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Nessun argomento cancellato";
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error UpdateCatDeleteEmpty:', error);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
CatProdSchema.statics.getCatProdWithTitleCount = async function (idapp, updatedata) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
const myquery = [
|
||||||
|
{ $match: { idapp } },
|
||||||
|
{
|
||||||
|
$lookup: {
|
||||||
|
from: 'productinfos', // Nome della tua collezione productInfo
|
||||||
|
localField: '_id',
|
||||||
|
foreignField: 'idCatProds',
|
||||||
|
as: 'products'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$addFields: {
|
||||||
|
myproducts: {
|
||||||
|
$filter: {
|
||||||
|
input: "$products",
|
||||||
|
as: "prod",
|
||||||
|
cond: {
|
||||||
|
$in: ["$$prod.idStatoProdotto", [1, 4, 34, 45, 46]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$project: {
|
||||||
|
_id: 1,
|
||||||
|
name: 1,
|
||||||
|
idArgomento: 1,
|
||||||
|
descr_estesa: 1,
|
||||||
|
img: 1,
|
||||||
|
icon: 1,
|
||||||
|
color: 1,
|
||||||
|
quanti: { $size: '$myproducts' }, // Conta il numero di prodotti per ciascun CatProd
|
||||||
|
products: {
|
||||||
|
$map: {
|
||||||
|
input: "$myproducts",
|
||||||
|
as: "prod",
|
||||||
|
in: {
|
||||||
|
name: "$$prod.name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ $sort: { name: 1 } } // Ordina i risultati per nome
|
||||||
|
];
|
||||||
|
|
||||||
|
const result = await CatProd.aggregate(myquery);
|
||||||
|
|
||||||
|
if (updatedata) {
|
||||||
|
for (const record of result) {
|
||||||
|
await CatProd.updateOne(
|
||||||
|
{ _id: record._id },
|
||||||
|
{ $set: { quanti: record.quanti } }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error retrieving CatProd with title count:', error);
|
console.error('Error retrieving CatProd with title count:', error);
|
||||||
@@ -90,9 +171,10 @@ CatProdSchema.statics.getCatProdWithTitleCount = async function (idapp) {
|
|||||||
|
|
||||||
const CatProd = mongoose.model('CatProd', CatProdSchema);
|
const CatProd = mongoose.model('CatProd', CatProdSchema);
|
||||||
|
|
||||||
CatProd.createIndexes((err) => {
|
CatProd.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = CatProd;
|
module.exports = CatProd;
|
||||||
|
|||||||
@@ -43,9 +43,10 @@ CfgServerSchema.statics.findAllIdApp = async function(idapp) {
|
|||||||
|
|
||||||
const CfgServer = mongoose.model('CfgServer', CfgServerSchema);
|
const CfgServer = mongoose.model('CfgServer', CfgServerSchema);
|
||||||
|
|
||||||
CfgServer.createIndexes((err) => {
|
CfgServer.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {CfgServer};
|
module.exports = {CfgServer};
|
||||||
|
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ CircuitSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const whatToShow = this.getWhatToShow(idapp, '');
|
const whatToShow = this.getWhatToShow(idapp, '');
|
||||||
|
|
||||||
return await Circuit.find(myfind, whatToShow).lean().sort({ name: 1 });
|
return await Circuit.find(myfind, whatToShow).sort({ name: 1 }).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
CircuitSchema.statics.isCircuitAdmin = async function (idrec, username) {
|
CircuitSchema.statics.isCircuitAdmin = async function (idrec, username) {
|
||||||
@@ -607,7 +607,7 @@ CircuitSchema.statics.getCircuitById = async function (circuitId) {
|
|||||||
|
|
||||||
CircuitSchema.statics.deleteCircuit = async function (idapp, usernameOrig, name) {
|
CircuitSchema.statics.deleteCircuit = async function (idapp, usernameOrig, name) {
|
||||||
console.log('Circuito ' + name + ' rimosso da ' + usernameOrig);
|
console.log('Circuito ' + name + ' rimosso da ' + usernameOrig);
|
||||||
return await Circuit.findOneAndRemove({ idapp, name });
|
return await Circuit.findOneAndDelete({ idapp, name });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -720,6 +720,7 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig
|
|||||||
let ris = {
|
let ris = {
|
||||||
result: false,
|
result: false,
|
||||||
cansend: true,
|
cansend: true,
|
||||||
|
errorcode: 0,
|
||||||
errormsg: '',
|
errormsg: '',
|
||||||
rec: null,
|
rec: null,
|
||||||
useraccounts: [],
|
useraccounts: [],
|
||||||
@@ -768,11 +769,13 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig
|
|||||||
if (accountorigTable.saldo - myqty < -accountorigTable.fidoConcesso) {
|
if (accountorigTable.saldo - myqty < -accountorigTable.fidoConcesso) {
|
||||||
ris.cansend = false;
|
ris.cansend = false;
|
||||||
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_FIDO', usernameOrig);
|
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_FIDO', usernameOrig);
|
||||||
|
ris.errorcode = shared_consts.SENDRIS_CODES.EXCEED_FIDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (accountdestTable.saldo + myqty > accountdestTable.qta_maxConcessa) {
|
if (accountdestTable.saldo + myqty > accountdestTable.qta_maxConcessa) {
|
||||||
ris.cansend = false;
|
ris.cansend = false;
|
||||||
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_QTAMAX', extrarec.dest);
|
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_QTAMAX', extrarec.dest);
|
||||||
|
ris.errorcode = shared_consts.SENDRIS_CODES.EXCEED_QTAMAX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1338,7 +1341,7 @@ CircuitSchema.statics.setFido = async function (idapp, username, circuitName, gr
|
|||||||
|
|
||||||
const ris = await Account.updateFido(idapp, username, groupname, circuitId, fido);
|
const ris = await Account.updateFido(idapp, username, groupname, circuitId, fido);
|
||||||
if (ris) {
|
if (ris) {
|
||||||
return { qta_maxConcessa: qtamax, fidoConcesso: fido, changed: variato || (ris && ris.nModified > 0) };
|
return { qta_maxConcessa: qtamax, fidoConcesso: fido, changed: variato || (ris && ris.modifiedCount > 0) };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1796,8 +1799,9 @@ CircuitSchema.statics.addMovementByOrdersCart = async function (ordersCart, user
|
|||||||
|
|
||||||
const Circuit = mongoose.model('Circuit', CircuitSchema);
|
const Circuit = mongoose.model('Circuit', CircuitSchema);
|
||||||
|
|
||||||
Circuit.createIndexes((err) => {
|
Circuit.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Circuit };
|
module.exports = { Circuit };
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ CitySchema.statics.executeQueryPickup = async function (idapp, params) {
|
|||||||
CitySchema.statics.findAllIdApp = async function (idapp) {
|
CitySchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = {};
|
const myfind = {};
|
||||||
|
|
||||||
return await City.find(myfind);
|
return await City.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
CitySchema.statics.getGeoJsonByProvince = async function (prov) {
|
CitySchema.statics.getGeoJsonByProvince = async function (prov) {
|
||||||
@@ -256,7 +256,7 @@ CitySchema.statics.insertGeojsonToMongoDB = async function (nomefilejson) {
|
|||||||
|
|
||||||
if (reccity) {
|
if (reccity) {
|
||||||
const ris = await City.updateOne({ _id: reccity._id }, { $set: { geojson: citta } });
|
const ris = await City.updateOne({ _id: reccity._id }, { $set: { geojson: citta } });
|
||||||
if (ris.ok === 1) {
|
if (ris.acknowledged) {
|
||||||
inseriti++;
|
inseriti++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -274,8 +274,9 @@ CitySchema.statics.insertGeojsonToMongoDB = async function (nomefilejson) {
|
|||||||
|
|
||||||
const City = mongoose.model('City', CitySchema);
|
const City = mongoose.model('City', CitySchema);
|
||||||
|
|
||||||
City.createIndexes((err) => {
|
City.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { City };
|
module.exports = { City };
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ const CollanaSchema = new Schema({
|
|||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
type: String,
|
type: String,
|
||||||
|
index: true,
|
||||||
},
|
},
|
||||||
dataOra: {
|
dataOra: {
|
||||||
type: Date,
|
type: Date,
|
||||||
@@ -30,6 +31,9 @@ const CollanaSchema = new Schema({
|
|||||||
enabledAlFresco: {
|
enabledAlFresco: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
},
|
},
|
||||||
|
quanti: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -52,6 +56,74 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
return await Collana.find(myfind).sort({title: 1}).lean();
|
return await Collana.find(myfind).sort({title: 1}).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.getCollaneWithTitleCount = async function (idapp, updatedata) {
|
||||||
if (err) throw err;
|
try {
|
||||||
});
|
|
||||||
|
const myquery = [
|
||||||
|
{ $match: { idapp } },
|
||||||
|
{
|
||||||
|
$lookup: {
|
||||||
|
from: 'productinfos', // Nome della tua collezione productInfo
|
||||||
|
localField: '_id',
|
||||||
|
foreignField: 'idCollana',
|
||||||
|
as: 'products'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$addFields: {
|
||||||
|
myproducts: {
|
||||||
|
$filter: {
|
||||||
|
input: "$products",
|
||||||
|
as: "prod",
|
||||||
|
cond: {
|
||||||
|
$in: ["$$prod.idStatoProdotto", [1, 4, 34, 45, 46]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
$project: {
|
||||||
|
_id: 1,
|
||||||
|
title: 1,
|
||||||
|
idCollana: 1,
|
||||||
|
dataOra: 1,
|
||||||
|
quanti: { $size: '$myproducts' },
|
||||||
|
products: {
|
||||||
|
$map: {
|
||||||
|
input: "$myproducts",
|
||||||
|
as: "prod",
|
||||||
|
in: {
|
||||||
|
name: "$$prod.name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ $match: { quanti: { $gt: 0 } } }, // esclude i record con quanti = 0
|
||||||
|
{ $sort: { title: 1 } } // Ordina i risultati per nome
|
||||||
|
];
|
||||||
|
|
||||||
|
const result = await Collana.aggregate(myquery);
|
||||||
|
|
||||||
|
if (updatedata) {
|
||||||
|
for (const record of result) {
|
||||||
|
await Collana.updateOne(
|
||||||
|
{ _id: record._id },
|
||||||
|
{ $set: { quanti: record.quanti } }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error retrieving idCollana with title count:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
module.exports.createIndexes()
|
||||||
|
.then(() => { })
|
||||||
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -47,15 +47,14 @@ ContribtypeSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Contribtype.find(myfind, (err, arrrec) => {
|
return await Contribtype.find(myfind).lean();
|
||||||
return arrrec
|
|
||||||
}).lean();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const Contribtype = mongoose.model('Contribtype', ContribtypeSchema);
|
const Contribtype = mongoose.model('Contribtype', ContribtypeSchema);
|
||||||
|
|
||||||
Contribtype.createIndexes((err) => {
|
Contribtype.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Contribtype };
|
module.exports = { Contribtype };
|
||||||
|
|||||||
176
src/server/models/cron.js
Executable file
176
src/server/models/cron.js
Executable file
@@ -0,0 +1,176 @@
|
|||||||
|
const mongoose = require('mongoose').set('debug', false);
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
|
const shared_consts = require('../tools/shared_nodejs');
|
||||||
|
|
||||||
|
mongoose.Promise = global.Promise;
|
||||||
|
mongoose.level = 'F';
|
||||||
|
|
||||||
|
// Resolving error Unknown modifier: $pushAll
|
||||||
|
mongoose.plugin((schema) => {
|
||||||
|
schema.options.usePushEach = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
const CronMod = require('../modules/CronMod');
|
||||||
|
|
||||||
|
const CronSchema = new Schema({
|
||||||
|
idapp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
active: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
descr: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
nomeFunzioneDbOp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
startTime: {
|
||||||
|
// Orario iniziale (es. "08:30")
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
everyXMinutes: {
|
||||||
|
// Esegui ogni X ore
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
quanteVolteEseguito: {
|
||||||
|
type: Number,
|
||||||
|
default: 0,
|
||||||
|
},
|
||||||
|
quanteVolteEseguiAlGG: {
|
||||||
|
type: Number,
|
||||||
|
default: 1,
|
||||||
|
},
|
||||||
|
lastJobStarted: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
lastJobEnd: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
log: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
date_created: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now,
|
||||||
|
},
|
||||||
|
date_updated: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
CronSchema.statics.getFieldsForSearch = function () {
|
||||||
|
return [{ field: 'descr', type: tools.FieldType.string }];
|
||||||
|
};
|
||||||
|
|
||||||
|
CronSchema.statics.executeQueryTable = function (idapp, params, user) {
|
||||||
|
params.fieldsearch = this.getFieldsForSearch();
|
||||||
|
return tools.executeQueryTable(this, idapp, params, user);
|
||||||
|
};
|
||||||
|
|
||||||
|
CronSchema.statics.startJobCron = async function (idapp) {
|
||||||
|
// Esegui un loop su tutti i cron job che trovi per l'idapp specificato
|
||||||
|
const Cron = this;
|
||||||
|
try {
|
||||||
|
const cronJobs = await Cron.find({ idapp, active: true });
|
||||||
|
|
||||||
|
// console.log('Check startJobCron...', idapp);
|
||||||
|
|
||||||
|
const mycronMod = new CronMod();
|
||||||
|
|
||||||
|
const currentDate = new Date();
|
||||||
|
|
||||||
|
for (const mycron of cronJobs) {
|
||||||
|
const jobTime = new Date();
|
||||||
|
const [hours, minutes] = mycron.startTime.split(':');
|
||||||
|
jobTime.setHours(hours, minutes, 0, 0);
|
||||||
|
|
||||||
|
// Check if jobTime has passed and if 'everyXMinutes' have elapsed since last execution
|
||||||
|
if (!mycron.quanteVolteEseguito) mycron.quanteVolteEseguito = 0;
|
||||||
|
const timesPerDay = mycron.quanteVolteEseguiAlGG || 1;
|
||||||
|
const startDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
|
||||||
|
let lastJobDate = null;
|
||||||
|
if (mycron.lastJobStarted) {
|
||||||
|
lastJobDate = new Date(
|
||||||
|
mycron.lastJobStarted.getFullYear(),
|
||||||
|
mycron.lastJobStarted.getMonth(),
|
||||||
|
mycron.lastJobStarted.getDate()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
let tempooltre = currentDate - mycron.lastJobStarted >= mycron.everyXMinutes * 60 * 1000;
|
||||||
|
const canExecute =
|
||||||
|
(!mycron.lastJobStarted || // se non c'è un ultimo eseguito, esegui
|
||||||
|
tempooltre) && // se è passato il tempo di attesa, esegui
|
||||||
|
(mycron.lastJobStarted && (mycron.quanteVolteEseguito < timesPerDay) || // se non ho ancora raggiunto il numero di esecuzioni al giorno
|
||||||
|
(!lastJobDate || (startDate.getTime() !== lastJobDate.getTime()))); // se non è lo stesso giorno, esegui
|
||||||
|
if (canExecute) {
|
||||||
|
if (currentDate >= jobTime) {
|
||||||
|
// Execute the function at the scheduled time
|
||||||
|
console.log(`Sto eseguendo il Cron Job: ${mycron.nomeFunzioneDbOp} alle ${currentDate.toLocaleTimeString()}`);
|
||||||
|
const status = shared_consts.STATUS_JOB.START;
|
||||||
|
if (!lastJobDate || startDate.getTime() !== lastJobDate.getTime()) {
|
||||||
|
mycron.quanteVolteEseguito = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const quanteVolteEseguito = mycron.quanteVolteEseguito + 1;
|
||||||
|
await Cron.findOneAndUpdate(
|
||||||
|
{ _id: mycron._id },
|
||||||
|
{ $set: { lastJobStarted: currentDate, status, quanteVolteEseguito } },
|
||||||
|
{ new: true }
|
||||||
|
);
|
||||||
|
mycronMod
|
||||||
|
.eseguiDbOp(idapp, { dbop: mycron.nomeFunzioneDbOp }, null, null)
|
||||||
|
.then(async (ris) => {
|
||||||
|
console.log(`${currentDate.toLocaleTimeString()} LOG JOB: ${ris.mystr}`);
|
||||||
|
const myid = mycron._id;
|
||||||
|
const status = shared_consts.STATUS_JOB.FINISH;
|
||||||
|
const risupdate = await Cron.findOneAndUpdate(
|
||||||
|
{ _id: myid },
|
||||||
|
{ $set: { lastJobEnd: new Date(), status } },
|
||||||
|
{ new: true }
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.catch(async (err) => {
|
||||||
|
const log = "Errore durante l'esecuzione del job: " + err.message || err;
|
||||||
|
const status = shared_consts.STATUS_JOB.ERR;
|
||||||
|
await Cron.findOneAndUpdate({ _id: mycron._id }, { $set: { log, status } }, { new: true });
|
||||||
|
console.error(log);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error startJobCron:', e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CronSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
const Cron = this;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return await Cron.find({ idapp }).then((arrrec) => {
|
||||||
|
return arrrec;
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Errore: ', err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const Cron = mongoose.model('Cron', CronSchema);
|
||||||
|
|
||||||
|
Cron.createIndexes()
|
||||||
|
.then(() => {})
|
||||||
|
.catch((err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = { Cron };
|
||||||
@@ -26,9 +26,10 @@ const departmentSchema = new Schema({
|
|||||||
|
|
||||||
var Department = module.exports = mongoose.model('Department', departmentSchema);
|
var Department = module.exports = mongoose.model('Department', departmentSchema);
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports.getFieldsForSearch = function () {
|
module.exports.getFieldsForSearch = function () {
|
||||||
return [{ field: 'name', type: tools.FieldType.string },
|
return [{ field: 'name', type: tools.FieldType.string },
|
||||||
@@ -44,6 +45,6 @@ module.exports.executeQueryTable = function (idapp, params) {
|
|||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Department.find(myfind);
|
return await Department.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
59
src/server/models/destnewsletter.js
Executable file
59
src/server/models/destnewsletter.js
Executable file
@@ -0,0 +1,59 @@
|
|||||||
|
const mongoose = require('mongoose').set('debug', false)
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const tools = require('../tools/general');
|
||||||
|
|
||||||
|
mongoose.Promise = global.Promise;
|
||||||
|
mongoose.level = "F";
|
||||||
|
|
||||||
|
|
||||||
|
// Resolving error Unknown modifier: $pushAll
|
||||||
|
mongoose.plugin(schema => {
|
||||||
|
schema.options.usePushEach = true
|
||||||
|
});
|
||||||
|
|
||||||
|
const DestNewsletterSchema = new Schema({
|
||||||
|
idapp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
descr: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
tipodest_id: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
DestNewsletterSchema.statics.getFieldsForSearch = function () {
|
||||||
|
return []
|
||||||
|
};
|
||||||
|
|
||||||
|
DestNewsletterSchema.statics.executeQueryTable = function (idapp, params) {
|
||||||
|
params.fieldsearch = this.getFieldsForSearch();
|
||||||
|
return tools.executeQueryTable(this, idapp, params);
|
||||||
|
};
|
||||||
|
|
||||||
|
DestNewsletterSchema.statics.DuplicateAllRecords = async function (idapporig, idappdest) {
|
||||||
|
|
||||||
|
return await tools.DuplicateAllRecords(this, idapporig, idappdest);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
DestNewsletterSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
const DestNewsletter = this;
|
||||||
|
|
||||||
|
const myfind = { idapp };
|
||||||
|
|
||||||
|
return await DestNewsletter.find(myfind).lean();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const DestNewsletter = mongoose.model('DestNewsletter', DestNewsletterSchema);
|
||||||
|
|
||||||
|
DestNewsletter.createIndexes()
|
||||||
|
.then(() => { })
|
||||||
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = { DestNewsletter };
|
||||||
@@ -106,8 +106,9 @@ DisciplineSchema.statics.DuplicateAllRecords = async function (idapporig, idappd
|
|||||||
|
|
||||||
const Discipline = mongoose.model('Discipline', DisciplineSchema);
|
const Discipline = mongoose.model('Discipline', DisciplineSchema);
|
||||||
|
|
||||||
Discipline.createIndexes((err) => {
|
Discipline.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Discipline };
|
module.exports = { Discipline };
|
||||||
|
|||||||
@@ -228,9 +228,8 @@ ExtraListSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await ExtraList.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(this, myfind);
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ExtraListSchema.statics.DuplicateAllRecords = async function (idapporig, idappdest) {
|
ExtraListSchema.statics.DuplicateAllRecords = async function (idapporig, idappdest) {
|
||||||
@@ -332,9 +331,10 @@ ExtraListSchema.statics.ImportData = async function (locale, idapp, strdata) {
|
|||||||
|
|
||||||
const ExtraList = mongoose.model('ExtraList', ExtraListSchema);
|
const ExtraList = mongoose.model('ExtraList', ExtraListSchema);
|
||||||
|
|
||||||
ExtraList.createIndexes((err) => {
|
ExtraList.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { ExtraList };
|
module.exports = { ExtraList };
|
||||||
|
|
||||||
|
|||||||
@@ -57,15 +57,14 @@ GallerySchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Gallery.find(myfind, (err, arrrec) => {
|
return await Gallery.find(myfind).lean();
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const Gallery = mongoose.model('Gallery', GallerySchema);
|
const Gallery = mongoose.model('Gallery', GallerySchema);
|
||||||
|
|
||||||
Gallery.createIndexes((err) => {
|
Gallery.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Gallery };
|
module.exports = { Gallery };
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ module.exports.getGasordineByID = function (id, callback) {
|
|||||||
Gasordine.findById(id, callback);
|
Gasordine.findById(id, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -80,8 +80,9 @@ GoodSchema.statics.executeQueryTable = function (idapp, params) {
|
|||||||
|
|
||||||
const Good = mongoose.model('Good', GoodSchema);
|
const Good = mongoose.model('Good', GoodSchema);
|
||||||
|
|
||||||
Good.createIndexes((err) => {
|
Good.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Good };
|
module.exports = { Good };
|
||||||
|
|||||||
@@ -312,9 +312,7 @@ GraduatoriaSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Graduatoria.find(myfind, (err, arrrec) => {
|
return await Graduatoria.find(myfind).lean();
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GraduatoriaSchema.statics.isWorking = function (idapp) {
|
GraduatoriaSchema.statics.isWorking = function (idapp) {
|
||||||
@@ -415,8 +413,9 @@ GraduatoriaSchema.statics.getPosizioneInGraduatoria = async function (idapp, ind
|
|||||||
|
|
||||||
const Graduatoria = mongoose.model('Graduatoria', GraduatoriaSchema);
|
const Graduatoria = mongoose.model('Graduatoria', GraduatoriaSchema);
|
||||||
|
|
||||||
Graduatoria.createIndexes((err) => {
|
Graduatoria.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Graduatoria };
|
module.exports = { Graduatoria };
|
||||||
|
|||||||
@@ -44,9 +44,10 @@ module.exports.executeQueryTable = function (idapp, params) {
|
|||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await Group.find(myfind);
|
return await Group.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ module.exports.calculateHoursTodo = async function (idtodo) {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,10 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await ImportaDescr.find(myfind, (err, arrrec) => {
|
try {
|
||||||
return arrrec;
|
return await ImportaDescr.find(myfind).lean();
|
||||||
});
|
} catch (err) {
|
||||||
|
console.error("Errore in ImportaDescr:", err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
@@ -57,7 +57,10 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await ImportaIsbn.find(myfind, (err, arrrec) => {
|
try {
|
||||||
return arrrec;
|
return await ImportaIsbn.find(myfind).lean();
|
||||||
});
|
} catch (err) {
|
||||||
|
console.error("Errore in ImportaIsbn:", err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
@@ -57,7 +57,12 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await ImportaMacro.find(myfind, (err, arrrec) => {
|
|
||||||
return arrrec;
|
try {
|
||||||
});
|
return await ImportaMacro.find(myfind).lean();
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Errore in ImportaMacro:", err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -53,7 +53,6 @@ module.exports.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp, deleted: false };
|
const myfind = { idapp, deleted: false };
|
||||||
|
|
||||||
return await Inventariogm.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(Inventariogm, myfind);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
@@ -192,11 +192,10 @@ module.exports.findAllIdApp = async function(idapp) {
|
|||||||
|
|
||||||
const myfind = {idapp};
|
const myfind = {idapp};
|
||||||
|
|
||||||
return await IscrittiArcadei.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(this, myfind);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -189,14 +189,12 @@ module.exports.findByEmail = function (idapp, email) {
|
|||||||
|
|
||||||
module.exports.findAllIdApp = async function (idapp) {
|
module.exports.findAllIdApp = async function (idapp) {
|
||||||
|
|
||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await IscrittiConacreis.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(this, myfind);
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.createIndexes((err) => {
|
module.exports.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|||||||
@@ -55,9 +55,7 @@ LevelSchema.statics.findAllIdApp = async function(idapp) {
|
|||||||
{$sort: {_id: 1}},
|
{$sort: {_id: 1}},
|
||||||
];
|
];
|
||||||
|
|
||||||
return await Level.aggregate(query).then((arrrec) => {
|
return Level.aggregate(query);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -73,8 +71,9 @@ LevelSchema.statics.executeQueryTable = function(idapp, params) {
|
|||||||
|
|
||||||
const Level = mongoose.model('Level', LevelSchema);
|
const Level = mongoose.model('Level', LevelSchema);
|
||||||
|
|
||||||
Level.createIndexes((err) => {
|
Level.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {Level};
|
module.exports = {Level};
|
||||||
|
|||||||
@@ -36,9 +36,42 @@ MailingListSchema.statics.findAllIdAppSubscribed = function (idapp) {
|
|||||||
|
|
||||||
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
||||||
|
|
||||||
return User.find(myfind, (err, arrrec) => {
|
return tools.findAllQueryIdApp(User, myfind);
|
||||||
return arrrec
|
};
|
||||||
});
|
|
||||||
|
MailingListSchema.statics.findAllIdAppDiarioSubscr = function (idapp) {
|
||||||
|
|
||||||
|
const myfind = {
|
||||||
|
idapp,
|
||||||
|
diario_on: true,
|
||||||
|
$or: [
|
||||||
|
{ deleted: { $exists: false } },
|
||||||
|
{ deleted: { $exists: true, $eq: false } }],
|
||||||
|
$or: [
|
||||||
|
{ email_errata: { $exists: false } },
|
||||||
|
{ email_errata: { $exists: true, $ne: true } }],
|
||||||
|
};
|
||||||
|
|
||||||
|
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
||||||
|
|
||||||
|
return tools.findAllQueryIdApp(User, myfind);
|
||||||
|
};
|
||||||
|
MailingListSchema.statics.findAllIdAppDiarioSubscr = function (idapp) {
|
||||||
|
|
||||||
|
const myfind = {
|
||||||
|
idapp,
|
||||||
|
test: true,
|
||||||
|
$or: [
|
||||||
|
{ deleted: { $exists: false } },
|
||||||
|
{ deleted: { $exists: true, $eq: false } }],
|
||||||
|
$or: [
|
||||||
|
{ email_errata: { $exists: false } },
|
||||||
|
{ email_errata: { $exists: true, $ne: true } }],
|
||||||
|
};
|
||||||
|
|
||||||
|
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
||||||
|
|
||||||
|
return tools.findAllQueryIdApp(User, myfind);
|
||||||
};
|
};
|
||||||
|
|
||||||
MailingListSchema.statics.getnumSent = async function (idapp, idUser) {
|
MailingListSchema.statics.getnumSent = async function (idapp, idUser) {
|
||||||
@@ -62,12 +95,9 @@ MailingListSchema.statics.isOk = async function (idapp, iduser, idUser) {
|
|||||||
|
|
||||||
MailingListSchema.statics.findAllIdApp = async function (idapp) {
|
MailingListSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
|
||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await User.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(User, myfind);
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MailingListSchema.statics.isUnsubscribed = async function (idapp, hash) {
|
MailingListSchema.statics.isUnsubscribed = async function (idapp, hash) {
|
||||||
@@ -84,15 +114,14 @@ MailingListSchema.statics.findByHash = function (idapp, hash) {
|
|||||||
|
|
||||||
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
||||||
|
|
||||||
return User.findOne(myfind, (err, rec) => {
|
return User.findOne(myfind).lean();
|
||||||
return rec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const MailingList = mongoose.model('MailingList', MailingListSchema);
|
const MailingList = mongoose.model('MailingList', MailingListSchema);
|
||||||
|
|
||||||
User.createIndexes((err) => {
|
User.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MailingList };
|
module.exports = { MailingList };
|
||||||
|
|||||||
@@ -72,9 +72,8 @@ MovementSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await MyMovement.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(MyMovement, myfind);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MovementSchema.pre('save', async function (next) {
|
MovementSchema.pre('save', async function (next) {
|
||||||
@@ -1069,8 +1068,9 @@ MovementSchema.statics.getLastN_Transactions = async function (idapp, numtransaz
|
|||||||
|
|
||||||
const Movement = mongoose.model('Movement', MovementSchema);
|
const Movement = mongoose.model('Movement', MovementSchema);
|
||||||
|
|
||||||
Movement.createIndexes((err) => {
|
Movement.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Movement };
|
module.exports = { Movement };
|
||||||
|
|||||||
@@ -118,15 +118,15 @@ MsgTemplateSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await MsgTemplate.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(this, myfind);
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const MsgTemplate = mongoose.model('MsgTemplate', MsgTemplateSchema);
|
const MsgTemplate = mongoose.model('MsgTemplate', MsgTemplateSchema);
|
||||||
|
|
||||||
MsgTemplate.createIndexes((err) => {
|
MsgTemplate.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MsgTemplate };
|
module.exports = { MsgTemplate };
|
||||||
|
|||||||
@@ -143,9 +143,7 @@ MyBachecaSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
{ $sort: { descr: 1 } },
|
{ $sort: { descr: 1 } },
|
||||||
];
|
];
|
||||||
|
|
||||||
return await MyBacheca.aggregate(query).then((arrrec) => {
|
return await MyBacheca.aggregate(query);
|
||||||
return arrrec;
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -383,8 +381,9 @@ MyBachecaSchema.statics.getCompleteRecord = function (idapp, id) {
|
|||||||
|
|
||||||
const MyBacheca = mongoose.model('MyBacheca', MyBachecaSchema);
|
const MyBacheca = mongoose.model('MyBacheca', MyBachecaSchema);
|
||||||
|
|
||||||
MyBacheca.createIndexes((err) => {
|
MyBacheca.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyBacheca };
|
module.exports = { MyBacheca };
|
||||||
|
|||||||
@@ -61,7 +61,9 @@ const catalogo = new Schema(
|
|||||||
excludeproductTypes: [{ type: Number }],
|
excludeproductTypes: [{ type: Number }],
|
||||||
editore: [{ type: String }],
|
editore: [{ type: String }],
|
||||||
argomenti: [{ type: String }],
|
argomenti: [{ type: String }],
|
||||||
idCollane: [{ type: Number }],
|
idCollane: [{ type: String }],
|
||||||
|
idTipologia: [{ type: Number }],
|
||||||
|
idTipoFormato: [{ type: Number }],
|
||||||
sort_field: { type: String },
|
sort_field: { type: String },
|
||||||
sort_dir: { type: Number },
|
sort_dir: { type: Number },
|
||||||
pdf: { type: Boolean },
|
pdf: { type: Boolean },
|
||||||
@@ -69,6 +71,8 @@ const catalogo = new Schema(
|
|||||||
printable: { type: Boolean },
|
printable: { type: Boolean },
|
||||||
indebug: { type: Boolean },
|
indebug: { type: Boolean },
|
||||||
maxnumlibri: { type: Number },
|
maxnumlibri: { type: Number },
|
||||||
|
showListaArgomenti: { type: Boolean},
|
||||||
|
showListaCollane: { type: Boolean},
|
||||||
|
|
||||||
first_page: IDimensioni,
|
first_page: IDimensioni,
|
||||||
last_page: IDimensioni,
|
last_page: IDimensioni,
|
||||||
@@ -532,8 +536,9 @@ MyElemSchema.statics.getNewFreeNameTemplate = async function (idapp, idPageOrig,
|
|||||||
|
|
||||||
const MyElem = mongoose.model('MyElem', MyElemSchema);
|
const MyElem = mongoose.model('MyElem', MyElemSchema);
|
||||||
|
|
||||||
MyElem.createIndexes((err) => {
|
MyElem.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyElem };
|
module.exports = { MyElem };
|
||||||
|
|||||||
@@ -276,8 +276,9 @@ if (tools.INITDB_FIRSTIME) {
|
|||||||
|
|
||||||
const MyEvent = mongoose.model('MyEvent', MyEventSchema);
|
const MyEvent = mongoose.model('MyEvent', MyEventSchema);
|
||||||
|
|
||||||
MyEvent.createIndexes((err) => {
|
MyEvent.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = {MyEvent};
|
module.exports = {MyEvent};
|
||||||
|
|||||||
@@ -367,8 +367,9 @@ MyGoodSchema.statics.getProject = function () {
|
|||||||
|
|
||||||
const MyGood = mongoose.model('MyGood', MyGoodSchema);
|
const MyGood = mongoose.model('MyGood', MyGoodSchema);
|
||||||
|
|
||||||
MyGood.createIndexes((err) => {
|
MyGood.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyGood };
|
module.exports = { MyGood };
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ MyGroupSchema.pre('save', async function (next) {
|
|||||||
MyGroupSchema.statics.findAllIdApp = async function (idapp) {
|
MyGroupSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await MyGroup.find(myfind);
|
return await MyGroup.find(myfind).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
MyGroupSchema.statics.findAllGroups = async function (idapp) {
|
MyGroupSchema.statics.findAllGroups = async function (idapp) {
|
||||||
@@ -298,16 +298,16 @@ MyGroupSchema.statics.getArrUsernameFromFieldByGroupname = async function (
|
|||||||
const { User } = require('../models/user');
|
const { User } = require('../models/user');
|
||||||
|
|
||||||
const myobj = {};
|
const myobj = {};
|
||||||
myobj[field + '.' + subfield] = 1;
|
myobj[field] = 1;
|
||||||
|
|
||||||
let arrrec = await User.findOne({
|
const ris = await User.findOne({
|
||||||
idapp,
|
idapp,
|
||||||
groupname,
|
groupname,
|
||||||
$or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }],
|
$or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }],
|
||||||
}, myobj).then((ris) => ris ? ris._doc[field] : []);
|
}, myobj);
|
||||||
|
|
||||||
if (arrrec.length > 0) {
|
if (ris) {
|
||||||
return arrrec.map(m => m.username);
|
return ris[field].map(m => m.username);
|
||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
|
|
||||||
@@ -378,7 +378,7 @@ MyGroupSchema.statics.getInfoGroupByGroupname = async function (idapp, groupname
|
|||||||
|
|
||||||
MyGroupSchema.statics.deleteGroup = async function (idapp, usernameOrig, groupname) {
|
MyGroupSchema.statics.deleteGroup = async function (idapp, usernameOrig, groupname) {
|
||||||
console.log('Gruppo ' + groupname + ' rimosso da ' + usernameOrig);
|
console.log('Gruppo ' + groupname + ' rimosso da ' + usernameOrig);
|
||||||
return await MyGroup.findOneAndRemove({ idapp, groupname });
|
return await MyGroup.findOneAndDelete({ idapp, groupname });
|
||||||
};
|
};
|
||||||
|
|
||||||
MyGroupSchema.statics.getGroupsByUsername = async function (idapp, username, req) {
|
MyGroupSchema.statics.getGroupsByUsername = async function (idapp, username, req) {
|
||||||
@@ -441,7 +441,7 @@ MyGroupSchema.statics.getGroupsByUsername = async function (idapp, username, req
|
|||||||
listgroups,
|
listgroups,
|
||||||
listSentRequestGroups,
|
listSentRequestGroups,
|
||||||
listRefusedGroups,
|
listRefusedGroups,
|
||||||
mygroups: req.user.profile.mygroups,
|
mygroups: await User.getMyGroupsById(req.user._id),
|
||||||
};
|
};
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -663,19 +663,20 @@ MyGroupSchema.statics.renameCircuitName = async function (idapp, oldcircuitname,
|
|||||||
|
|
||||||
MyGroupSchema.statics.setReceiveRisGroup = async function (idapp, groupname) {
|
MyGroupSchema.statics.setReceiveRisGroup = async function (idapp, groupname) {
|
||||||
|
|
||||||
return await this.findOneAndUpdate({
|
const record = await this.findOneAndUpdate(
|
||||||
idapp, groupname,
|
{ idapp, groupname },
|
||||||
},
|
{ $set: { 'lastdate_reqRisGroup': new Date() } },
|
||||||
{ $set: { 'lastdate_reqRisGroup': new Date() } }, { new: false }).lean().then((record) => {
|
{ new: false }
|
||||||
return !!record;
|
).lean();
|
||||||
});
|
|
||||||
|
|
||||||
|
return !!record; // Restituisce true se il record esiste, false altrimenti
|
||||||
};
|
};
|
||||||
|
|
||||||
const MyGroup = mongoose.model('MyGroup', MyGroupSchema);
|
const MyGroup = mongoose.model('MyGroup', MyGroupSchema);
|
||||||
|
|
||||||
MyGroup.createIndexes((err) => {
|
MyGroup.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyGroup };
|
module.exports = { MyGroup };
|
||||||
|
|||||||
@@ -347,17 +347,16 @@ MyHospSchema.statics.getCompleteRecord = function (idapp, id) {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MyHospSchema.statics.SettaAdTypeOffro_In_Hosps = function () {
|
MyHospSchema.statics.SettaAdTypeOffro_In_Hosps = async function () {
|
||||||
const MyHosp = this;
|
const MyHosp = this;
|
||||||
|
|
||||||
// Set all records 'adType' to shared_consts.AdType.OFFRO
|
try {
|
||||||
MyHosp.updateMany({}, { $set: { adType: shared_consts.AdType.OFFRO } }, function (err, result) {
|
// Set all records 'adType' to shared_consts.AdType.OFFRO
|
||||||
if (err) {
|
const result = await MyHosp.updateMany({}, { $set: { adType: shared_consts.AdType.OFFRO } });
|
||||||
console.error('Error updating adType:', err);
|
console.log('Successfully updated adType for', result.modifiedCount, 'records');
|
||||||
} else {
|
} catch (err) {
|
||||||
console.log('Successfully updated adType for', result.nModified, 'records');
|
console.error('Error updating adType:', err);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MyHospSchema.statics.getProject = function () {
|
MyHospSchema.statics.getProject = function () {
|
||||||
@@ -383,8 +382,9 @@ MyHospSchema.statics.getProject = function () {
|
|||||||
|
|
||||||
const MyHosp = mongoose.model('MyHosp', MyHospSchema);
|
const MyHosp = mongoose.model('MyHosp', MyHospSchema);
|
||||||
|
|
||||||
MyHosp.createIndexes((err) => {
|
MyHosp.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyHosp };
|
module.exports = { MyHosp };
|
||||||
|
|||||||
@@ -164,9 +164,13 @@ MyPageSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const myfind = { idapp };
|
const myfind = { idapp };
|
||||||
|
|
||||||
return await MyPage.find(myfind, (err, arrrec) => {
|
try {
|
||||||
return arrrec
|
return await MyPage.find(myfind).sort({ title: 1 }).lean();
|
||||||
}).sort({ title: 1 }).lean();
|
} catch (err) {
|
||||||
|
console.error("Errore in MyPage:", err, model);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MyPageSchema.statics.findOnlyStruttRec = async function (idapp) {
|
MyPageSchema.statics.findOnlyStruttRec = async function (idapp) {
|
||||||
@@ -176,10 +180,7 @@ MyPageSchema.statics.findOnlyStruttRec = async function (idapp) {
|
|||||||
{
|
{
|
||||||
idapp,
|
idapp,
|
||||||
loadFirst: true,
|
loadFirst: true,
|
||||||
},
|
}).lean();
|
||||||
(err, arrrec) => {
|
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
|
|
||||||
const arrfixed = await MyPage.find(
|
const arrfixed = await MyPage.find(
|
||||||
{
|
{
|
||||||
@@ -206,9 +207,7 @@ MyPageSchema.statics.findOnlyStruttRec = async function (idapp) {
|
|||||||
loadFirst: 1,
|
loadFirst: 1,
|
||||||
mainMenu: 1,
|
mainMenu: 1,
|
||||||
sottoMenu: 1,
|
sottoMenu: 1,
|
||||||
}, (err, arrrec) => {
|
}).lean();
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
|
|
||||||
return [...arrFirst, ...arrfixed];
|
return [...arrFirst, ...arrfixed];
|
||||||
|
|
||||||
@@ -217,25 +216,32 @@ MyPageSchema.statics.findOnlyStruttRec = async function (idapp) {
|
|||||||
MyPageSchema.statics.findInternalPages = async function (idapp) {
|
MyPageSchema.statics.findInternalPages = async function (idapp) {
|
||||||
const MyPage = this;
|
const MyPage = this;
|
||||||
|
|
||||||
const myfind = {
|
try {
|
||||||
idapp,
|
const myfind = {
|
||||||
internalpage: { $exists: true, $eq: true }
|
idapp,
|
||||||
};
|
internalpage: { $exists: true, $eq: true }
|
||||||
|
};
|
||||||
|
|
||||||
return await MyPage.find(myfind, {
|
const result = await MyPage.find(myfind, {
|
||||||
title: 1,
|
title: 1,
|
||||||
path: 1,
|
path: 1,
|
||||||
onlyif_logged: 1,
|
onlyif_logged: 1,
|
||||||
only_residenti: 1,
|
only_residenti: 1,
|
||||||
}, (err, arrrec) => {
|
}).lean();
|
||||||
return arrrec
|
|
||||||
}).lean();
|
return result;
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
console.log('findInternalPages', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const MyPage = mongoose.model('MyPage', MyPageSchema);
|
const MyPage = mongoose.model('MyPage', MyPageSchema);
|
||||||
|
|
||||||
MyPage.createIndexes((err) => {
|
MyPage.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyPage };
|
module.exports = { MyPage };
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ const IDimensioni = new Schema({
|
|||||||
});
|
});
|
||||||
const IPagina = new Schema({
|
const IPagina = new Schema({
|
||||||
dimensioni: IDimensioni,
|
dimensioni: IDimensioni,
|
||||||
|
testo_title: IText,
|
||||||
testo_up: IText,
|
testo_up: IText,
|
||||||
testo_down: IText,
|
testo_down: IText,
|
||||||
});
|
});
|
||||||
@@ -81,7 +82,7 @@ const INovita = new Schema(
|
|||||||
const IBestseller = new Schema(
|
const IBestseller = new Schema(
|
||||||
{
|
{
|
||||||
show: Boolean,
|
show: Boolean,
|
||||||
primiNInClassifica: Number,
|
quantiFattRaggiunti: Number,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -129,9 +130,11 @@ const scheletroScheda = {
|
|||||||
|
|
||||||
productTypes: [{ type: Number }],
|
productTypes: [{ type: Number }],
|
||||||
excludeproductTypes: [{ type: Number }],
|
excludeproductTypes: [{ type: Number }],
|
||||||
|
idTipologie: [{ type: Number }],
|
||||||
|
idTipoFormato: [{ type: Number }],
|
||||||
editore: [{ type: String }],
|
editore: [{ type: String }],
|
||||||
argomenti: [{ type: String }],
|
argomenti: [{ type: String }],
|
||||||
idCollane: [{ type: Number }],
|
idCollane: [{ type: String }],
|
||||||
author: { type: String },
|
author: { type: String },
|
||||||
sort_field: { type: String },
|
sort_field: { type: String },
|
||||||
sort_dir: { type: Number },
|
sort_dir: { type: Number },
|
||||||
@@ -158,8 +161,9 @@ MySchedaSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
const MyScheda = mongoose.model('MyScheda', MySchedaSchema);
|
const MyScheda = mongoose.model('MyScheda', MySchedaSchema);
|
||||||
|
|
||||||
MyScheda.createIndexes((err) => {
|
MyScheda.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { MyScheda, MySchedaSchema, IDimensioni, IImg, IText, IAreaDiStampa, IImg };
|
module.exports = { MyScheda, MySchedaSchema, IDimensioni, IImg, IText, IAreaDiStampa, IImg };
|
||||||
|
|||||||
@@ -373,8 +373,4 @@ MySkillSchema.statics.getCompleteRecord = function (idapp, id) {
|
|||||||
|
|
||||||
const MySkill = mongoose.model('MySkill', MySkillSchema);
|
const MySkill = mongoose.model('MySkill', MySkillSchema);
|
||||||
|
|
||||||
MySkill.createIndexes((err) => {
|
|
||||||
if (err) throw err;
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = { MySkill };
|
module.exports = { MySkill };
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ const NewstosentSchema = new Schema({
|
|||||||
templemail_str: {
|
templemail_str: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
|
destnewsletter_str: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
activate: {
|
activate: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
@@ -65,8 +68,8 @@ const NewstosentSchema = new Schema({
|
|||||||
|
|
||||||
NewstosentSchema.statics.getFieldsForSearch = function () {
|
NewstosentSchema.statics.getFieldsForSearch = function () {
|
||||||
return [{ field: 'name', type: tools.FieldType.string },
|
return [{ field: 'name', type: tools.FieldType.string },
|
||||||
{ field: 'surname', type: tools.FieldType.string },
|
{ field: 'surname', type: tools.FieldType.string },
|
||||||
{ field: 'email', type: tools.FieldType.string }]
|
{ field: 'email', type: tools.FieldType.string }]
|
||||||
};
|
};
|
||||||
|
|
||||||
NewstosentSchema.statics.executeQueryTable = function (idapp, params) {
|
NewstosentSchema.statics.executeQueryTable = function (idapp, params) {
|
||||||
@@ -85,11 +88,7 @@ NewstosentSchema.statics.findNewsletter_To_Send = function (idapp) {
|
|||||||
processing_job: false,
|
processing_job: false,
|
||||||
finish_job: false,
|
finish_job: false,
|
||||||
idapp
|
idapp
|
||||||
})
|
}).sort({ datetoSent: 1 }).lean();
|
||||||
.sort({ datetoSent: 1 })
|
|
||||||
.then((rec) => {
|
|
||||||
return (rec) ? rec._doc : null;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
NewstosentSchema.statics.endJob = async function (id) {
|
NewstosentSchema.statics.endJob = async function (id) {
|
||||||
@@ -125,12 +124,12 @@ NewstosentSchema.statics.findNewsletterPending_To_Send = function (idapp) {
|
|||||||
starting_job: true,
|
starting_job: true,
|
||||||
finish_job: false,
|
finish_job: false,
|
||||||
processing_job: false,
|
processing_job: false,
|
||||||
lastemailsent_Job: { $gte: tools.IncDateNow(-1000 * 60 * 60 * 15) },
|
$or: [
|
||||||
|
{ lastemailsent_Job: { $gte: tools.IncDateNow(-1000 * 60 * 60 * 15) } },
|
||||||
|
{ lastemailsent_Job: null }
|
||||||
|
],
|
||||||
idapp
|
idapp
|
||||||
}).then((rec) => {
|
}).lean();
|
||||||
// console.log('findNewsletterPending_To_Send', rec);
|
|
||||||
return (rec) ? rec._doc : null;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
NewstosentSchema.statics.findAllIdApp = async function (idapp) {
|
NewstosentSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
@@ -140,19 +139,18 @@ NewstosentSchema.statics.findAllIdApp = async function (idapp) {
|
|||||||
|
|
||||||
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
// Extract only the Teacher where in the users table the field permissions is set 'Teacher' bit.
|
||||||
|
|
||||||
return await Newstosent.find(myfind, (err, arrrec) => {
|
return await tools.findAllQueryIdApp(this, myfind);
|
||||||
return arrrec
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
NewstosentSchema.statics.getlast = async function (idapp) {
|
NewstosentSchema.statics.getlast = async function (idapp) {
|
||||||
const Newstosent = this;
|
const Newstosent = this;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const mydoc = await Newstosent.find({ idapp }).sort({ datestartJob: -1 }).limit(1);
|
const mydoc = await Newstosent.findOne({ idapp }).sort({ datestartJob: -1 }).lean();
|
||||||
return mydoc[0]._doc;
|
return mydoc || null;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return null
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -170,8 +168,9 @@ NewstosentSchema.statics.isActivated = async function (_id) {
|
|||||||
|
|
||||||
const Newstosent = mongoose.model('Newstosent', NewstosentSchema);
|
const Newstosent = mongoose.model('Newstosent', NewstosentSchema);
|
||||||
|
|
||||||
Newstosent.createIndexes((err) => {
|
Newstosent.createIndexes()
|
||||||
if (err) throw err;
|
.then(() => { })
|
||||||
});
|
.catch((err) => { throw err; });
|
||||||
|
|
||||||
|
|
||||||
module.exports = { Newstosent };
|
module.exports = { Newstosent };
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user