From 078d8e3b18d39c819f03c366c656d9bb376dc733 Mon Sep 17 00:00:00 2001 From: Tony Date: Tue, 9 Jul 2024 20:52:01 -0700 Subject: [PATCH 1/3] Store market option color in database --- apps/web/app/(app)/questions/page.tsx | 4 ++-- package.json | 1 + .../migrations/20240710023422_add_option_color/migration.sql | 5 +++++ packages/database/mocks.ts | 1 + packages/database/package.json | 1 + packages/database/schema.prisma | 1 + packages/markets/lib/createMarket.ts | 1 + packages/markets/lib/getMarket.ts | 4 ++-- turbo.json | 3 +++ 9 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 packages/database/migrations/20240710023422_add_option_color/migration.sql diff --git a/apps/web/app/(app)/questions/page.tsx b/apps/web/app/(app)/questions/page.tsx index f4675c7f..ea9fa5e8 100644 --- a/apps/web/app/(app)/questions/page.tsx +++ b/apps/web/app/(app)/questions/page.tsx @@ -34,7 +34,7 @@ export default async function AppQuestionsPage() { user: sanitizeUser(market.user), options: market.options.map((option) => ({ ...option, - color: option.currencyCode === 'YES' ? '#3b82f6' : '#ec4899', + color: option.color, })), marketResolution: market.marketResolution ? { @@ -42,7 +42,7 @@ export default async function AppQuestionsPage() { resolvedBy: sanitizeUser(market.marketResolution.resolvedBy), resolution: { ...market.marketResolution.resolution, - color: market.marketResolution.resolution.currencyCode === 'YES' ? '#3b82f6' : '#ec4899', + color: market.marketResolution.resolution.color, }, } : undefined, diff --git a/package.json b/package.json index 17012d9c..85571fd6 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "db:push": "dotenv -- turbo db:push", "db:generate": "dotenv -- turbo db:generate", "db:script": "dotenv -- npm run script -w @play-money/database", + "db:reset": "dotenv -- turbo db:reset", "test": "turbo run test", "test:watch": "turbo run test:watch" }, diff --git a/packages/database/migrations/20240710023422_add_option_color/migration.sql b/packages/database/migrations/20240710023422_add_option_color/migration.sql new file mode 100644 index 00000000..b0c931fa --- /dev/null +++ b/packages/database/migrations/20240710023422_add_option_color/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "MarketOption" ADD COLUMN "color" TEXT NOT NULL DEFAULT '#FF00FF'; + +UPDATE "MarketOption" SET "color" = '#3B82F6' WHERE "currencyCode" = 'YES'; +UPDATE "MarketOption" SET "color" = '#EC4899' WHERE "currencyCode" = 'NO'; diff --git a/packages/database/mocks.ts b/packages/database/mocks.ts index eae382a0..beb89e10 100644 --- a/packages/database/mocks.ts +++ b/packages/database/mocks.ts @@ -127,6 +127,7 @@ export function mockMarketOption(overrides?: Partial): MarketOptio id: faker.string.uuid(), name: currencyCode === 'YES' ? 'Yes' : 'No', currencyCode, + color: currencyCode === 'YES' ? '#3B82F6' : '#EC4899', marketId: faker.string.uuid(), createdAt: faker.date.past(), updatedAt: faker.date.past(), diff --git a/packages/database/package.json b/packages/database/package.json index 99b4af17..34a7bd6c 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -5,6 +5,7 @@ "scripts": { "db:generate": "prisma generate && prisma format", "db:push": "prisma db push --skip-generate", + "db:reset": "prisma migrate reset --force", "dev": "cross-env BROWSER=none prisma studio", "type-check": "tsc --noEmit", "script": "tsx scripts/run.js" diff --git a/packages/database/schema.prisma b/packages/database/schema.prisma index 6ec1fc67..4aaaa723 100644 --- a/packages/database/schema.prisma +++ b/packages/database/schema.prisma @@ -107,6 +107,7 @@ model MarketOption { market Market @relation(fields: [marketId], references: [id]) currencyCode CurrencyCode currency Currency @relation(fields: [currencyCode], references: [code]) + color String @default("#FF00FF") /// @zod.string.regex(/^#[0-9A-Fa-f]{6}$/) resolutions MarketResolution[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/packages/markets/lib/createMarket.ts b/packages/markets/lib/createMarket.ts index e736f843..f9a2f146 100644 --- a/packages/markets/lib/createMarket.ts +++ b/packages/markets/lib/createMarket.ts @@ -70,6 +70,7 @@ export async function createMarket({ data: parsedOptions.map((option) => ({ name: option.name, currencyCode: option.currencyCode, + color: option.currencyCode === 'YES' ? '#3B82F6' : '#EC4899', updatedAt: new Date(), createdAt: new Date(), })), diff --git a/packages/markets/lib/getMarket.ts b/packages/markets/lib/getMarket.ts index 0c4e8e02..8954299e 100644 --- a/packages/markets/lib/getMarket.ts +++ b/packages/markets/lib/getMarket.ts @@ -35,7 +35,7 @@ export async function getMarket({ user: sanitizeUser(market.user), options: market.options.map((option) => ({ ...option, - color: option.currencyCode === 'YES' ? '#3b82f6' : '#ec4899', + color: option.color })), marketResolution: market.marketResolution ? { @@ -43,7 +43,7 @@ export async function getMarket({ resolvedBy: sanitizeUser(market.marketResolution.resolvedBy), resolution: { ...market.marketResolution.resolution, - color: market.marketResolution.resolution.currencyCode === 'YES' ? '#3b82f6' : '#ec4899', + color: market.marketResolution.resolution.color, }, } : undefined, diff --git a/turbo.json b/turbo.json index cd3d1cf6..064b0865 100644 --- a/turbo.json +++ b/turbo.json @@ -26,6 +26,9 @@ "db:push": { "cache": false }, + "db:reset": { + "cache": false + }, "test": {}, "test:watch": { "cache": false From 68fd3cbd900581e0eb289bdd9c3499d031afafe2 Mon Sep 17 00:00:00 2001 From: case Date: Wed, 10 Jul 2024 15:02:48 -0700 Subject: [PATCH 2/3] Items from `npx prisma migrate dev` --- .../zod/inputTypeSchemas/MarketOptionScalarFieldEnumSchema.ts | 2 +- packages/database/zod/modelSchema/MarketOptionSchema.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/database/zod/inputTypeSchemas/MarketOptionScalarFieldEnumSchema.ts b/packages/database/zod/inputTypeSchemas/MarketOptionScalarFieldEnumSchema.ts index 50607372..02071f03 100644 --- a/packages/database/zod/inputTypeSchemas/MarketOptionScalarFieldEnumSchema.ts +++ b/packages/database/zod/inputTypeSchemas/MarketOptionScalarFieldEnumSchema.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -export const MarketOptionScalarFieldEnumSchema = z.enum(['id','name','marketId','currencyCode','createdAt','updatedAt']); +export const MarketOptionScalarFieldEnumSchema = z.enum(['id','name','marketId','currencyCode','color','createdAt','updatedAt']); export default MarketOptionScalarFieldEnumSchema; diff --git a/packages/database/zod/modelSchema/MarketOptionSchema.ts b/packages/database/zod/modelSchema/MarketOptionSchema.ts index 8c97ef5f..154b6016 100644 --- a/packages/database/zod/modelSchema/MarketOptionSchema.ts +++ b/packages/database/zod/modelSchema/MarketOptionSchema.ts @@ -10,6 +10,7 @@ export const MarketOptionSchema = z.object({ id: z.string().cuid(), name: z.string(), marketId: z.string(), + color: z.string().regex(/^#[0-9A-Fa-f]{6}$/), createdAt: z.coerce.date(), updatedAt: z.coerce.date(), }) From 6159f788b6907977425b2e80453379a9cf193c94 Mon Sep 17 00:00:00 2001 From: case Date: Wed, 10 Jul 2024 15:04:53 -0700 Subject: [PATCH 3/3] Cleanup color paths --- apps/web/app/(app)/questions/page.tsx | 8 -------- packages/markets/lib/getMarket.ts | 8 -------- 2 files changed, 16 deletions(-) diff --git a/apps/web/app/(app)/questions/page.tsx b/apps/web/app/(app)/questions/page.tsx index ea9fa5e8..3da3bca0 100644 --- a/apps/web/app/(app)/questions/page.tsx +++ b/apps/web/app/(app)/questions/page.tsx @@ -32,18 +32,10 @@ export default async function AppQuestionsPage() { return { ...market, user: sanitizeUser(market.user), - options: market.options.map((option) => ({ - ...option, - color: option.color, - })), marketResolution: market.marketResolution ? { ...market.marketResolution, resolvedBy: sanitizeUser(market.marketResolution.resolvedBy), - resolution: { - ...market.marketResolution.resolution, - color: market.marketResolution.resolution.color, - }, } : undefined, } diff --git a/packages/markets/lib/getMarket.ts b/packages/markets/lib/getMarket.ts index 8954299e..b26e04e2 100644 --- a/packages/markets/lib/getMarket.ts +++ b/packages/markets/lib/getMarket.ts @@ -33,18 +33,10 @@ export async function getMarket({ return { ...market, user: sanitizeUser(market.user), - options: market.options.map((option) => ({ - ...option, - color: option.color - })), marketResolution: market.marketResolution ? { ...market.marketResolution, resolvedBy: sanitizeUser(market.marketResolution.resolvedBy), - resolution: { - ...market.marketResolution.resolution, - color: market.marketResolution.resolution.color, - }, } : undefined, }