Commit c6ceee15 authored by Bruno Meyer's avatar Bruno Meyer 😢 Committed by Matheus Horstmann

Resolve "Popular os dados de Blocos e Salas"

parent ab6de448
......@@ -4,6 +4,8 @@ var path = require('path');
var models = require(path.resolve(__dirname,'../common/models/models.js'))
var app = require(path.resolve(__dirname, '../server/server'));
var old_db = require(path.resolve(__dirname, '../bin/load-old-database'));
var ds = app.datasources.ensalamento;
var lbTables = models.models;
......@@ -20,39 +22,44 @@ ds.automigrate(lbTables, function(err) {
});
function criaBloco(cb){
var blocos = [
{localizacao: '0,0', tamanho: 10},
{localizacao: '0,0', tamanho: 10}
];
async.each(blocos, function(bloco, callback) {
app.models.Bloco.create(bloco, function(err, model) {
callback(err);
console.log('Created:', model);
// var blocos = [
// {localizacao: '0,0', tamanho: 10, nome: "bloco1", codigo:"codigo1"},
// {localizacao: '0,0', tamanho: 10, nome: "bloco2", codigo:"codigo2"}
// ];
old_db.get_blocos.then(blocos => {
async.each(blocos, function(bloco, callback) {
app.models.Bloco.create(bloco, function(err, model) {
callback(err);
console.log('Created:', model);
});
}, function(err) {
if (err) throw err;
cb(err);
});
}, function(err) {
if (err) throw err;
cb(err);
});
}
function criaSala(cb){
var salas = [
{localizacao: '41.12,-71.34', capacidade: 10, tipo:"teste", restrita:false},
{localizacao: '41.12,-71.34', capacidade: 10, tipo:"teste", restrita:true}
];
async.each(salas, function(sala, callback) {
app.models.Sala.create(sala, function(err, model) {
callback(err);
console.log('Created:', model);
// var salas = [
// {localizacao: '41.12,-71.34', capacidade: 10, tipo:"teste", restrita:false},
// {localizacao: '41.12,-71.34', capacidade: 10, tipo:"teste", restrita:true}
// ];
old_db.get_salas.then(salas => {
async.each(salas, function(sala, callback) {
app.models.Sala.create(sala, function(err, model) {
callback(err);
console.log('Created:', model);
});
}, function(err) {
if (err) throw err;
cb(err);
});
}, function(err) {
if (err) throw err;
cb(err);
});
}
......
var path = require("path");
var fs = require("fs");
const { Client } = require('pg')
var migrate_old_schema = require(path.resolve(__dirname, "../bin/migrate-old-schema"));
// Access a table in database
// The table_name can be a specific query
function load_data_from_db(columns, table_name){
let client = new Client({
connectionString: migrate_old_schema.connectionString,
});
client.connect()
return new Promise( (resolve, reject) => {
client.query('SELECT '+columns+' FROM '+table_name, (err, res) => {
if (!err) {
resolve(res);
}
else {
reject(Error("Cannot access table",table_name," on database!"));
}
client.end()
});
});
}
class EnsalamentoTable {
constructor(dict, mapper, columns, query, loopback_name){
this.dict = dict;
this.mapper = mapper;
this.query = query;
this.columns = columns;
this.loopback_name = loopback_name;
this.file_path = path.resolve(__dirname, "../bin/old-database/"+this.loopback_name+".json");
}
// Transform the data with the rules defined in migrate-old-schema.js
parse_instance(row){
var new_row = {};
for(var old_name in row){
if(old_name in this.dict){
var new_name = this.dict[old_name];
new_row[new_name] = row[old_name];
}
}
return new_row;
}
get_table(){
load_data_from_db(this.columns,this.query).then( res => {
console.log(res);
});
}
// Get the data of the table translated to an Loopback model
get_table_from_db_parsed(){
return new Promise( (resolve, reject) => {
load_data_from_db(this.columns, this.query).then( res => {
var data = [];
for(var i in res.rows){
var new_instance = this.parse_instance(res.rows[i]);
data.push(this.mapper(new_instance));
}
resolve(data);
});
});
}
// Load the data from DB and store in a json file
save(){
this.get_table_from_db_parsed().then(data =>{
var json = JSON.stringify(data);
console.log("Saving ", this.loopback_name, "into", this.file_path);
fs.writeFile(this.file_path, json, 'utf8', () => {
console.log("Saved ", this.loopback_name, "into", this.file_path);
});
});
}
// Load the file created with save method
load(){
return new Promise( (resolve, reject) => {
fs.readFile(this.file_path, 'utf8', (err, data) => {
if (err){
reject(err);
} else {
var obj = JSON.parse(data);
resolve(obj);
}
});
});
}
}
var tables = migrate_old_schema.tables.map( schema => {
return new EnsalamentoTable(
schema[0],
schema[1],
schema[2],
schema[3],
schema[4]
)
});
if(process.argv.indexOf("--save")+1 || process.argv.indexOf("-s")+1){
for(var i in tables){
tables[i].save();
}
}
exports.tables = tables;
// THE JSON FILES ON DIRECTORY old-database MUST EXIST
// Run this script with --save option to create the json files. To do this,
// you have to specify the connectionString on migrate-old-schema.js
exports.tables.forEach(function(table) {
var promise_name = "get_"+table.loopback_name;
exports[promise_name] = table.load()
});
// On this file, you must put all information that will be used to load data
// from old DB and change it if necessary
// Here you must put the tables that will be loaded from database
// Each element must have the follow format:
// [
// parser: object,
// mapper: function,
// columns: string,
// query: string,
// new_name: string
// ]
// parser: An dictionary that translate the old columns name to the new names.
// Columns not specified will not be loaded
// mapper: A function that transform the instance after the data was loaded.
// If it is not necessary, create an empty function
// columns: The columns extract from query (SQL) that will be used to load the table
// query: The query (SQL) that will be used to load the table
// new_name: This is NECESSARILY a name of an model in the Loopback schema
var connectionString = 'postgresql://bhm15:pass@localhost:5432/ensalamento';
var rooms = [
{
"name": "nome",
"code": "codigo",
"size": "capacidade",
"floor": "andar",
"information": "observacao",
"can_use": "restrita",
"latitude": "latitude",
"longitude": "longitude",
"blocks_code": "blocoCod"
},function(x){
x.restrita = !x.restrita;
x.localizacao = {lat:x.latitude, lng: x.longitude};
delete x.latitude;
delete x.longitude;
return x;
},
"*, blocks.code as blocks_code",
"rooms INNER JOIN blocks ON rooms.block_id = blocks.id",
"salas"
];
var blocks = [
{
"name": "nome",
"code": "codigo",
"size": "capacidade",
"latitude": "latitude",
"longitude": "longitude"
},function(x){
x.restrita = !x.restrita;
x.localizacao = {lat:x.latitude, lng: x.longitude};
delete x.latitude;
delete x.longitude;
return x;
},
"*",
"blocks",
"blocos"
];
exports.tables = [rooms, blocks];
exports.connectionString = connectionString;
*.json
\ No newline at end of file
[{"codigo":"eq","nome":"EQ","restrita":true,"localizacao":{"lat":-25.448797,"lng":-49.2341427}},{"codigo":"pa","nome":"PA","restrita":true,"localizacao":{"lat":-25.450472,"lng":-49.2322392}},{"codigo":"pc","nome":"PC","restrita":true,"localizacao":{"lat":-25.450734,"lng":-49.2319122}},{"codigo":"dinf","nome":"Departamento de Informática","restrita":true,"localizacao":{"lat":-25.450734,"lng":-49.2319122}},{"codigo":"pd","nome":"PD","restrita":true,"localizacao":{"lat":-25.451361,"lng":-49.2334662}},{"codigo":"pe","nome":"PE","restrita":true,"localizacao":{"lat":-25.451666,"lng":-49.232823}},{"codigo":"pg","nome":"PG","restrita":true,"localizacao":{"lat":-25.452337,"lng":-49.233125}},{"codigo":"ph","nome":"PH","restrita":true,"localizacao":{"lat":-25.452718,"lng":-49.233158}},{"codigo":"pk","nome":"PK","restrita":true,"localizacao":{"lat":-25.451856,"lng":-49.2345482}},{"codigo":"pl","nome":"PL","restrita":true,"localizacao":{"lat":-25.451488,"lng":-49.233925}},{"codigo":"pm","nome":"PM","restrita":true,"localizacao":{"lat":-25.451105,"lng":-49.234183}},{"codigo":"pq","nome":"PQ","restrita":true,"localizacao":{"lat":-25.450558,"lng":-49.2353778}},{"codigo":"dp1","nome":"Dom Pedro I","restrita":true,"localizacao":{"lat":-25.426764,"lng":49.261596}},{"codigo":"dp2","nome":"Dom Pedro II","restrita":true,"localizacao":{"lat":-25.426987,"lng":49.262168}},{"codigo":"jg","nome":"João Gualberto","restrita":true,"localizacao":{"lat":-25.421766,"lng":-49.266682}},{"codigo":"xv","nome":"XV","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"pi","nome":"PI","restrita":true,"localizacao":{"lat":-25.4530002,"lng":-49.233452}},{"codigo":"eb","nome":"EB - Eng. Bioprocessos","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"ef","nome":"Educação Física","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"bl_dbot","nome":"Departamento de Botânica","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"bl_dbiocel","nome":"Departamento de Biologia Celular","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"bl_dpat","nome":"Departamento de Patologia Básica","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"fabricaomecnica","nome":"Prédio da Fabricação da Eng. Mecânica","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"materiaisengmecnica","nome":"Prédio de Materiais da Eng. Mecânica","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"maquinastermicas","nome":"Prédio de Máquinas Térmicas","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"maquinashidraulicas","nome":"Prédio de Máquinas Hidráulicas","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"bl_dprf","nome":"Departamento de Prevenção e Reabilitação em Fisioterapia","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"bl_dfisio","nome":"Departamento de Fisiologia","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"bl_dzoo","nome":"Departamento de Zoologia","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"bl_danat","nome":"Departamento de Anatomia","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"bl_dbbm","nome":"Departamento de Bioquímica e Biologia Molecular","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"bl_dgen","nome":"Departamento de Genética","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"adminsitracao","nome":"Predio da Administração","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"pf","nome":"PF","restrita":true,"localizacao":{"lat":-25.452041,"lng":-49.232887}},{"codigo":"bl","nome":"Ciências Biológicas - Prédio principal","restrita":true,"localizacao":{"lat":-25.4475472,"lng":-49.2330485}},{"codigo":"bl_anexo_i","nome":"Ciências Biológicas - Anexo I","restrita":true,"localizacao":{"lat":-25.4460286,"lng":-49.2333907}},{"codigo":"palotina-bl-1","nome":"PALOTINA BL 1 - BLOCO DIDÁTICO l","restrita":true,"localizacao":{"lat":-24,"lng":-53}},{"codigo":"palotina-bl-2","nome":"PALOTINA BL 2 - BLOCO DIDÁTICO II","restrita":true,"localizacao":{"lat":-24,"lng":-53}},{"codigo":"palotina-bl-3","nome":"PALOTINA BL 3 - BLOCO DIDÁTICO III","restrita":true,"localizacao":{"lat":-24,"lng":-53}},{"codigo":"palotina-bl-4","nome":"PALOTINA BL 4 - BLOCO DIDÁTICO IV","restrita":true,"localizacao":{"lat":-24,"lng":-53}},{"codigo":"palotina-bl-5","nome":"PALOTINA BL 5 - BLOCO DIDÁTICO V","restrita":true,"localizacao":{"lat":-24,"lng":-53}},{"codigo":"ct","nome":"CT - Ed. Prof. Camil Gemael","restrita":true,"localizacao":{"lat":-25.451487,"lng":-49.2322122}},{"codigo":"lageh","nome":"LAGEH","restrita":true,"localizacao":{"lat":0,"lng":0}},{"codigo":"t","nome":"T - Ed. Prof. João José Bigarella","restrita":true,"localizacao":{"lat":0,"lng":0}}]
\ No newline at end of file
This diff is collapsed.
......@@ -3,10 +3,13 @@
## Sala
- Public: `False`
- Attributes
* nome : **string**
* codigo : **string** `Required`
* localizacao : **geopoint** `Required`
* andar : **number** default=`0`
* capacidade : **number** `Required`, default=`0`
* tipo : **string** `Required`, default=`"normal"`
* restrita : **boolean** `Required`, default=`false`
* observacao : **string**
- ACLs
* All permissions not specified is `DENY`
* **$everyone** ROLE have all READ operations
......@@ -17,7 +20,9 @@
## Bloco
- Public: `True`
- Attributes
- Attributes `idInjection`=`false`
* nome : **string** `Required`
* codigo : **string** `Required` `primaryKey`
* localizacao : **geopoint** `Required`
* tamanho : **number** `Required`, default=`0`
- ACLs
......@@ -25,7 +30,6 @@
* **$everyone** ROLE have all READ operations
* **admin** ROLE have all EXECUTE, READ and WRITE operations
- Relations
* Has many : **Sala** `nestRemoting`, `disableInclude`
## Disciplina
- Public: `True`
......
......@@ -2,7 +2,7 @@
"name": "Bloco",
"plural": "blocos",
"base": "PersistedModel",
"idInjection": true,
"idInjection": false,
"options": {
"validateUpsert": true,
"idInjection": false,
......@@ -16,6 +16,15 @@
"type": "geopoint",
"required": true
},
"nome": {
"type": "string",
"required": true
},
"codigo": {
"type": "string",
"required": true,
"id":true
},
"tamanho": {
"type": "number",
"required": true,
......@@ -23,17 +32,7 @@
}
},
"validations": [],
"relations": {
"salas": {
"type": "hasMany",
"model": "Sala",
"foreignKey": "id",
"options": {
"nestRemoting": true,
"disableInclude": true
}
}
},
"relations": {},
"acls": [
{
"principalType": "ROLE",
......
......@@ -12,24 +12,33 @@
}
},
"properties": {
"nome": {
"type": "string"
},
"codigo": {
"type": "string",
"required": true
},
"localizacao": {
"type": "geopoint",
"required": true
},
"capacidade": {
"andar": {
"type": "number",
"required": true,
"default": 0
},
"tipo": {
"type": "string",
"capacidade": {
"type": "number",
"required": true,
"default": "normal"
"default": 0
},
"restrita": {
"type": "boolean",
"required": true,
"default": false
},
"observacao": {
"type": "string"
}
},
"validations": [],
......@@ -37,7 +46,7 @@
"bloco": {
"type": "belongsTo",
"model": "Bloco",
"foreignKey": ""
"foreignKey": "blocoCod"
},
"recursos": {
"type": "hasAndBelongsToMany",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment