Added WIP campaigns. Fixed entity tiles using full logo.

This commit is contained in:
2024-06-12 02:34:13 +02:00
parent b2dadf1693
commit 50ff352067
11 changed files with 136 additions and 12 deletions

47
src/campaigns.js Normal file
View File

@@ -0,0 +1,47 @@
import { knexOwner as knex } from './knex.js';
import { curateEntity } from './entities.js';
function curateCampaign(campaign) {
if (!campaign) {
return null;
}
return {
id: campaign.id,
url: campaign.url,
banner: campaign.banner && {
id: campaign.banner.id,
type: campaign.banner.type,
entity: campaign.banner_entity && curateEntity({ ...campaign.banner_entity, parent: campaign.banner_parent_entity }),
tags: campaign.banner_tags?.map((tag) => ({
id: tag.id,
slug: tag.slug,
name: tag.name,
})) || [],
},
affiliateId: campaign.affiliate_id,
};
}
export async function getRandomCampaign(options = {}) {
const campaign = await knex.raw(`
SELECT
campaigns.*, row_to_json(banners) as banner, row_to_json(entities) as banner_entity, row_to_json(parents) as banner_parent_entity, json_agg(tags) filter (where tags.id is not null) as banner_tags
FROM campaigns
LEFT JOIN banners ON banners.id = campaigns.banner_id
LEFT JOIN banners_tags ON banners_tags.banner_id = banners.id
LEFT JOIN tags ON tags.id = banners_tags.tag_id
LEFT JOIN entities ON entities.id = banners.entity_id
LEFT JOIN entities as parents ON parents.id = entities.parent_id
WHERE campaigns.banner_id IS NOT NULL
AND ratio >= :minRatio
AND ratio <= :maxRatio
GROUP BY campaigns.id, banners.id, entities.id, parents.id
ORDER BY RANDOM()
`, {
minRatio: options.minRatio || 0,
maxRatio: options.maxRatio || 1000,
});
return curateCampaign(campaign.rows[0]);
}