Skip to content

Commit 58b59f3

Browse files
authored
feat: route last revisions pending (#175)
1 parent 0d1355d commit 58b59f3

2 files changed

Lines changed: 54 additions & 0 deletions

File tree

src/modules/revision/revision.controller.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { RevisionWithClientDTO } from './dto/revision_with_client.dto';
2727
import { RevisionQueryDto } from './dto/status_revisions.dto';
2828
import { AnciennesCommunesDTO } from './dto/ancienne_commune.dto';
2929
import { ValidationCogPipe } from '@/lib/class/pipes/validation_cog.pipe';
30+
3031
@ApiTags('revisions')
3132
@Controller('')
3233
export class RevisionController {
@@ -138,6 +139,24 @@ export class RevisionController {
138139
res.send(data);
139140
}
140141

142+
@Get('revisions-lasts-pending')
143+
@ApiOperation({
144+
summary: 'Find lasts revisions pending',
145+
operationId: 'findLastsRevisionInPending',
146+
})
147+
@ApiQuery({ name: 'page', required: false, schema: { type: 'number' } })
148+
@ApiQuery({ name: 'limit', required: false, schema: { type: 'number' } })
149+
async findLastsRevisionInPending(
150+
@Query('page') page: number,
151+
@Query('limit') limit: number,
152+
@Res() res: Response,
153+
) {
154+
const lastsRevisionsPending =
155+
await this.revisionService.findLastsRevisionInPending(page, limit);
156+
157+
res.status(HttpStatus.OK).json(lastsRevisionsPending);
158+
}
159+
141160
@Get('revisions/:revisionId')
142161
@ApiOperation({
143162
summary: 'Find one revision',

src/modules/revision/revision.service.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,41 @@ export class RevisionService {
130130
return query.getRawMany();
131131
}
132132

133+
async findLastsRevisionInPending(page = 1, limit = 10): Promise<any> {
134+
const offset = (page - 1) * limit;
135+
const result = await this.revisionRepository.query(
136+
`SELECT
137+
last_revisions.id,
138+
code_commune AS "codeCommune",
139+
status,
140+
last_revisions.created_at AS "createdAt",
141+
legacy_id AS "legacyId",
142+
validation
143+
FROM (
144+
SELECT DISTINCT ON (code_commune) *
145+
FROM revisions
146+
ORDER BY code_commune, created_at DESC
147+
) last_revisions
148+
LEFT JOIN clients on clients.id = last_revisions.client_id
149+
WHERE status = 'pending'
150+
ORDER BY last_revisions.created_at DESC
151+
LIMIT $1 OFFSET $2`,
152+
[limit, offset],
153+
);
154+
155+
const [{ total }] = await this.revisionRepository.query(`
156+
SELECT COUNT(*) as total
157+
FROM (
158+
SELECT DISTINCT ON (code_commune) *
159+
FROM revisions
160+
ORDER BY code_commune, created_at DESC
161+
) last_revisions
162+
WHERE status = 'pending'
163+
`);
164+
165+
return { result, total };
166+
}
167+
133168
async findFirsts(): Promise<RevisionAgg[]> {
134169
const query = this.revisionRepository
135170
.createQueryBuilder('revisions')

0 commit comments

Comments
 (0)