import { Meteor } from 'meteor/meteor'; import { PoblesCollection } from '/imports/api/pobles.js'; import { check } from "meteor/check"; import { Roles } from 'meteor/roles'; import { ROLS_GLOBALS, ROLS_DE_POBLE } from '../imports/roles'; import { NecessitatsCollection } from '../imports/api/necessitats'; import { TipusCollection } from '../imports/api/tipus'; async function insertPoble({ nomPoble, cp, comarca }) { await PoblesCollection.insertAsync({ nomPoble, cp, comarca, createdAt: new Date() }); } Meteor.startup(async () => { // If the Pobles collection is empty, add some data. if (await PoblesCollection.find().countAsync() === 0) { await insertPoble({ nomPoble: "Alaquàs", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Albal", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Aldaia", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Alfafar", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Algemesí", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Alginet", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Alcàsser", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Benetússer", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Beniparrell", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Carlet", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Catarroja", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Dosaigües", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Godelleta", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Guadassuar", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Iàtova", cp: "", comarca: "" }); await insertPoble({ nomPoble: "L'Alcúdia", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Llocnou de la Corona", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Massanassa", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Paiporta", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Parke Alkosa", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Picanya", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Sedaví", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Setaigües", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Utiel", cp: "", comarca: "" }); await insertPoble({ nomPoble: "València-Castellar Oliveral", cp: "", comarca: "" }); await insertPoble({ nomPoble: "València-Forn d'Alcedo", cp: "", comarca: "" }); await insertPoble({ nomPoble: "València-La Torre", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Xest", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Xiva", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Llombai", cp: "", comarca: "" }); await insertPoble({ nomPoble: "Tremolar", cp: "", comarca: "" }); } // We publish the entire Pobles collection to all clients. // In order to be fetched in real-time to the clients Meteor.publish("pobles", function () { return PoblesCollection.find(); }); Meteor.publish("necessitats", function () { return NecessitatsCollection.find(); }); Meteor.publish("tipus", function () { return TipusCollection.find(); }); Meteor.publish('usuaris', async function (uid) { const esAdmin = await Roles.userIsInRoleAsync(Meteor.userId(), "admin"); const userRoles = await Roles.getRolesForUserAsync(Meteor.userId()); console.log("userRoles: ", userRoles); if (uid) { return Meteor.users.find({_id: uid},{fields: {username: 1, avatarId: 1, avatarLink: 1}}); } return Meteor.users.find({},{fields: {username: 1, avatarId: 1, avatarLink: 1}}); }); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// try { await Roles.createRoleAsync(ROLS_GLOBALS.ADMINISTRADOR, { unlessExists: true }); await Roles.createRoleAsync(ROLS_GLOBALS.USUARI, { unlessExists: true }); await Roles.createRoleAsync(ROLS_DE_POBLE.MONITOR, { unlessExists: true }); await Roles.createRoleAsync(ROLS_DE_POBLE.ENCARREGAT, { unlessExists: true }); await Roles.createRoleAsync(ROLS_DE_POBLE.VOLUNTARI, { unlessExists: true }); await Roles.addRolesToParentAsync([ROLS_DE_POBLE.VOLUNTARI, ROLS_DE_POBLE.ENCARREGAT], ROLS_DE_POBLE.MONITOR); await Roles.addRolesToParentAsync([ROLS_DE_POBLE.VOLUNTARI, ROLS_DE_POBLE.ENCARREGAT, ROLS_DE_POBLE.MONITOR, ROLS_GLOBALS.USUARI], ROLS_GLOBALS.ADMINISTRADOR); } catch (err) { console.error(err.message); } // Publish user's own roles Meteor.publish(null, function () { if (this.userId) { return Meteor.roleAssignment.find({ "user._id": this.userId }); } this.ready(); }); // Publish roles for specific scope // Meteor.publish("scopeRoles", function (scope) { // if (this.userId) { // return Meteor.roleAssignment.find({ scope: scope }); // } // this.ready(); // }); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Meteor.methods({ 'editaOAfigPoble': async function (poble) { const esAdmin = await Roles.userIsInRoleAsync(Meteor.userId(), "admin"); try { console.log(`EDICIÓ DE POBLE sol·licitada per a "${poble.nomPoble}". Comprovant si ${Meteor.userId()} és Admin: `, esAdmin); if (esAdmin && poble.nomPoble) { return await PoblesCollection.upsertAsync( { _id: poble._id }, { $set: { ...poble, usuari: Meteor.userId(), editedAt: new Date() } } ); } else { throw new Error("El nom del poble no és vàlid"); } } catch (e) { console.error(e); } }, 'afigNecessitat': async function (necessitat) { const esAdmin = await Roles.userIsInRoleAsync(Meteor.userId(), "admin"); try { console.log(`CREACIÓ DE NECESSITAT sol·licitada per a "${necessitat.titol}". Comprovant si ${Meteor.userId()} és Admin: `, esAdmin); if (esAdmin && necessitat.titol) { return await NecessitatsCollection.upsertAsync( { _id: necessitat._id }, { $set: { ...necessitat, usuari: Meteor.userId(), editedAt: new Date() } } ); } else { throw new Error("No tens permís o el títol no està correcte"); } } catch (e) { console.error(e); } }, 'eliminaPoble': async function (pobleId) { const esAdmin = await Roles.userIsInRoleAsync(Meteor.userId(), "admin"); try { console.log(`ELIMINACIÓ DE POBLE sol·licitada per a ${pobleId}. Comprovant si ${Meteor.userId()} és Admin: `, esAdmin); if (esAdmin && pobleId) { return await PoblesCollection.removeAsync(pobleId); } else { throw new Error("El nom del poble no és vàlid"); } } catch (e) { console.error(e); } }, 'afigTipus': async function (tipus) { const esAdmin = await Roles.userIsInRoleAsync(Meteor.userId(), "admin"); try { console.log(`CREACIÓ DE TIPUS sol·licitada per a "${tipus.titol}". Comprovant si ${Meteor.userId()} és Admin: `, esAdmin); if (esAdmin && tipus.titol) { return await TipusCollection.upsertAsync( { _id: tipus._id }, { $set: { ...tipus, usuari: Meteor.userId(), editedAt: new Date() } } ); } else { throw new Error("El nom del poble no és vàlid"); } } catch (e) { console.error(e); } }, }); });