Skip to content

Commit

Permalink
Fix flagged query + changelog
Browse files Browse the repository at this point in the history
  • Loading branch information
software-project committed Jul 12, 2021
1 parent 6ea8838 commit b8d7e28
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 12 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file. The format
- Fixed:

- optional fields not being marked as optional in frontend client (missing '?' indicator) ([#1470](https://github.com/bloom-housing/bloom/pull/1470))
- add duplicates to CSV export ([#1352](https://github.com/bloom-housing/bloom/issues/1352))

- Changed:
- User module has been removed and incorporated into Auth module
Expand Down
31 changes: 19 additions & 12 deletions backend/core/src/applications/applications.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,28 +45,35 @@ export class ApplicationsService {

public async listWithFlagged(params: PaginatedApplicationListQueryParams) {
const qb = this._getQb(params)
const result = await qb
const result = await qb.getMany()

// Get flagged applications
const flaggedQuery = await this.repository
.createQueryBuilder("applications")
.leftJoin(
"application_flagged_set_applications_applications",
"application_flagged_set_applications_applications",
"application_flagged_set_applications_applications.applications_id = application.id"
)
.groupBy(
"application.id, applicant.id, applicant_address.id, applicant_workAddress.id, alternateAddress.id, mailingAddress.id, alternateContact.id, alternateContact_mailingAddress.id, accessibility.id, demographics.id, householdMembers.id, householdMembers_address.id, householdMembers_workAddress.id, application_flagged_set_applications_applications.application_flagged_set_id, application_flagged_set_applications_applications.applications_id"
"application_flagged_set_applications_applications.applications_id = applications.id"
)
.addSelect(
"count(application_flagged_set_applications_applications.applications_id) > 0 as flagged"
.andWhere("applications.listing_id = :lid", { lid: params.listingId })
.select(
"applications.id, count(application_flagged_set_applications_applications.applications_id) > 0 as flagged"
)
.groupBy("applications.id")
.getRawAndEntities()
let index = 0

// Reorganize flagged to object to make it faster to map
const flagged = flaggedQuery.raw.reduce((obj, application) => {
return { ...obj, [application.id]: application.flagged }
}, {})
await Promise.all(
result.entities.map(async (application) => {
application.flagged = result.raw[index].flagged
result.map(async (application) => {
// Because TypeOrm can't map extra flagged field we need to map it manually
application.flagged = flagged[application.id]
await this.authorizeUserAction(this.req.user, application, authzActions.read)
index += 1
})
)
return result.entities
return result
}

async listPaginated(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ export class Application extends AbstractEntity {
@IsBoolean({ groups: [ValidationsGroupsEnum.default] })
markedAsDuplicate: boolean

// This is a 'virtual field' needed for CSV export
@Expose()
@IsBoolean({ groups: [ValidationsGroupsEnum.default] })
@IsOptional({ groups: [ValidationsGroupsEnum.partners] })
Expand Down

0 comments on commit b8d7e28

Please sign in to comment.