@@ -16,20 +16,22 @@ import {
1616 del ,
1717 requestBody ,
1818} from '@loopback/rest' ;
19- import { Species } from '../models' ;
20- import { SpeciesRepository } from '../repositories' ;
19+ import { Species } from '../models' ;
20+ import { SpeciesRepository , TreesRepository } from '../repositories' ;
2121
2222export class SpeciesController {
2323 constructor (
2424 @repository ( SpeciesRepository )
2525 public speciesRepository : SpeciesRepository ,
26+ @repository ( TreesRepository )
27+ public treesRepository : TreesRepository ,
2628 ) { }
2729
2830 @get ( '/species/count' , {
2931 responses : {
3032 '200' : {
3133 description : 'Species model count' ,
32- content : { 'application/json' : { schema : CountSchema } } ,
34+ content : { 'application/json' : { schema : CountSchema } } ,
3335 } ,
3436 } ,
3537 } )
@@ -46,7 +48,7 @@ export class SpeciesController {
4648 description : 'Array of Species model instances' ,
4749 content : {
4850 'application/json' : {
49- schema : { type : 'array' , items : { 'x-ts-type' : Species } } ,
51+ schema : { type : 'array' , items : { 'x-ts-type' : Species } } ,
5052 } ,
5153 } ,
5254 } ,
@@ -64,7 +66,7 @@ export class SpeciesController {
6466 responses : {
6567 '200' : {
6668 description : 'Species model instance' ,
67- content : { 'application/json' : { schema : { 'x-ts-type' : Species } } } ,
69+ content : { 'application/json' : { schema : { 'x-ts-type' : Species } } } ,
6870 } ,
6971 } ,
7072 } )
@@ -86,6 +88,30 @@ export class SpeciesController {
8688 await this . speciesRepository . updateById ( id , species ) ;
8789 }
8890
91+ @post ( '/species/combine' , {
92+ responses : {
93+ '204' : {
94+ description : 'Species POST success' ,
95+ } ,
96+ } ,
97+ } )
98+ async combine (
99+ @requestBody ( ) request : { combine : number [ ] ; species : Species } ,
100+ ) : Promise < void > {
101+ const newSpecies = await this . speciesRepository . create ( request . species ) ;
102+
103+ const updateQuery = `UPDATE trees SET species_id=${
104+ newSpecies . id
105+ } WHERE species_id IN (${ request . combine . join ( ', ' ) } )`;
106+
107+ const deleteQuery = `UPDATE tree_species SET active=false WHERE id IN (${ request . combine . join (
108+ ', ' ,
109+ ) } )`;
110+
111+ await this . treesRepository . execute ( updateQuery , [ ] ) ;
112+ await this . speciesRepository . execute ( deleteQuery , [ ] ) ;
113+ }
114+
89115 @post ( '/species/' , {
90116 responses : {
91117 '204' : {
@@ -105,6 +131,7 @@ export class SpeciesController {
105131 } ,
106132 } )
107133 async delete ( @param . path . number ( 'id' ) id : number ) : Promise < void > {
108- await this . speciesRepository . deleteById ( id ) ;
134+ const deleteQuery = `UPDATE tree_species SET active=false WHERE id=${ id } ` ;
135+ await this . speciesRepository . execute ( deleteQuery , [ ] ) ;
109136 }
110137}
0 commit comments