feat: SMS campaigns for people or leads with filters and batching

Add audience tabs, province/city filters, select-all ids, dynamic SMS tokens, and 50-sized create/send chunks.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-17 20:54:32 +03:30
co-authored by Cursor
parent 32c722f42a
commit d62e004e90
10 changed files with 1040 additions and 131 deletions
@@ -43,6 +43,10 @@ export class PeopleController {
@Get()
list(@CurrentUser() user: Actor, @Query() query: ListQueryDto) {
const hasMobile =
query.hasMobile === '1' || query.hasMobile === 'true'
? true
: undefined;
return this.peopleService.list(
user,
query.q,
@@ -52,10 +56,28 @@ export class PeopleController {
mood: query.mood,
sort: query.sort,
importSource: query.importSource,
province: query.province,
city: query.city,
hasMobile,
},
);
}
@Get('ids')
listIds(@CurrentUser() user: Actor, @Query() query: ListQueryDto) {
const hasMobile =
query.hasMobile === '1' || query.hasMobile === 'true'
? true
: undefined;
return this.peopleService.listIds(user, query.q, {
mood: query.mood,
importSource: query.importSource,
province: query.province,
city: query.city,
hasMobile,
});
}
@Get('source-stats')
sourceStats(@CurrentUser() user: Actor) {
return this.peopleService.sourceStats(user);