Files
freeplanet_serverside/src/server/models/mybacheca.js
Surya Paolo 8f54cd2791 - corretto problema ROGNOSO : Risolvere la questione "Sessioni multiple", se apro 2 browser l'ultimo va a cancellare il precedente, e mi da errore di email non valida !
Il problema era sulla fetch nel service worker, gestita in quel modo personalizzato, andava in conflitto, non tenendo le chiamate bloccanti, ma uscivano prima che arrivasse la risposta del server.
- Per chi è da tanto che non si collega a RISO, compare "Email non verificata"... (si risolve chiudendo su ESCI e riloggandosi)... però andrebbe sistemata.
(stesso problema di prima).
2025-10-26 02:48:07 +02:00

374 lines
7.1 KiB
JavaScript
Executable File

const mongoose = require('mongoose').set('debug', false);
const Schema = mongoose.Schema;
mongoose.Promise = global.Promise;
mongoose.level = 'F';
const tools = require('../tools/general');
const { ObjectId } = require('mongodb');
const shared_consts = require('../tools/shared_nodejs');
const { Reaction } = require('./reaction');
const { MyGroup } = require('./mygroup');
const tableModel = shared_consts.TABLES_MYBACHECAS;
// Resolving error Unknown modifier: $pushAll
mongoose.plugin((schema) => {
schema.options.usePushEach = true;
});
const MyBachecaSchema = new Schema({
...{
_id: {
type: String,
default: function () {
return new ObjectId().toString();
},
},
idapp: {
type: String,
required: true,
},
userId: { type: Schema.Types.ObjectId, ref: 'User' },
groupname: { type: String },
idSector: {
type: Number,
},
idSkill: {
type: Number,
default: 0,
},
idStatusSkill: [
{
type: Number,
},
],
idContribType: [
{
type: String,
},
],
idCity: [
{
type: Number,
},
],
dateTimeStart: {
type: Date,
},
dateTimeEnd: {
type: Date,
required: false, // non obbligatorio
default: null, // valore predefinito esplicito (opzionale)
},
organisedBy: {
type: String,
},
contact_phone: {
type: String,
},
contact_email: {
type: String,
},
contact_telegram: {
type: String,
},
address: {
type: String,
},
min_partecip: {
type: Number,
},
max_partecip: {
type: Number,
},
link_maplocation: {
type: String,
},
contribstr: {
type: String,
},
numLevel: {
type: Number,
default: 0,
},
adType: {
type: Number,
},
photos: [
{
imagefile: {
type: String,
},
alt: {
type: String,
},
description: {
type: String,
},
},
],
note: {
type: String,
default: '',
},
descr: {
type: String,
},
//**ADDFIELD_MYBACHECAS
website: {
type: String,
},
date_created: {
type: Date,
},
date_updated: {
type: Date,
},
link_conference: {
type: String,
},
},
...Reaction.getFieldsForReactions(),
...tools.getFieldsForAnnunci(),
});
MyBachecaSchema.pre('save', async function (next) {
if (this.isNew) {
if (!this.date_created) this.date_created = new Date();
}
next();
});
MyBachecaSchema.statics.findAllIdApp = async function (idapp) {
const MyBacheca = this;
const query = [{ $match: { idapp } }, { $sort: { descr: 1 } }];
return await MyBacheca.aggregate(query);
};
MyBachecaSchema.statics.getFieldsForSearch = function () {
return [];
};
MyBachecaSchema.statics.getFieldsLastForSearch = function () {
return [
{ field: 'note', type: tools.FieldType.string },
{ field: 'descr', type: tools.FieldType.string },
{ field: 'recSkill.descr', type: tools.FieldType.string },
{ field: 'MyBacheca.descr', type: tools.FieldType.string },
];
};
MyBachecaSchema.statics.executeQueryTable = function (idapp, params, user) {
params.fieldsearch = this.getFieldsForSearch();
params.fieldsearch_last = this.getFieldsLastForSearch();
const otherparams = {
lookup1: {
lk_tab: 'users',
lk_LF: 'userId',
lk_FF: '_id',
lk_as: 'user',
af_objId_tab: 'myId',
lk_proj: shared_consts.getProjectForAll({}, tableModel),
},
};
params = { ...params, ...otherparams };
return tools.executeQueryTable(this, idapp, params, user);
};
MyBachecaSchema.statics.getMyRecById = function (idapp, id) {
const MyBacheca = this;
let myparsid = {
_id: id,
idapp,
};
let query = [
{
$match: myparsid,
},
{
$sort: {
desc: 1,
},
},
{
$addFields: {
myId1: {
$toObjectId: '$userId',
},
},
},
{
$lookup: {
from: 'users',
localField: 'myId1',
foreignField: '_id',
as: 'user',
},
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
$arrayElemAt: ['$user', 0],
},
'$$ROOT',
],
},
},
},
{
$project: shared_consts.getProjectForAll({}, tableModel),
},
{
$lookup: {
from: 'skills',
localField: 'idSkill',
foreignField: '_id',
as: 'recSkill',
},
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
$arrayElemAt: ['$recSkill', 0],
},
'$$ROOT',
],
},
},
},
{
$project: shared_consts.getProjectForAll({}, tableModel),
},
{
$lookup: {
from: 'sectors',
localField: 'idSector',
foreignField: '_id',
as: 'sector',
},
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
$arrayElemAt: ['$sector', 0],
},
'$$ROOT',
],
},
},
},
{
$lookup: {
from: 'mygroups',
localField: 'groupname',
foreignField: 'groupname',
as: 'mygrp',
},
},
{
$unwind: {
path: '$mygrp',
preserveNullAndEmptyArrays: true,
},
},
{
$project: shared_consts.getProjectForAll({}, tableModel),
},
/*{
'$lookup': {
'from': 'subskills',
'localField': 'idSubSkill',
'foreignField': '_id',
'as': 'MyBacheca',
},
},*/
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
$arrayElemAt: ['$MyBacheca', 0],
},
'$$ROOT',
],
},
},
},
{
$project: shared_consts.getProjectForAll({}, tableModel),
},
{
$lookup: {
from: 'cities',
localField: 'idCity',
foreignField: '_id',
as: 'mycities',
},
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
$arrayElemAt: ['$mycities', 0],
},
'$$ROOT',
],
},
},
},
];
try {
let numtab = tools.getNumTabByTable(shared_consts.TABLES_MYBACHECAS);
let objadd = tools.addNumFavoriteAndBookmarkToQuery(idapp, numtab);
query = [...query, ...objadd.query];
const toadd = {
$project: shared_consts.getProjectForAll(objadd.proj, tableModel),
};
query = [...query, { ...toadd }];
} catch (e) {
console.error('e', e);
}
return MyBacheca.aggregate(query).then((rec) => {
return rec ? rec[0] : null;
});
};
MyBachecaSchema.statics.getCompleteRecord = function (idapp, id) {
const MyBacheca = this;
return MyBacheca.getMyRecById(idapp, id);
};
const MyBacheca = mongoose.model('MyBacheca', MyBachecaSchema);
MyBacheca.createIndexes()
.then(() => {})
.catch((err) => {
throw err;
});
module.exports = { MyBacheca };