@openora/core 0.4.1-canary.152 → 0.4.1-canary.154

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/admin-console/__tests__/backoffice.service.int.test.js +20 -3
  3. package/dist/admin-console/__tests__/backoffice.service.int.test.js.map +1 -1
  4. package/dist/audit/__tests__/map-event.test.js +46 -0
  5. package/dist/audit/__tests__/map-event.test.js.map +1 -1
  6. package/dist/audit/plugin.d.ts.map +1 -1
  7. package/dist/audit/plugin.js +74 -1
  8. package/dist/audit/plugin.js.map +1 -1
  9. package/dist/audit/service/audit.service.d.ts.map +1 -1
  10. package/dist/audit/service/audit.service.js +1 -6
  11. package/dist/audit/service/audit.service.js.map +1 -1
  12. package/dist/casino/gaming/__tests__/admin-reporting.int.test.js +20 -3
  13. package/dist/casino/gaming/__tests__/admin-reporting.int.test.js.map +1 -1
  14. package/dist/casino/gaming/__tests__/game-category.service.int.test.d.ts +2 -0
  15. package/dist/casino/gaming/__tests__/game-category.service.int.test.d.ts.map +1 -0
  16. package/dist/casino/gaming/__tests__/game-category.service.int.test.js +134 -0
  17. package/dist/casino/gaming/__tests__/game-category.service.int.test.js.map +1 -0
  18. package/dist/casino/gaming/__tests__/game-provider.service.int.test.d.ts +2 -0
  19. package/dist/casino/gaming/__tests__/game-provider.service.int.test.d.ts.map +1 -0
  20. package/dist/casino/gaming/__tests__/game-provider.service.int.test.js +274 -0
  21. package/dist/casino/gaming/__tests__/game-provider.service.int.test.js.map +1 -0
  22. package/dist/casino/gaming/__tests__/gaming-catalog-admin.router.int.test.d.ts +2 -0
  23. package/dist/casino/gaming/__tests__/gaming-catalog-admin.router.int.test.d.ts.map +1 -0
  24. package/dist/casino/gaming/__tests__/gaming-catalog-admin.router.int.test.js +174 -0
  25. package/dist/casino/gaming/__tests__/gaming-catalog-admin.router.int.test.js.map +1 -0
  26. package/dist/casino/gaming/__tests__/gaming-migration.int.test.d.ts +2 -0
  27. package/dist/casino/gaming/__tests__/gaming-migration.int.test.d.ts.map +1 -0
  28. package/dist/casino/gaming/__tests__/gaming-migration.int.test.js +171 -0
  29. package/dist/casino/gaming/__tests__/gaming-migration.int.test.js.map +1 -0
  30. package/dist/casino/gaming/__tests__/gaming.service.int.test.js +274 -13
  31. package/dist/casino/gaming/__tests__/gaming.service.int.test.js.map +1 -1
  32. package/dist/casino/gaming/contract/index.d.ts +520 -18
  33. package/dist/casino/gaming/contract/index.d.ts.map +1 -1
  34. package/dist/casino/gaming/contract/index.js +167 -4
  35. package/dist/casino/gaming/contract/index.js.map +1 -1
  36. package/dist/casino/gaming/drizzle/migrations/0005_natural_thunderbolt_ross.sql +223 -0
  37. package/dist/casino/gaming/drizzle/migrations/meta/0005_snapshot.json +680 -0
  38. package/dist/casino/gaming/drizzle/migrations/meta/_journal.json +7 -0
  39. package/dist/casino/gaming/plugin.d.ts.map +1 -1
  40. package/dist/casino/gaming/plugin.js +9 -2
  41. package/dist/casino/gaming/plugin.js.map +1 -1
  42. package/dist/casino/gaming/router/index.d.ts +372 -18
  43. package/dist/casino/gaming/router/index.d.ts.map +1 -1
  44. package/dist/casino/gaming/router/index.js +62 -6
  45. package/dist/casino/gaming/router/index.js.map +1 -1
  46. package/dist/casino/gaming/schema/index.d.ts +499 -4
  47. package/dist/casino/gaming/schema/index.d.ts.map +1 -1
  48. package/dist/casino/gaming/schema/index.js +72 -6
  49. package/dist/casino/gaming/schema/index.js.map +1 -1
  50. package/dist/casino/gaming/service/game-category.service.d.ts +109 -0
  51. package/dist/casino/gaming/service/game-category.service.d.ts.map +1 -0
  52. package/dist/casino/gaming/service/game-category.service.js +176 -0
  53. package/dist/casino/gaming/service/game-category.service.js.map +1 -0
  54. package/dist/casino/gaming/service/game-provider.service.d.ts +118 -0
  55. package/dist/casino/gaming/service/game-provider.service.d.ts.map +1 -0
  56. package/dist/casino/gaming/service/game-provider.service.js +251 -0
  57. package/dist/casino/gaming/service/game-provider.service.js.map +1 -0
  58. package/dist/casino/gaming/service/gaming.service.d.ts +122 -14
  59. package/dist/casino/gaming/service/gaming.service.d.ts.map +1 -1
  60. package/dist/casino/gaming/service/gaming.service.js +189 -23
  61. package/dist/casino/gaming/service/gaming.service.js.map +1 -1
  62. package/dist/casino/lobby/__tests__/lobby.cache.int.test.js +137 -4
  63. package/dist/casino/lobby/__tests__/lobby.cache.int.test.js.map +1 -1
  64. package/dist/casino/lobby/contract/index.d.ts +68 -8
  65. package/dist/casino/lobby/contract/index.d.ts.map +1 -1
  66. package/dist/casino/lobby/contract/index.js +4 -3
  67. package/dist/casino/lobby/contract/index.js.map +1 -1
  68. package/dist/casino/lobby/router/index.d.ts +34 -4
  69. package/dist/casino/lobby/router/index.d.ts.map +1 -1
  70. package/dist/casino/lobby/service/lobby.service.d.ts +34 -4
  71. package/dist/casino/lobby/service/lobby.service.d.ts.map +1 -1
  72. package/dist/casino/lobby/service/lobby.service.js +60 -26
  73. package/dist/casino/lobby/service/lobby.service.js.map +1 -1
  74. package/dist/casino/shared/game-catalog.d.ts +32 -0
  75. package/dist/casino/shared/game-catalog.d.ts.map +1 -0
  76. package/dist/casino/shared/game-catalog.js +67 -0
  77. package/dist/casino/shared/game-catalog.js.map +1 -0
  78. package/dist/compliance/__tests__/compliance.service.int.test.js +248 -25
  79. package/dist/compliance/__tests__/compliance.service.int.test.js.map +1 -1
  80. package/dist/compliance/__tests__/regulatory-overview.router.int.test.d.ts +2 -0
  81. package/dist/compliance/__tests__/regulatory-overview.router.int.test.d.ts.map +1 -0
  82. package/dist/compliance/__tests__/regulatory-overview.router.int.test.js +102 -0
  83. package/dist/compliance/__tests__/regulatory-overview.router.int.test.js.map +1 -0
  84. package/dist/compliance/__tests__/rg-monitoring.service.int.test.js +17 -3
  85. package/dist/compliance/__tests__/rg-monitoring.service.int.test.js.map +1 -1
  86. package/dist/compliance/__tests__/rg-self-service.int.test.js +2 -2
  87. package/dist/compliance/__tests__/rg-self-service.int.test.js.map +1 -1
  88. package/dist/compliance/contract/index.d.ts +77 -2
  89. package/dist/compliance/contract/index.d.ts.map +1 -1
  90. package/dist/compliance/contract/index.js +50 -1
  91. package/dist/compliance/contract/index.js.map +1 -1
  92. package/dist/compliance/drizzle/migrations/0008_omniscient_northstar.sql +14 -0
  93. package/dist/compliance/drizzle/migrations/meta/0008_snapshot.json +870 -0
  94. package/dist/compliance/drizzle/migrations/meta/_journal.json +7 -0
  95. package/dist/compliance/plugin.d.ts.map +1 -1
  96. package/dist/compliance/plugin.js +2 -2
  97. package/dist/compliance/plugin.js.map +1 -1
  98. package/dist/compliance/router/index.d.ts +43 -1
  99. package/dist/compliance/router/index.d.ts.map +1 -1
  100. package/dist/compliance/router/index.js +32 -4
  101. package/dist/compliance/router/index.js.map +1 -1
  102. package/dist/compliance/schema/index.d.ts +181 -2
  103. package/dist/compliance/schema/index.d.ts.map +1 -1
  104. package/dist/compliance/schema/index.js +15 -2
  105. package/dist/compliance/schema/index.js.map +1 -1
  106. package/dist/compliance/server.d.ts +1 -1
  107. package/dist/compliance/server.d.ts.map +1 -1
  108. package/dist/compliance/server.js +1 -1
  109. package/dist/compliance/server.js.map +1 -1
  110. package/dist/compliance/service/compliance.service.d.ts +61 -14
  111. package/dist/compliance/service/compliance.service.d.ts.map +1 -1
  112. package/dist/compliance/service/compliance.service.js +226 -30
  113. package/dist/compliance/service/compliance.service.js.map +1 -1
  114. package/dist/contracts/__tests__/kit.test.js +21 -1
  115. package/dist/contracts/__tests__/kit.test.js.map +1 -1
  116. package/dist/contracts/adapters/audit.d.ts +1 -1
  117. package/dist/contracts/adapters/audit.d.ts.map +1 -1
  118. package/dist/contracts/adapters/audit.js.map +1 -1
  119. package/dist/contracts/kit.d.ts +3 -0
  120. package/dist/contracts/kit.d.ts.map +1 -1
  121. package/dist/contracts/kit.js +8 -0
  122. package/dist/contracts/kit.js.map +1 -1
  123. package/dist/contracts/schemas/__tests__/events.test.js +7 -0
  124. package/dist/contracts/schemas/__tests__/events.test.js.map +1 -1
  125. package/dist/contracts/schemas/__tests__/game-schemas.test.d.ts +2 -0
  126. package/dist/contracts/schemas/__tests__/game-schemas.test.d.ts.map +1 -0
  127. package/dist/contracts/schemas/__tests__/game-schemas.test.js +43 -0
  128. package/dist/contracts/schemas/__tests__/game-schemas.test.js.map +1 -0
  129. package/dist/contracts/schemas/events.d.ts +109 -0
  130. package/dist/contracts/schemas/events.d.ts.map +1 -1
  131. package/dist/contracts/schemas/events.js +87 -3
  132. package/dist/contracts/schemas/events.js.map +1 -1
  133. package/dist/contracts/schemas/game.d.ts +39 -0
  134. package/dist/contracts/schemas/game.d.ts.map +1 -1
  135. package/dist/contracts/schemas/game.js +32 -0
  136. package/dist/contracts/schemas/game.js.map +1 -1
  137. package/dist/contracts/schemas/iam.d.ts +2 -1
  138. package/dist/contracts/schemas/iam.d.ts.map +1 -1
  139. package/dist/contracts/schemas/iam.js +2 -1
  140. package/dist/contracts/schemas/iam.js.map +1 -1
  141. package/dist/iam/seed/data/default-admin-roles.d.ts.map +1 -1
  142. package/dist/iam/seed/data/default-admin-roles.js +1 -0
  143. package/dist/iam/seed/data/default-admin-roles.js.map +1 -1
  144. package/dist/iam/service/iam.service.d.ts +1 -1
  145. package/dist/react/client.d.ts +2 -1
  146. package/dist/react/client.d.ts.map +1 -1
  147. package/dist/react/client.js +2 -1
  148. package/dist/react/client.js.map +1 -1
  149. package/dist/server/auth/permissions.d.ts +24 -12
  150. package/dist/server/auth/permissions.d.ts.map +1 -1
  151. package/dist/server/auth/permissions.js +2 -1
  152. package/dist/server/auth/permissions.js.map +1 -1
  153. package/dist/server/db/__tests__/query-helpers.test.js +47 -1
  154. package/dist/server/db/__tests__/query-helpers.test.js.map +1 -1
  155. package/dist/server/db/index.d.ts +1 -1
  156. package/dist/server/db/index.d.ts.map +1 -1
  157. package/dist/server/db/index.js +1 -1
  158. package/dist/server/db/index.js.map +1 -1
  159. package/dist/server/db/query-helpers.d.ts +5 -0
  160. package/dist/server/db/query-helpers.d.ts.map +1 -1
  161. package/dist/server/db/query-helpers.js +37 -0
  162. package/dist/server/db/query-helpers.js.map +1 -1
  163. package/package.json +1 -1
@@ -1,14 +1,22 @@
1
1
  import { oc } from '@orpc/contract';
2
2
  import * as z from 'zod';
3
- import { CurrencyCodeSchema, GameTypeSchema, IdInputSchema, MoneyAmountSchema, UuidSchema, } from '@openora/core/contracts';
3
+ import { CurrencyCodeSchema, GameCategoryNameSchema, GameCategorySummaryWithTranslationsSchema, GameCategoryTranslationsSchema, GameProviderAggregatorMappingSchema, GameProviderSummarySchema, GameTypeSchema, IdInputSchema, MoneyAmountSchema, PageQuerySchema, QueryBooleanSchema, TimestampSchema, UuidSchema, createKebabSlugSchema, paginated, } from '@openora/core/contracts';
4
4
  export { GameTypeSchema } from '@openora/core/contracts';
5
+ export { GameProviderSummarySchema } from '@openora/core/contracts';
6
+ export { GameProviderAggregatorMappingSchema } from '@openora/core/contracts';
7
+ export { GameCategorySummarySchema } from '@openora/core/contracts';
8
+ export { GameCategorySummaryWithTranslationsSchema } from '@openora/core/contracts';
9
+ export { GameCategoryTranslationsSchema } from '@openora/core/contracts';
5
10
  export const GAME_ROUND_STATUSES = ['active', 'completed', 'cancelled'];
6
11
  export const GameRoundStatusSchema = z.enum(GAME_ROUND_STATUSES);
7
12
  export const GameSchema = z.object({
8
13
  id: UuidSchema,
9
14
  name: z.string(),
10
- provider: z.string(),
11
- category: z.string(),
15
+ slug: z.string(),
16
+ provider: GameProviderSummarySchema,
17
+ // Source channel code (eg 'eventmatrix'); 'direct' = directly integrated.
18
+ aggregator: z.string(),
19
+ categories: z.array(GameCategorySummaryWithTranslationsSchema),
12
20
  gameType: GameTypeSchema,
13
21
  thumbnailUrl: z.string().nullable(),
14
22
  isActive: z.boolean(),
@@ -47,8 +55,20 @@ export const EndRoundOutputSchema = z.object({
47
55
  // number: the player never sends it and cannot influence it.
48
56
  winAmount: MoneyAmountSchema,
49
57
  });
58
+ const CatalogQueryBaseSchema = z.object({
59
+ ...PageQuerySchema.shape,
60
+ q: z.string().trim().min(1).max(64).optional(),
61
+ });
62
+ export const ListGamesInputSchema = CatalogQueryBaseSchema.extend({
63
+ providerId: UuidSchema.optional(),
64
+ categoryId: UuidSchema.optional(),
65
+ });
66
+ export const CatalogSlugSchema = createKebabSlugSchema(64);
50
67
  export const gamingContract = {
51
- listGames: oc.route({ method: 'GET', path: '/gaming/games' }).output(z.array(GameSchema)),
68
+ listGames: oc
69
+ .route({ method: 'GET', path: '/gaming/games' })
70
+ .input(ListGamesInputSchema)
71
+ .output(paginated(GameSchema)),
52
72
  getGame: oc
53
73
  .route({ method: 'GET', path: '/gaming/games/{id}' })
54
74
  .input(IdInputSchema)
@@ -62,5 +82,148 @@ export const gamingContract = {
62
82
  .input(EndRoundInputSchema)
63
83
  .output(EndRoundOutputSchema),
64
84
  listRounds: oc.route({ method: 'GET', path: '/gaming/rounds' }).output(z.array(GameRoundSchema)),
85
+ listProviders: oc
86
+ .route({ method: 'GET', path: '/gaming/providers' })
87
+ .input(PageQuerySchema)
88
+ .output(paginated(GameProviderSummarySchema)),
89
+ getProviderBySlug: oc
90
+ .route({ method: 'GET', path: '/gaming/providers/{slug}' })
91
+ .input(z.object({ slug: CatalogSlugSchema }))
92
+ .output(GameProviderSummarySchema),
93
+ listCategories: oc
94
+ .route({ method: 'GET', path: '/gaming/categories' })
95
+ .input(PageQuerySchema)
96
+ .output(paginated(GameCategorySummaryWithTranslationsSchema)),
97
+ getCategoryBySlug: oc
98
+ .route({ method: 'GET', path: '/gaming/categories/{slug}' })
99
+ .input(z.object({ slug: CatalogSlugSchema }))
100
+ .output(GameCategorySummaryWithTranslationsSchema),
101
+ };
102
+ // Backoffice catalog management (game-config guarded in the router).
103
+ export const GameProviderDetailSchema = GameProviderSummarySchema.extend({
104
+ aggregatorMappings: z.array(GameProviderAggregatorMappingSchema),
105
+ metadata: z.unknown().nullable(),
106
+ isActive: z.boolean(),
107
+ createdAt: TimestampSchema,
108
+ updatedAt: TimestampSchema,
109
+ });
110
+ // Alias kept for existing imports; new code uses GameProviderDetailSchema.
111
+ export const GameProviderSchema = GameProviderDetailSchema;
112
+ export const GameCategoryDetailSchema = GameCategorySummaryWithTranslationsSchema.extend({
113
+ isActive: z.boolean(),
114
+ createdAt: TimestampSchema,
115
+ updatedAt: TimestampSchema,
116
+ });
117
+ // Alias kept for existing imports; new code uses GameCategoryDetailSchema.
118
+ export const GameCategorySchema = GameCategoryDetailSchema;
119
+ const CatalogFilterSchema = CatalogQueryBaseSchema.extend({
120
+ isActive: QueryBooleanSchema.optional(),
121
+ });
122
+ export const ListAdminGamesInputSchema = ListGamesInputSchema.extend({
123
+ isActive: QueryBooleanSchema.optional(),
124
+ });
125
+ const ProviderAggregatorMappingsInputSchema = z
126
+ .array(GameProviderAggregatorMappingSchema)
127
+ .max(50)
128
+ .superRefine((mappings, ctx) => {
129
+ const seen = new Set();
130
+ for (const [index, mapping] of mappings.entries()) {
131
+ if (seen.has(mapping.aggregator)) {
132
+ ctx.addIssue({
133
+ code: 'custom',
134
+ message: 'Each aggregator can be mapped only once',
135
+ path: [index, 'aggregator'],
136
+ });
137
+ }
138
+ seen.add(mapping.aggregator);
139
+ }
140
+ });
141
+ const ProviderWriteFieldsSchema = z.object({
142
+ slug: CatalogSlugSchema,
143
+ name: z.string().trim().min(1).max(128),
144
+ aggregatorMappings: ProviderAggregatorMappingsInputSchema,
145
+ logoUrl: z.string().trim().min(1).max(512).nullable(),
146
+ metadata: z.unknown().nullable(),
147
+ });
148
+ export const CreateProviderInputSchema = ProviderWriteFieldsSchema.pick({
149
+ slug: true,
150
+ name: true,
151
+ }).extend({
152
+ aggregatorMappings: ProviderAggregatorMappingsInputSchema.optional(),
153
+ logoUrl: ProviderWriteFieldsSchema.shape.logoUrl.optional(),
154
+ metadata: ProviderWriteFieldsSchema.shape.metadata.optional(),
155
+ });
156
+ export const UpdateProviderInputSchema = ProviderWriteFieldsSchema.partial().extend({
157
+ id: UuidSchema,
158
+ isActive: z.boolean().optional(),
159
+ });
160
+ export const CreateCategoryInputSchema = z.object({
161
+ slug: CatalogSlugSchema,
162
+ name: GameCategoryNameSchema,
163
+ translations: GameCategoryTranslationsSchema.optional(),
164
+ icon: z.string().trim().min(1).max(512).nullable().optional(),
165
+ sortOrder: z.number().int().min(0).optional(),
166
+ });
167
+ export const UpdateCategoryInputSchema = z.object({
168
+ id: UuidSchema,
169
+ slug: CatalogSlugSchema.optional(),
170
+ name: GameCategoryNameSchema.optional(),
171
+ translations: GameCategoryTranslationsSchema.optional(),
172
+ icon: z.string().trim().min(1).max(512).nullable().optional(),
173
+ sortOrder: z.number().int().min(0).optional(),
174
+ isActive: z.boolean().optional(),
175
+ });
176
+ export const UpdateGameInputSchema = z.object({
177
+ id: UuidSchema,
178
+ name: z.string().trim().min(1).max(256).optional(),
179
+ slug: CatalogSlugSchema.optional(),
180
+ providerId: UuidSchema.optional(),
181
+ aggregator: z.string().trim().min(1).max(64).optional(),
182
+ thumbnailUrl: z.string().trim().min(1).max(512).nullable().optional(),
183
+ isActive: z.boolean().optional(),
184
+ metadata: z.unknown().nullable().optional(),
185
+ categoryIds: z.array(UuidSchema).max(50).optional(),
186
+ });
187
+ export const gamingAdminContract = {
188
+ listAdminProviders: oc
189
+ .route({ method: 'GET', path: '/backoffice/gaming/providers' })
190
+ .input(CatalogFilterSchema)
191
+ .output(paginated(GameProviderDetailSchema)),
192
+ getAdminProvider: oc
193
+ .route({ method: 'GET', path: '/backoffice/gaming/providers/{id}' })
194
+ .input(IdInputSchema)
195
+ .output(GameProviderDetailSchema),
196
+ createProvider: oc
197
+ .route({ method: 'POST', path: '/backoffice/gaming/providers' })
198
+ .input(CreateProviderInputSchema)
199
+ .output(GameProviderDetailSchema),
200
+ updateProvider: oc
201
+ .route({ method: 'PATCH', path: '/backoffice/gaming/providers/{id}' })
202
+ .input(UpdateProviderInputSchema)
203
+ .output(GameProviderDetailSchema),
204
+ listAdminCategories: oc
205
+ .route({ method: 'GET', path: '/backoffice/gaming/categories' })
206
+ .input(CatalogFilterSchema)
207
+ .output(paginated(GameCategoryDetailSchema)),
208
+ getAdminCategory: oc
209
+ .route({ method: 'GET', path: '/backoffice/gaming/categories/{id}' })
210
+ .input(IdInputSchema)
211
+ .output(GameCategoryDetailSchema),
212
+ createCategory: oc
213
+ .route({ method: 'POST', path: '/backoffice/gaming/categories' })
214
+ .input(CreateCategoryInputSchema)
215
+ .output(GameCategoryDetailSchema),
216
+ updateCategory: oc
217
+ .route({ method: 'PATCH', path: '/backoffice/gaming/categories/{id}' })
218
+ .input(UpdateCategoryInputSchema)
219
+ .output(GameCategoryDetailSchema),
220
+ updateGame: oc
221
+ .route({ method: 'PATCH', path: '/backoffice/gaming/games/{id}' })
222
+ .input(UpdateGameInputSchema)
223
+ .output(GameSchema),
224
+ listAdminGames: oc
225
+ .route({ method: 'GET', path: '/backoffice/gaming/games' })
226
+ .input(ListAdminGamesInputSchema)
227
+ .output(paginated(GameSchema)),
65
228
  };
66
229
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ CREATE TABLE "game_category" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "slug" text NOT NULL,
4
+ "name" text NOT NULL,
5
+ "translations" jsonb DEFAULT '{}'::jsonb NOT NULL,
6
+ "icon" text,
7
+ "sort_order" integer DEFAULT 0 NOT NULL,
8
+ "is_active" boolean DEFAULT true NOT NULL,
9
+ "updated_at" timestamp with time zone NOT NULL,
10
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
11
+ );
12
+ --> statement-breakpoint
13
+ CREATE TABLE "game_category_game" (
14
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
15
+ "game_id" uuid NOT NULL,
16
+ "category_id" uuid NOT NULL
17
+ );
18
+ --> statement-breakpoint
19
+ CREATE TABLE "game_provider" (
20
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
21
+ "slug" text NOT NULL,
22
+ "name" text NOT NULL,
23
+ "logo_url" text,
24
+ "is_active" boolean DEFAULT false NOT NULL,
25
+ "metadata" jsonb,
26
+ "updated_at" timestamp with time zone NOT NULL,
27
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
28
+ );
29
+ --> statement-breakpoint
30
+ CREATE TABLE "game_provider_aggregator_mapping" (
31
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
32
+ "provider_id" uuid NOT NULL,
33
+ "aggregator" text NOT NULL,
34
+ "vendor_id" text NOT NULL
35
+ );
36
+ --> statement-breakpoint
37
+ ALTER TABLE "game" ALTER COLUMN "provider" DROP NOT NULL;--> statement-breakpoint
38
+ ALTER TABLE "game" ALTER COLUMN "category" DROP NOT NULL;--> statement-breakpoint
39
+ ALTER TABLE "game" ALTER COLUMN "is_active" SET DEFAULT false;--> statement-breakpoint
40
+ ALTER TABLE "game" ADD COLUMN "slug" text;--> statement-breakpoint
41
+ ALTER TABLE "game" ADD COLUMN "provider_id" uuid;--> statement-breakpoint
42
+ ALTER TABLE "game" ADD COLUMN "aggregator" text;--> statement-breakpoint
43
+ ALTER TABLE "game_category_game" ADD CONSTRAINT "game_category_game_game_id_game_id_fk" FOREIGN KEY ("game_id") REFERENCES "public"."game"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
44
+ ALTER TABLE "game_category_game" ADD CONSTRAINT "game_category_game_category_id_game_category_id_fk" FOREIGN KEY ("category_id") REFERENCES "public"."game_category"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
45
+ CREATE UNIQUE INDEX "game_category_slug_key" ON "game_category" USING btree ("slug");--> statement-breakpoint
46
+ CREATE UNIQUE INDEX "game_category_game_key" ON "game_category_game" USING btree ("game_id","category_id");--> statement-breakpoint
47
+ CREATE INDEX "game_category_game_category_id_idx" ON "game_category_game" USING btree ("category_id");--> statement-breakpoint
48
+ CREATE UNIQUE INDEX "game_provider_slug_key" ON "game_provider" USING btree ("slug");--> statement-breakpoint
49
+ ALTER TABLE "game_provider_aggregator_mapping" ADD CONSTRAINT "game_provider_aggregator_mapping_provider_id_game_provider_id_fk" FOREIGN KEY ("provider_id") REFERENCES "public"."game_provider"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
50
+ CREATE UNIQUE INDEX "game_provider_aggregator_mapping_provider_aggregator_key" ON "game_provider_aggregator_mapping" USING btree ("provider_id","aggregator");--> statement-breakpoint
51
+ CREATE UNIQUE INDEX "game_provider_aggregator_mapping_aggregator_vendor_id_key" ON "game_provider_aggregator_mapping" USING btree ("aggregator","vendor_id");--> statement-breakpoint
52
+ ALTER TABLE "game" ADD CONSTRAINT "game_provider_id_game_provider_id_fk" FOREIGN KEY ("provider_id") REFERENCES "public"."game_provider"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
53
+ CREATE UNIQUE INDEX "game_slug_key" ON "game" USING btree ("slug");--> statement-breakpoint
54
+ CREATE INDEX "game_provider_id_idx" ON "game" USING btree ("provider_id");--> statement-breakpoint
55
+ CREATE INDEX "game_aggregator_idx" ON "game" USING btree ("aggregator");
56
+ --> statement-breakpoint
57
+ -- Backfill (previously standalone 0004): the DDL above added game.slug /
58
+ -- game.provider_id / game.aggregator as nullable and left the legacy
59
+ -- game.provider / game.category text columns in place. The statements below
60
+ -- resolve every pre-existing row into the new shape, install the legacy-insert
61
+ -- triggers so the previous release can keep writing during a rolling deploy,
62
+ -- and only then enforce NOT NULL (see schema/index.ts).
63
+ --
64
+ -- Truncating after the trim would let a name longer than max_length end the
65
+ -- slug on a '-', which CatalogSlugSchema rejects. Returns NULL when the source
66
+ -- has no alphanumerics; every caller supplies its own fallback.
67
+ CREATE OR REPLACE FUNCTION "game_catalog_slugify"(source text, max_length int)
68
+ RETURNS text LANGUAGE sql IMMUTABLE AS $fn$
69
+ SELECT NULLIF(
70
+ regexp_replace(
71
+ left(lower(regexp_replace(source, '[^a-zA-Z0-9]+', '-', 'g')), max_length),
72
+ '(^-+|-+$)', '', 'g'
73
+ ),
74
+ ''
75
+ )
76
+ $fn$;--> statement-breakpoint
77
+ -- The dedupe suffix is probed rather than taken from a window function:
78
+ -- 'book-of-ra-2' is itself the natural slug of "Book of Ra 2", so a blind
79
+ -- suffix collides with the already-live unique index and aborts the migration.
80
+ -- Each probe is its own statement, so it sees the rows the caller inserted before it.
81
+ CREATE OR REPLACE FUNCTION "game_catalog_unique_slug"(target regclass, source text, fallback text)
82
+ RETURNS text LANGUAGE plpgsql AS $fn$
83
+ DECLARE
84
+ base text := COALESCE("game_catalog_slugify"(source, 60), fallback);
85
+ candidate text := base;
86
+ attempt int := 1;
87
+ taken boolean;
88
+ BEGIN
89
+ LOOP
90
+ EXECUTE format('SELECT EXISTS (SELECT 1 FROM %s WHERE "slug" = $1)', target)
91
+ INTO taken USING candidate;
92
+ EXIT WHEN NOT taken;
93
+ attempt := attempt + 1;
94
+ candidate := "game_catalog_slugify"(base, greatest(1, 63 - length(attempt::text)))
95
+ || '-' || attempt;
96
+ END LOOP;
97
+ RETURN candidate;
98
+ END
99
+ $fn$;--> statement-breakpoint
100
+ DO $do$
101
+ DECLARE
102
+ source record;
103
+ BEGIN
104
+ FOR source IN
105
+ SELECT DISTINCT COALESCE("provider", 'Unknown') AS "name" FROM "game" ORDER BY 1
106
+ LOOP
107
+ INSERT INTO "game_provider" ("slug", "name", "is_active", "updated_at")
108
+ VALUES (
109
+ "game_catalog_unique_slug"('game_provider', source."name", 'provider-' || left(md5(source."name"), 8)),
110
+ source."name",
111
+ true,
112
+ now()
113
+ );
114
+ END LOOP;
115
+ END
116
+ $do$;--> statement-breakpoint
117
+ DO $do$
118
+ DECLARE
119
+ source record;
120
+ BEGIN
121
+ FOR source IN
122
+ SELECT DISTINCT COALESCE("category", 'Uncategorized') AS "name" FROM "game" ORDER BY 1
123
+ LOOP
124
+ INSERT INTO "game_category" ("slug", "name", "updated_at")
125
+ VALUES (
126
+ "game_catalog_unique_slug"('game_category', source."name", 'category-' || left(md5(source."name"), 8)),
127
+ source."name",
128
+ now()
129
+ );
130
+ END LOOP;
131
+ END
132
+ $do$;--> statement-breakpoint
133
+ INSERT INTO "game_category_game" ("game_id", "category_id")
134
+ SELECT "g"."id", "c"."id" FROM "game" "g"
135
+ JOIN "game_category" "c" ON "c"."name" = COALESCE("g"."category", 'Uncategorized');--> statement-breakpoint
136
+ DO $do$
137
+ DECLARE
138
+ source record;
139
+ BEGIN
140
+ FOR source IN
141
+ SELECT "id", "name", COALESCE("provider", 'Unknown') AS "provider_name"
142
+ FROM "game" ORDER BY "id"
143
+ LOOP
144
+ UPDATE "game" SET
145
+ "slug" = "game_catalog_unique_slug"('game', source."name", 'game-' || left(source."id"::text, 8)),
146
+ "provider_id" = (SELECT "id" FROM "game_provider" WHERE "name" = source."provider_name"),
147
+ "aggregator" = 'direct'
148
+ WHERE "id" = source."id";
149
+ END LOOP;
150
+ END
151
+ $do$;--> statement-breakpoint
152
+ INSERT INTO "game_provider_aggregator_mapping" ("provider_id", "aggregator", "vendor_id")
153
+ SELECT "p"."id", 'direct', "p"."slug" FROM "game_provider" "p"
154
+ ON CONFLICT DO NOTHING;--> statement-breakpoint
155
+ -- Rolling-deploy compatibility: an instance still on the previous release inserts
156
+ -- the legacy shape (name, provider, category) and cannot populate slug, provider_id
157
+ -- or aggregator. BEFORE INSERT derives them exactly as the backfill above does, so
158
+ -- the NOT NULL below holds for old writers too. New code always sets all three, so
159
+ -- the WHEN clause keeps these triggers off its path. Drop both triggers and the
160
+ -- three functions together with the legacy columns in the follow-up contract migration.
161
+ CREATE OR REPLACE FUNCTION "game_legacy_insert"()
162
+ RETURNS trigger LANGUAGE plpgsql AS $fn$
163
+ DECLARE
164
+ provider_name text := COALESCE(NEW."provider", 'Unknown');
165
+ BEGIN
166
+ IF NEW."provider_id" IS NULL THEN
167
+ SELECT "id" INTO NEW."provider_id" FROM "game_provider"
168
+ WHERE "name" = provider_name ORDER BY "created_at", "id" LIMIT 1;
169
+ END IF;
170
+ IF NEW."provider_id" IS NULL THEN
171
+ INSERT INTO "game_provider" ("slug", "name", "is_active", "updated_at")
172
+ VALUES (
173
+ "game_catalog_unique_slug"('game_provider', provider_name, 'provider-' || left(md5(provider_name), 8)),
174
+ provider_name,
175
+ true,
176
+ now()
177
+ )
178
+ RETURNING "id" INTO NEW."provider_id";
179
+ END IF;
180
+ NEW."aggregator" := COALESCE(NEW."aggregator", 'direct');
181
+ NEW."slug" := COALESCE(
182
+ NEW."slug",
183
+ "game_catalog_unique_slug"('game', NEW."name", 'game-' || left(NEW."id"::text, 8))
184
+ );
185
+ INSERT INTO "game_provider_aggregator_mapping" ("provider_id", "aggregator", "vendor_id")
186
+ SELECT "id", NEW."aggregator", "slug" FROM "game_provider" WHERE "id" = NEW."provider_id"
187
+ ON CONFLICT DO NOTHING;
188
+ RETURN NEW;
189
+ END
190
+ $fn$;--> statement-breakpoint
191
+ CREATE TRIGGER "game_legacy_insert" BEFORE INSERT ON "game"
192
+ FOR EACH ROW WHEN (NEW."slug" IS NULL OR NEW."provider_id" IS NULL OR NEW."aggregator" IS NULL)
193
+ EXECUTE FUNCTION "game_legacy_insert"();--> statement-breakpoint
194
+ -- The category link needs the committed game id for its foreign key, so it runs
195
+ -- AFTER INSERT. Only the previous release writes game.category.
196
+ CREATE OR REPLACE FUNCTION "game_legacy_category_link"()
197
+ RETURNS trigger LANGUAGE plpgsql AS $fn$
198
+ DECLARE
199
+ linked_category_id uuid;
200
+ BEGIN
201
+ SELECT "id" INTO linked_category_id FROM "game_category"
202
+ WHERE "name" = NEW."category" ORDER BY "created_at", "id" LIMIT 1;
203
+ IF linked_category_id IS NULL THEN
204
+ INSERT INTO "game_category" ("slug", "name", "updated_at")
205
+ VALUES (
206
+ "game_catalog_unique_slug"('game_category', NEW."category", 'category-' || left(md5(NEW."category"), 8)),
207
+ NEW."category",
208
+ now()
209
+ )
210
+ RETURNING "id" INTO linked_category_id;
211
+ END IF;
212
+ INSERT INTO "game_category_game" ("game_id", "category_id")
213
+ VALUES (NEW."id", linked_category_id)
214
+ ON CONFLICT DO NOTHING;
215
+ RETURN NULL;
216
+ END
217
+ $fn$;--> statement-breakpoint
218
+ CREATE TRIGGER "game_legacy_category_link" AFTER INSERT ON "game"
219
+ FOR EACH ROW WHEN (NEW."category" IS NOT NULL)
220
+ EXECUTE FUNCTION "game_legacy_category_link"();--> statement-breakpoint
221
+ ALTER TABLE "game" ALTER COLUMN "slug" SET NOT NULL;--> statement-breakpoint
222
+ ALTER TABLE "game" ALTER COLUMN "provider_id" SET NOT NULL;--> statement-breakpoint
223
+ ALTER TABLE "game" ALTER COLUMN "aggregator" SET NOT NULL;