feat: purchase-plans global update

This commit is contained in:
ivannoskov
2026-02-02 21:01:11 +03:00
parent f9c334ba22
commit 735077e707
11 changed files with 2575 additions and 534 deletions

View File

@@ -245,12 +245,27 @@ export type PlacementStatus =
| "Неактуально"
| "Не отвечает";
export type InviteLinkType = "public" | "approval";
export type PostViewsAvailability =
| "unknown"
| "available"
| "unavailable"
| "manual";
export type PlacementPostStatus =
| "Без статуса"
| "Отправить пост"
| "Согласование поста"
| "Ожидание отложки"
| "Запланирован"
| "Пост вышел"
| "Размещение отработало - пост удалён"
| "Размещение отработало - пост не удалён"
| "Проверить - пост удалён раньше срока"
| "Проверить - пост не вышел"
| "Размещение отработало";
export type InviteLinkType = "public" | "approval";
export type PlacementType = "self_promo" | "standard";
export type CostType = "fixed" | "cpm";
export type PostViewsAvailability =
| "unknown"
| "available"
| "unavailable"
| "manual";
export interface PlacementChannel {
id: string;
@@ -261,7 +276,7 @@ export interface PlacementChannel {
}
export interface PlacementCostInfo {
type: "fixed" | "cpm";
type: CostType;
value: number;
}
@@ -269,8 +284,8 @@ export interface PlacementDetails {
placement_at: string | null; // ISO 8601
payment_at: string | null; // ISO 8601
cost: PlacementCostInfo | null;
cost_before_bargain: number | null;
placement_type: string | null;
cost_before_bargain: PlacementCostInfo | null;
placement_type: PlacementType | null;
format: string | null;
comment: string | null;
creative_id: string | null;
@@ -286,27 +301,44 @@ export interface PlacementPost {
text: string;
url: string | null;
deleted_from_channel_at: string | null;
published_at: string | null;
created_at: string;
updated_at: string;
} | null;
}
export interface PlacementPostWithStatus extends PlacementPost {
status: PlacementPostStatus;
time_on_top: number | null;
}
export interface Placement {
id: string;
status: PlacementStatus;
creative_id: string | null;
creative_name: string | null;
comment: string | null;
invite_link: string | null;
invite_link_created_at: string | null;
invite_link_type: InviteLinkType;
channel: PlacementChannel;
project: Project | null;
short_id: string;
details: PlacementDetails | null;
placement_post: PlacementPost | null;
placement_post: PlacementPostWithStatus | null;
created_at: string;
}
export interface PlacementWithStats extends Placement {
cpf: number | null;
cpm: number | null;
time_in_feed?: number | null;
conversion_24h?: number | null;
conversion_48h?: number | null;
conversion_total?: number | null;
total_unsubs?: number | null;
unsub_percent?: number | null;
total_active?: number | null;
}
export interface PlacementsGroupedByChannel {
@@ -345,6 +377,19 @@ export interface PlacementUpdateRequest {
ad_post_url?: string;
}
export interface UpdatePlacementInProjectRequest {
status?: string;
comment?: string | null;
creative_id?: string | null;
creative_name?: string | null;
placement_at?: string | null;
payment_at?: string | null;
cost?: { type: CostType; value: number } | null;
cost_before_bargain?: { type: CostType; value: number } | null;
placement_type?: PlacementType | null;
format?: string | null;
}
export interface PlacementsQueryParams extends PaginationParams {
project_id?: string;
placement_channel_id?: string;