INSERT INTO conversation_usage_event(public_id,tenant_id,conversation_id,provider_event_id,provider,source_event_key,usage_category,metric_code,quantity,unit,occurred_at)
iferr=tx.QueryRow(ctx,`SELECT id::text,quantity=$7::numeric,occurred_at=$8 FROM conversation_usage_event WHERE tenant_id=$1::uuid AND provider=$2 AND source_event_key=$3 AND usage_category=$4 AND metric_code=$5 AND unit=$6`,tenantID,provider,sourceEventKey,metric.UsageCategory,metric.MetricCode,metric.Unit,metric.Quantity,occurredAt.UTC()).Scan(&usageInternalID,&quantityMatches,&occurredAtMatches);err!=nil{
returnnil,err
}
if!quantityMatches||!occurredAtMatches{
returnnil,ErrUsageConflict
}
varrecordedRecordedUsage
err=tx.QueryRow(ctx,`SELECT cue.public_id::text,ccl.public_id::text,ccl.cost_micros,ccl.currency FROM conversation_usage_event cue JOIN conversation_cost_line ccl ON ccl.usage_event_id=cue.id WHERE cue.id=$1::uuid`,usageInternalID).Scan(&recorded.UsageEventID,&recorded.CostLineID,&recorded.CostMicros,&recorded.Currency)
iferr!=nil{
returnnil,err
}
result=append(result,recorded)
continue
}
iferr=tx.QueryRow(ctx,`SELECT id::text FROM conversation_usage_event WHERE public_id=$1::uuid`,usagePublicID).Scan(&usageInternalID);err!=nil{
FROM billing_price_book pb JOIN billing_price_rate pr ON pr.price_book_id=pb.id
WHERE pb.tenant_id=$1::uuid AND pb.provider=$2 AND pb.status IN ('PUBLISHED','RETIRED')
AND pb.published_at IS NOT NULL AND pb.effective_from<=$3
AND pr.usage_category=$4 AND pr.metric_code=$5 AND pr.unit=$6
ORDER BY pb.effective_from DESC,pb.version_no DESC LIMIT 1`,tenantID,provider,occurredAt.UTC(),metric.UsageCategory,metric.MetricCode,metric.Unit).Scan(&priceBookID,&priceRateID,&unitPriceMicros,¤cy)
iferrors.Is(err,pgx.ErrNoRows){
returnnil,ErrPriceRateNotFound
}
iferr!=nil{
returnnil,err
}
costPublicID:=uuid.NewString()
varcostMicrosint64
iferr=tx.QueryRow(ctx,`INSERT INTO conversation_cost_line(public_id,tenant_id,conversation_id,usage_event_id,price_book_id,price_rate_id,quantity,unit,unit_price_micros,cost_micros,currency) VALUES($1::uuid,$2::uuid,$3::uuid,$4::uuid,$5::uuid,$6::uuid,$7::numeric,$8,$9::bigint,round($7::numeric*$9::numeric)::bigint,$10) RETURNING cost_micros`,costPublicID,tenantID,conversationID,usageInternalID,priceBookID,priceRateID,metric.Quantity,metric.Unit,unitPriceMicros,currency).Scan(&costMicros);err!=nil{
iferr=tx.QueryRow(ctx,`SELECT COALESCE(SUM(ccl.cost_micros) FILTER(WHERE cue.occurred_at>=$2),0)::bigint,COALESCE(SUM(ccl.cost_micros) FILTER(WHERE cue.occurred_at>=$3),0)::bigint FROM conversation_cost_line ccl JOIN conversation_usage_event cue ON cue.id=ccl.usage_event_id WHERE ccl.tenant_id=$1::uuid AND ccl.currency=$4`,identity.TenantID,dayStart,monthStart,effective.currency).Scan(&tenantDaily,&tenantMonthly);err!=nil{
returnnil,err
}
iferr=tx.QueryRow(ctx,`SELECT COALESCE(SUM(ccl.cost_micros) FILTER(WHERE cue.occurred_at>=$3),0)::bigint,COALESCE(SUM(ccl.cost_micros) FILTER(WHERE cue.occurred_at>=$4),0)::bigint FROM conversation_cost_line ccl JOIN conversation_usage_event cue ON cue.id=ccl.usage_event_id JOIN conversation c ON c.id=ccl.conversation_id WHERE ccl.tenant_id=$1::uuid AND c.device_id=$2::uuid AND ccl.currency=$5`,identity.TenantID,identity.ID,dayStart,monthStart,effective.currency).Scan(&deviceDaily,&deviceMonthly);err!=nil{
query:=`SELECT count(*) FROM (SELECT tenant_id,device_id FROM conversation WHERE status IN ('PREPARING','ROOM_ISSUED','STARTING_AGENT','ACTIVE','STOPPING') UNION ALL SELECT tenant_id,device_id FROM call_session WHERE manifest_status IN ('ISSUED','REVOKED') AND NOT(local_audio_off AND sdk_stopped AND remote_state IN ('NOT_STARTED','STOPPED_OBSERVED'))) admitted WHERE tenant_id=$1::uuid`
_,err:=tx.Exec(ctx,`INSERT INTO conversation_usage_budget(conversation_id,tenant_id,tenant_policy_id,device_policy_id,billing_timezone,currency,daily_limit_micros,monthly_limit_micros,max_call_duration_sec,in_progress_action,daily_spend_at_create,monthly_spend_at_create) VALUES($1::uuid,$2::uuid,$3::uuid,$4::uuid,$5,$6,$7,$8,$9,$10,$11,$12)`,conversationID,tenantID,snapshot.TenantPolicyID,snapshot.DevicePolicyID,snapshot.BillingTimezone,snapshot.Currency,snapshot.DailyLimitMicros,snapshot.MonthlyLimitMicros,snapshot.MaxCallDurationSec,snapshot.InProgressAction,snapshot.DailySpendAtCreate,snapshot.MonthlySpendAtCreate)
err:=tx.QueryRow(ctx,`SELECT id::text,billing_timezone,currency,daily_limit_micros,monthly_limit_micros,max_concurrent_calls,max_call_duration_sec,in_progress_action FROM usage_quota_policy WHERE tenant_id=$1::uuid AND scope_type=$2 AND status='ACTIVE' AND (($2='TENANT') OR device_id=$3::uuid)`,tenantID,scope,deviceID).Scan(&item.id,&item.timezone,&item.currency,&item.daily,&item.monthly,&item.concurrent,&item.duration,&item.action)