Skip to content

Commit 01d182f

Browse files
committed
Add function to fetch active organizations in the last year
1 parent dca6b01 commit 01d182f

File tree

2 files changed

+89
-1
lines changed

2 files changed

+89
-1
lines changed

backend/src/database/repositories/organizationRepository.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,89 @@ class OrganizationRepository {
131131
return orgs
132132
}
133133

134+
static async filterByActiveLastYear(
135+
tenantId: string,
136+
limit: number,
137+
options: IRepositoryOptions,
138+
): Promise<IEnrichableOrganization[]> {
139+
const database = SequelizeRepository.getSequelize(options)
140+
const transaction = SequelizeRepository.getTransaction(options)
141+
const query = `
142+
with org_activities as (select a."organizationId", count(a.id) as "orgActivityCount"
143+
from activities a
144+
where a."tenantId" = :tenantId
145+
and a."deletedAt" is null
146+
and a."isContribution" = true
147+
and a."createdAt" > (CURRENT_DATE - INTERVAL '1 year')
148+
group by a."organizationId"
149+
having count(id) > 0),
150+
identities as (select oi."organizationId", jsonb_agg(oi) as "identities"
151+
from "organizationIdentities" oi
152+
where oi."tenantId" = :tenantId
153+
group by oi."organizationId")
154+
select org.id,
155+
i.identities,
156+
org."displayName",
157+
org."location",
158+
org."website",
159+
org."lastEnrichedAt",
160+
org."twitter",
161+
org."employees",
162+
org."size",
163+
org."founded",
164+
org."industry",
165+
org."naics",
166+
org."profiles",
167+
org."headline",
168+
org."ticker",
169+
org."type",
170+
org."address",
171+
org."geoLocation",
172+
org."employeeCountByCountry",
173+
org."twitter",
174+
org."linkedin",
175+
org."crunchbase",
176+
org."github",
177+
org."description",
178+
org."revenueRange",
179+
org."tags",
180+
org."affiliatedProfiles",
181+
org."allSubsidiaries",
182+
org."alternativeDomains",
183+
org."alternativeNames",
184+
org."averageEmployeeTenure",
185+
org."averageTenureByLevel",
186+
org."averageTenureByRole",
187+
org."directSubsidiaries",
188+
org."employeeChurnRate",
189+
org."employeeCountByMonth",
190+
org."employeeGrowthRate",
191+
org."employeeCountByMonthByLevel",
192+
org."employeeCountByMonthByRole",
193+
org."gicsSector",
194+
org."grossAdditionsByMonth",
195+
org."grossDeparturesByMonth",
196+
org."ultimateParent",
197+
org."immediateParent",
198+
activity."orgActivityCount"
199+
from "organizations" as org
200+
join org_activities activity on activity."organizationId" = org."id"
201+
join identities i on i."organizationId" = org.id
202+
where :tenantId = org."tenantId"
203+
order by org."lastEnrichedAt" asc, org."website", activity."orgActivityCount" desc, org."createdAt" desc
204+
limit :limit
205+
`
206+
const orgs: IEnrichableOrganization[] = await database.query(query, {
207+
type: QueryTypes.SELECT,
208+
transaction,
209+
replacements: {
210+
tenantId,
211+
limit,
212+
},
213+
})
214+
return orgs
215+
}
216+
134217
static async create(data, options: IRepositoryOptions) {
135218
const currentUser = SequelizeRepository.getCurrentUser(options)
136219

backend/src/services/premium/enrichment/organizationEnrichmentService.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,12 @@ export default class OrganizationEnrichmentService extends LoggerBase {
8080
const enrichedOrganizations: IOrganization[] = []
8181
const enrichedCacheOrganizations: IOrganizationCache[] = []
8282
let count = 0
83-
for (const instance of await OrganizationRepository.filterByPayingTenant(
83+
84+
const organizationFilterMethod = verbose
85+
? OrganizationRepository.filterByActiveLastYear
86+
: OrganizationRepository.filterByPayingTenant
87+
88+
for (const instance of await organizationFilterMethod(
8489
this.tenantId,
8590
this.maxOrganizationsLimit,
8691
this.options,

0 commit comments

Comments
 (0)