From 34fe3709fa98f86b2dceb4344cd814f2fc8bf079 Mon Sep 17 00:00:00 2001 From: GerardPaligot Date: Tue, 23 Apr 2024 09:31:00 +0200 Subject: [PATCH] feat(shared): partner can have multiple sponsorships. --- .../org/gdglille/devfest/database/PartnerDao.kt | 14 ++++++++++---- .../sqldelight/org/gdglille/devfest/db/25.sqm | 6 ++++++ .../org/gdglille/devfest/db/Partner.sq | 17 ++++++++++++++++- 3 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 shared/core/src/commonMain/sqldelight/org/gdglille/devfest/db/25.sqm diff --git a/shared/core/src/commonMain/kotlin/org/gdglille/devfest/database/PartnerDao.kt b/shared/core/src/commonMain/kotlin/org/gdglille/devfest/database/PartnerDao.kt index fa73715eb..e5b12bc7f 100644 --- a/shared/core/src/commonMain/kotlin/org/gdglille/devfest/database/PartnerDao.kt +++ b/shared/core/src/commonMain/kotlin/org/gdglille/devfest/database/PartnerDao.kt @@ -74,10 +74,11 @@ class PartnerDao( .mapToList(dispatcher).flatMapConcat { types -> return@flatMapConcat combine( types.map { type -> - db.partnerQueries.selectPartners(eventId, type.name, partnerMapper) - .asFlow() - .mapToList(dispatcher) - .map { type.name to it } + db.partnerQueries.selectPartners( + event_id = eventId, + name = type.name, + mapper = partnerMapper + ).asFlow().mapToList(dispatcher).map { type.name to it } }, transform = { results -> PartnerGroupsUi( @@ -136,6 +137,11 @@ class PartnerDao( latitude = partner.address?.lat, longitude = partner.address?.lng ) + db.partnerQueries.insertPartnerAndType( + partner_id = partner.id, + sponsor_id = entry.key, + event_id = eventId + ) partner.jobs.forEach { db.partnerQueries.insertJob( url = it.url, diff --git a/shared/core/src/commonMain/sqldelight/org/gdglille/devfest/db/25.sqm b/shared/core/src/commonMain/sqldelight/org/gdglille/devfest/db/25.sqm new file mode 100644 index 000000000..998054082 --- /dev/null +++ b/shared/core/src/commonMain/sqldelight/org/gdglille/devfest/db/25.sqm @@ -0,0 +1,6 @@ +CREATE TABLE PartnerAndType ( +id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, +partner_id TEXT NOT NULL, +sponsor_id TEXT NOT NULL, +event_id TEXT NOT NULL +); diff --git a/shared/core/src/commonMain/sqldelight/org/gdglille/devfest/db/Partner.sq b/shared/core/src/commonMain/sqldelight/org/gdglille/devfest/db/Partner.sq index d7972cb39..00289442d 100644 --- a/shared/core/src/commonMain/sqldelight/org/gdglille/devfest/db/Partner.sq +++ b/shared/core/src/commonMain/sqldelight/org/gdglille/devfest/db/Partner.sq @@ -26,6 +26,13 @@ name TEXT NOT NULL PRIMARY KEY, event_id TEXT NOT NULL ); +CREATE TABLE PartnerAndType ( +id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, +partner_id TEXT NOT NULL, +sponsor_id TEXT NOT NULL, +event_id TEXT NOT NULL +); + CREATE TABLE Job ( url TEXT NOT NULL PRIMARY KEY, partner_id TEXT NOT NULL, @@ -51,6 +58,9 @@ INSERT OR REPLACE INTO Partner( id, name, description, event_id, type_id, type, logo_url, site_url, twitter_url, twitter_message, linkedin_url, linkedin_message, formatted_address, address, latitude, longitude ) VALUES (?, ?,?,?, ?,?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?); +insertPartnerAndType: +INSERT OR REPLACE INTO PartnerAndType(partner_id, sponsor_id, event_id) VALUES (?, ?, ?); + insertJob: INSERT OR REPLACE INTO Job( url, partner_id, event_id, title, company_name, location, salary_min, salary_max, salary_recurrence, requirements, publish_date, propulsed @@ -60,7 +70,12 @@ selectPartnerTypes: SELECT order_, name FROM PartnerType WHERE event_id == ? ORDER BY order_ ASC; selectPartners: -SELECT id, name, description, logo_url, site_url, twitter_url, twitter_message, linkedin_url, linkedin_message, formatted_address, address, latitude, longitude FROM Partner WHERE event_id == ? AND type_id == ? ORDER BY name ASC; +SELECT Partner.id, Partner.name, Partner.description, Partner.logo_url, Partner.site_url, Partner.twitter_url, Partner.twitter_message, Partner.linkedin_url, Partner.linkedin_message, Partner.formatted_address, Partner.address, Partner.latitude, Partner.longitude +FROM PartnerAndType +INNER JOIN Partner ON PartnerAndType.partner_id = Partner.id +INNER JOIN PartnerType ON PartnerAndType.sponsor_id = PartnerType.name +WHERE PartnerType.name == ? AND PartnerAndType.event_id == ? +ORDER BY Partner.name ASC; selectPartner: SELECT id, name, description, logo_url, site_url, twitter_url, twitter_message, linkedin_url, linkedin_message, formatted_address, address, latitude, longitude FROM Partner WHERE event_id == ? AND id == ? ORDER BY name ASC;