diff --git a/src/adonisjs/app/Controllers/Http/v1/CaseController.js b/src/adonisjs/app/Controllers/Http/v1/CaseController.js index 467e55d..4201fb9 100644 --- a/src/adonisjs/app/Controllers/Http/v1/CaseController.js +++ b/src/adonisjs/app/Controllers/Http/v1/CaseController.js @@ -9,6 +9,7 @@ const Database = use('Database') const User = use('App/Models/v1/User') const Case = use('App/Models/v1/Case') const CaseVersion = use('App/Models/v1/CaseVersion') +const Institution = use('App/Models/v1/Institution') const uuidv4 = require('uuid/v4') @@ -45,6 +46,10 @@ class CaseController { c.source = versions.last().source c.versions = versions + + const institution = await Institution.find(c.institution_id) + c.institution = institution.acronym + return response.json(c) } else return response.status(500).json('case not found') } catch (e) { @@ -67,6 +72,11 @@ class CaseController { c.specialty = request.input('specialty') c.keywords = request.input('keywords') c.original_date = request.input('original_date') + c.complexity = request.input('complexity') + + const institutionAcronym = request.input('institution') + let institution = await Institution.findBy('acronym', institutionAcronym) + await c.institution().associate(institution) const cv = new CaseVersion() cv.id = await uuidv4() @@ -93,18 +103,24 @@ class CaseController { const c = await Case.find(params.id) if (c != null) { - c.title = request.input('title') - c.description = request.input('description') - c.language = request.input('language') - c.domain = request.input('domain') - c.specialty = request.input('specialty') - c.keywords = request.input('keywords') - c.original_date = request.input('originalDate') + c.title = request.input('title') || null + c.description = request.input('description')|| null + c.language = request.input('language')|| null + c.domain = request.input('domain')|| null + c.specialty = request.input('specialty')|| null + c.keywords = request.input('keywords')|| null + c.original_date = request.input('originalDate')|| null + c.complexity = request.input('complexity')|| null + + const institutionAcronym = request.input('institution') + let institution = await Institution.findBy('acronym', institutionAcronym) + await c.institution().associate(institution) const cv = new CaseVersion() cv.source = request.input('source') cv.id = await uuidv4() await c.versions().save(cv) + await c.save() return response.json(c) } else return response.status(500).json('case not found') diff --git a/src/adonisjs/app/Models/v1/Case.js b/src/adonisjs/app/Models/v1/Case.js index 7771448..43eab1b 100644 --- a/src/adonisjs/app/Models/v1/Case.js +++ b/src/adonisjs/app/Models/v1/Case.js @@ -30,6 +30,10 @@ class Case extends Model { .withPivot(['order_position']) .withTimestamps() } + + institution () { + return this.belongsTo('App/Models/v1/Institution') + } } module.exports = Case diff --git a/src/adonisjs/bootstrap.sh b/src/adonisjs/bootstrap.sh index 4dab698..66055a0 100755 --- a/src/adonisjs/bootstrap.sh +++ b/src/adonisjs/bootstrap.sh @@ -1,5 +1,7 @@ #!/bin/bash +echo "Migration process started" + adonis migration:run adonis seed --files InitialSeeder.js diff --git a/src/adonisjs/database/migrations/1599957000250_case_update_add_complexity_attribute_schema.js b/src/adonisjs/database/migrations/1599957000250_case_update_add_complexity_attribute_schema.js new file mode 100644 index 0000000..79998cb --- /dev/null +++ b/src/adonisjs/database/migrations/1599957000250_case_update_add_complexity_attribute_schema.js @@ -0,0 +1,20 @@ +'use strict' + +/** @type {import('@adonisjs/lucid/src/Schema')} */ +const Schema = use('Schema') + +class CaseUpdateAddComplexityAttributeSchema extends Schema { + up () { + this.table('cases', (table) => { + table.string('complexity') + }) + } + + down () { + this.table('cases', (table) => { + table.dropColumn('complexity') + }) + } +} + +module.exports = CaseUpdateAddComplexityAttributeSchema diff --git a/src/adonisjs/database/migrations/1600092084952_case_update_add_institution_relationship_schema.js b/src/adonisjs/database/migrations/1600092084952_case_update_add_institution_relationship_schema.js new file mode 100644 index 0000000..a007bc6 --- /dev/null +++ b/src/adonisjs/database/migrations/1600092084952_case_update_add_institution_relationship_schema.js @@ -0,0 +1,21 @@ +'use strict' + +/** @type {import('@adonisjs/lucid/src/Schema')} */ +const Schema = use('Schema') + +class CaseUpdateAddInstitutionRelationshipSchema extends Schema { + up () { + this.table('cases', (table) => { + table.uuid('institution_id').references('id').inTable('institutions').index('institution_id') + }) + } + + down () { + this.table('cases', (table) => { + table.dropForeign('institution_id') + table.dropColumn('institution_id') + }) + } +} + +module.exports = CaseUpdateAddInstitutionRelationshipSchema diff --git a/src/adonisjs/database/seeds/InitialSeeder.js b/src/adonisjs/database/seeds/InitialSeeder.js index 6d8b8d3..c96c682 100644 --- a/src/adonisjs/database/seeds/InitialSeeder.js +++ b/src/adonisjs/database/seeds/InitialSeeder.js @@ -13,6 +13,7 @@ /** @type {import('@adonisjs/lucid/src/Factory')} */ const Factory = use('Factory') +const Institution = use('App/Models/v1/Institution') const Property = use('App/Models/Property') const CaseArtifacts = use('App/Models/CaseArtifact') const CaseVersion = use('App/Models/v1/CaseVersion') @@ -39,12 +40,14 @@ class UserSeeder { const jacinto = await User.findBy('username', 'jacinto') if (jacinto == null) { + + const institution = await this.seed_institution(trx) const user = await this.seed_default_users(trx) - const c = await this.seed_default_case(trx) const artifact = await this.seed_artifact(c, trx) await user.artifacts().save(artifact, trx) + await user.institution().associate(institution, trx) await user.save(trx) @@ -174,9 +177,32 @@ class UserSeeder { } } - async seed_default_quests (trx) { + async seed_institution(trx) { try { + const institution = new Institution() + institution.id = await uuidv4() + institution.acronym = 'uni' + institution.title = 'Universidade' + institution.country = 'UN' + + const institution2 = new Institution() + institution2.id = await uuidv4() + institution2.acronym = 'unicamp' + institution2.title = 'Universidade Estadual de Campinas' + institution2.country = 'BR' + + const institution3 = new Institution() + institution3.id = await uuidv4() + institution3.acronym = 'minho' + institution3.title = 'Universidade do Minho' + institution3.country = 'PT' + + institution.save(trx) + institution2.save(trx) + institution3.save(trx) + + return institution } catch (e) { } @@ -207,6 +233,7 @@ class UserSeeder { c.domain = 'domain-test' c.specialty = 'specialty-test' c.keywords = 'keyword1; keyword2' + c.complexity = 'undergraduate' c.id = await uuidv4() const cv = new CaseVersion() diff --git a/src/adonisjs/start/routes.js b/src/adonisjs/start/routes.js index 762ba33..8fbc089 100644 --- a/src/adonisjs/start/routes.js +++ b/src/adonisjs/start/routes.js @@ -18,15 +18,15 @@ Route.get('/', () => { return 'Hello from Harena Manager'} ) |---------------------------------------------------------------------------------------------- */ Route.group(() => { - Route.post( '', 'v1/UserController.store') + Route.post( '', 'v1/UserController.store') - Route.get('cases', 'v1/UserController.list_cases').middleware(['auth']) - Route.get( 'quests', 'v1/UserController.list_quests').middleware(['auth']) - Route.get( 'cases_by_quest', 'v1/UserController.list_cases_by_quests').middleware(['auth']) + Route.get( 'cases', 'v1/UserController.list_cases').middleware(['auth']) + Route.get( 'quests', 'v1/UserController.list_quests').middleware(['auth']) + Route.get( 'cases_by_quest', 'v1/UserController.list_cases_by_quests').middleware(['auth']) - Route.get( ':id', 'v1/UserController.show').middleware(['auth']) - Route.put( ':id', 'v1/UserController.update').middleware(['auth']) - Route.delete(':id', 'v1/UserController.destroy').middleware(['auth']) + Route.get( ':id', 'v1/UserController.show').middleware(['auth']) + Route.put( ':id', 'v1/UserController.update').middleware(['auth']) + Route.delete(':id', 'v1/UserController.destroy').middleware(['auth']) }).prefix('/api/v1/user') @@ -63,9 +63,8 @@ Route.group(() => { |---------------------------------------------------------------------------------------------- */ Route.group(() => { - Route.get( '', 'v1/CaseController.index') Route.get( ':id', 'v1/CaseController.show') - Route.post( '', 'v1/CaseController.store') + Route.post( '', 'v1/CaseController.store') Route.put( ':id', 'v1/CaseController.update').middleware(['check_permission:contributor']) Route.post( 'share', 'v1/CaseController.share').middleware(['check_permission:author']) Route.delete(':id', 'v1/CaseController.destroy').middleware(['check_permission:author']) @@ -130,18 +129,20 @@ Route.group(() => { |---------------------------------------------------------------------------------------------- */ Route.group(() => { - Route.get( 'users', 'v1/UserController.index') + Route.get( 'users', 'v1/UserController.index') Route.get( 'roles', 'v1/AdminController.list_roles') - Route.post( 'role', 'v1/AdminController.create_role') + Route.post( 'role', 'v1/AdminController.create_role') Route.post( 'role/link/permission', 'v1/AdminController.link_role_permission') Route.get( 'user/:id/roles', 'v1/AdminController.list_roles_by_user') - Route.post( 'user/link/role', 'v1/AdminController.linkRoleUser') + Route.post( 'user/link/role', 'v1/AdminController.linkRoleUser') - Route.get( 'quests', 'v1/QuestController.index') - Route.post( 'quest/link/user', 'v1/QuestController.linkUser') - Route.delete('quest/:id', 'v1/QuestController.destroy') + Route.get( 'cases', 'v1/CaseController.index') + + Route.get( 'quests', 'v1/QuestController.index') + Route.post( 'quest/link/user', 'v1/QuestController.linkUser') + Route.delete('quest/:id', 'v1/QuestController.destroy') Route.post( 'institution', 'v1/InstitutionController.store')