@@ -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
0 commit comments