feat(canva): support asset_final, created_by, include=client filters in GET and merge meta in PATCH
This commit is contained in:
@@ -110,13 +110,18 @@ export async function POST(req: NextRequest) {
|
||||
}
|
||||
|
||||
export async function GET(req: NextRequest) {
|
||||
const auth = await authenticateIntegrationRequest(req, { requireTenant: true });
|
||||
const auth = await authenticateIntegrationRequest(req, { requireTenant: false });
|
||||
if (!auth.ok) {
|
||||
return auth.errorResponse!;
|
||||
}
|
||||
|
||||
const tenantId = auth.tenantId!;
|
||||
const status = req.nextUrl.searchParams.get('status');
|
||||
const searchParams = req.nextUrl.searchParams;
|
||||
const tenantId = searchParams.get('tenant_id') || searchParams.get('client_id');
|
||||
const status = searchParams.get('status');
|
||||
const assetFinal = searchParams.get('asset_final');
|
||||
const createdBy = searchParams.get('created_by');
|
||||
const include = searchParams.get('include');
|
||||
const limitParam = searchParams.get('limit');
|
||||
|
||||
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!;
|
||||
const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY!;
|
||||
@@ -124,18 +129,87 @@ export async function GET(req: NextRequest) {
|
||||
|
||||
let query = adminClient
|
||||
.from('creatives')
|
||||
.select('*')
|
||||
.eq('tenant_id', tenantId);
|
||||
.select('*, tenant:tenants(id, name, slug, canva_templates, drive_folder_id, creatives_enabled)');
|
||||
|
||||
if (tenantId) {
|
||||
query = query.eq('tenant_id', tenantId);
|
||||
}
|
||||
|
||||
if (status) {
|
||||
query = query.eq('status', status);
|
||||
}
|
||||
|
||||
const { data: creatives, error } = await query;
|
||||
if (assetFinal === 'true') {
|
||||
query = query.eq('asset_final', true);
|
||||
} else if (assetFinal === 'false') {
|
||||
query = query.eq('asset_final', false);
|
||||
}
|
||||
|
||||
if (createdBy) {
|
||||
query = query.eq('created_by', createdBy);
|
||||
}
|
||||
|
||||
query = query.order('created_at', { ascending: true });
|
||||
|
||||
if (limitParam) {
|
||||
const parsedLimit = Number(limitParam);
|
||||
if (!isNaN(parsedLimit) && parsedLimit > 0) {
|
||||
query = query.limit(parsedLimit);
|
||||
}
|
||||
}
|
||||
|
||||
const { data: rows, error } = await query;
|
||||
|
||||
if (error) {
|
||||
return NextResponse.json({ error: error.message }, { status: 500 });
|
||||
}
|
||||
|
||||
return NextResponse.json(creatives || []);
|
||||
const defaultBpsTemplate = process.env.BPS_CANVA_TEMPLATE_ID || 'EAHRb38v_WY';
|
||||
|
||||
const enriched = (rows || [])
|
||||
.filter((row: any) => {
|
||||
if (tenantId) return true;
|
||||
return row.tenant?.creatives_enabled !== false;
|
||||
})
|
||||
.map((row: any) => {
|
||||
const { tenant, ...rest } = row;
|
||||
let canvaTemplates = tenant?.canva_templates || {};
|
||||
if (
|
||||
tenant?.slug === 'bps' &&
|
||||
(!canvaTemplates || Object.keys(canvaTemplates).length === 0)
|
||||
) {
|
||||
canvaTemplates = {
|
||||
'foto-con-franja': defaultBpsTemplate,
|
||||
tipografico: null,
|
||||
default: defaultBpsTemplate,
|
||||
};
|
||||
}
|
||||
|
||||
const item: Record<string, any> = {
|
||||
...rest,
|
||||
client_id: rest.tenant_id,
|
||||
meta: rest.meta || {},
|
||||
};
|
||||
|
||||
if (include === 'client') {
|
||||
item.client = tenant
|
||||
? {
|
||||
id: tenant.id,
|
||||
name: tenant.name,
|
||||
slug: tenant.slug,
|
||||
canva_templates: canvaTemplates,
|
||||
drive_folder_id: tenant.drive_folder_id || null,
|
||||
}
|
||||
: null;
|
||||
}
|
||||
|
||||
return item;
|
||||
});
|
||||
|
||||
return NextResponse.json({
|
||||
ok: true,
|
||||
count: enriched.length,
|
||||
data: enriched,
|
||||
creatives: enriched,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user