Skip to content

Commit c5a589d

Browse files
authored
feat: add /species/combine controller (#530)
* feat: add /species/combine controller * fix: bulk db change on combine species and change active to boolean
1 parent 72c59a2 commit c5a589d

1 file changed

Lines changed: 33 additions & 6 deletions

File tree

src/controllers/species.controller.ts

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2222
export 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

Comments
 (0)