From 4d22c76d4fb692797aee0f63dc4dce81b3b05452 Mon Sep 17 00:00:00 2001 From: faguim Date: Sat, 12 Sep 2020 23:02:58 -0300 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Add=20cases.complexi?= =?UTF-8?q?ty=20attribute?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/Controllers/Http/v1/CaseController.js | 2 ++ ..._update_add_complexity_attribute_schema.js | 20 +++++++++++++++++++ src/adonisjs/database/seeds/InitialSeeder.js | 1 + 3 files changed, 23 insertions(+) create mode 100644 src/adonisjs/database/migrations/1599957000250_case_update_add_complexity_attribute_schema.js diff --git a/src/adonisjs/app/Controllers/Http/v1/CaseController.js b/src/adonisjs/app/Controllers/Http/v1/CaseController.js index 467e55d..f8de29c 100644 --- a/src/adonisjs/app/Controllers/Http/v1/CaseController.js +++ b/src/adonisjs/app/Controllers/Http/v1/CaseController.js @@ -67,6 +67,7 @@ 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 cv = new CaseVersion() cv.id = await uuidv4() @@ -100,6 +101,7 @@ class CaseController { c.specialty = request.input('specialty') c.keywords = request.input('keywords') c.original_date = request.input('originalDate') + c.complexity = request.input('complexity') const cv = new CaseVersion() cv.source = request.input('source') 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/seeds/InitialSeeder.js b/src/adonisjs/database/seeds/InitialSeeder.js index 6d8b8d3..a0533c1 100644 --- a/src/adonisjs/database/seeds/InitialSeeder.js +++ b/src/adonisjs/database/seeds/InitialSeeder.js @@ -207,6 +207,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() From 49f6e0ecdd1b80fcb99a6a2278604628af4f44d8 Mon Sep 17 00:00:00 2001 From: faguim Date: Mon, 14 Sep 2020 13:36:40 -0300 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Git=20issues=20deman?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolve issues from harena kanban: #87 #215 #198 #197 --- .../app/Controllers/Http/v1/CaseController.js | 9 ++++++ src/adonisjs/app/Models/v1/Case.js | 4 +++ src/adonisjs/bootstrap.sh | 2 ++ ...ate_add_institution_relationship_schema.js | 21 +++++++++++++ src/adonisjs/database/seeds/InitialSeeder.js | 30 ++++++++++++++++-- src/adonisjs/start/routes.js | 31 ++++++++++--------- 6 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 src/adonisjs/database/migrations/1600092084952_case_update_add_institution_relationship_schema.js diff --git a/src/adonisjs/app/Controllers/Http/v1/CaseController.js b/src/adonisjs/app/Controllers/Http/v1/CaseController.js index f8de29c..5083cba 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) { @@ -69,6 +74,10 @@ class CaseController { 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() cv.source = request.input('source') 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/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 a0533c1..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) { } 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') From 6bc036eabe9ea6d20ffa3f544da88534e5af91da Mon Sep 17 00:00:00 2001 From: faguim Date: Mon, 14 Sep 2020 15:49:46 -0300 Subject: [PATCH 3/3] minor fixes --- .../app/Controllers/Http/v1/CaseController.js | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/adonisjs/app/Controllers/Http/v1/CaseController.js b/src/adonisjs/app/Controllers/Http/v1/CaseController.js index 5083cba..4201fb9 100644 --- a/src/adonisjs/app/Controllers/Http/v1/CaseController.js +++ b/src/adonisjs/app/Controllers/Http/v1/CaseController.js @@ -103,19 +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.complexity = request.input('complexity') + 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')