diff --git a/server/scripts/generate-entities.ts b/server/scripts/generate-entities.ts index df1dae26c..8684e5371 100644 --- a/server/scripts/generate-entities.ts +++ b/server/scripts/generate-entities.ts @@ -768,6 +768,61 @@ export function RULE9_addImplicitUniqueConstraints( } } +/** A repository-type marker to inject into one entity class — Rule 10. */ +export interface RepositoryTypeMarkerFixup { + className: string; + repositoryClassName: string; +} + +/** + * Rule 10 (metadata level: which class needs a marker and what to name it; + * text level: the actual insertion, see `injectRepositoryTypeMarker` below — + * this split, and why it cannot be a pure metadata rule, mirrors Rule 5's + * `.joinColumn()` injection): every entity class gets + * `[EntityRepositoryType]?: XRepository;` as its FIRST member, so + * `em.getRepository(X)` — and `t.repo(X)` in `tests/helpers/test-orm.ts`, + * whose `repo` already returns `GetRepository>` — + * resolves to the entity's own repository type instead of the generic + * `SqlEntityRepository` fallback. `GetRepository` + * (`@mikro-orm/core`'s `typings.d.ts`, installed version 7.2.1) reads + * exactly this symbol-keyed member off the entity type + * (`Entity[typeof EntityRepositoryType]`) — confirmed against the installed + * typings, not assumed. + * + * `@mikro-orm/entity-generator`'s OWN renderer already knows how to emit this + * marker, but only for the decorator-based `@Entity()` shape + * (`SourceFile.js#generate()`, guarded by `if (this.meta.repositoryClass)`). + * Our `defineEntity` output goes through a different method entirely — + * `EntitySchemaSourceFile.generateClassDefinition()` (shared by + * `DefineEntitySourceFile`, read directly out of + * `node_modules/@mikro-orm/entity-generator/EntitySchemaSourceFile.js`) — + * which only ever consults `PrimaryKeyProp`/`EagerProps`/`Config` for the + * class head, never `repositoryClass`. No `GenerateOptions` flag changes + * that, so — exactly like Rule 5's join column — the metadata alone cannot + * carry this into the rendered class body; only a text pass can. + * + * The metadata half below does not mutate anything: `meta.repositoryClass` + * is already set for every entity by Rule 8 (which always runs first, see + * `applyRules`) — this is purely a collector, so the text pass has + * (className, repositoryClassName) pairs to work from without re-deriving + * the "Repository" naming convention a second time. + * + * The marker is a type-only declaration (`?:`, never assigned a value) — NOT + * a real entity property. It must never go through `meta.addProperty`: + * MikroORM would then treat it as a genuine, unmapped column. + * `tests/unit/db/entity-class-fields.test.ts` (CLASSFIELD-003) pins that this + * stays true — the marker never shows up in `meta.props` and is never + * counted by CLASSFIELD-002's class-field census. + */ +export function RULE10_repositoryTypeMarker(metadata: EntityMetadata[]): RepositoryTypeMarkerFixup[] { + const fixups: RepositoryTypeMarkerFixup[] = []; + for (const meta of metadata) { + if (!meta.repositoryClass) continue; // Rule 8 always sets this — defensive only, never observed empty + fixups.push({ className: meta.className, repositoryClassName: meta.repositoryClass }); + } + return fixups; +} + /** A scalar property whose literal default the renderer's own heuristic drops or mis-renders — see below. */ export interface DefaultFixup { className: string; @@ -842,6 +897,8 @@ export interface RuleFixups { jsonColumns: JsonColumnFixup[]; /** Rule 1's + Rule 1b's + Rule 2's retyped scalars together — all three need the same `.columnType()` strip (see `stripRedundantColumnType`). */ retypedScalars: RetypedScalarFixup[]; + /** Rule 10's repository-type markers — one per entity class. */ + repositoryMarkers: RepositoryTypeMarkerFixup[]; } /** @@ -874,7 +931,15 @@ export function applyRules( RULE8_bindRepositories(metadata); RULE9_addImplicitUniqueConstraints(metadata, implicitUniques); const defaults = RULE_normalizeLiteralDefaults(metadata); - return { joinColumns, defaults, timestamps, jsonColumns, retypedScalars: [...retypedByRule1, ...timestamps, ...jsonColumns] }; + const repositoryMarkers = RULE10_repositoryTypeMarker(metadata); + return { + joinColumns, + defaults, + timestamps, + jsonColumns, + retypedScalars: [...retypedByRule1, ...timestamps, ...jsonColumns], + repositoryMarkers, + }; } /** @@ -1303,6 +1368,82 @@ export function stripHiddenTypeAnnotation(source: string): string { return removeUnusedCoreImportIfUnused(strippedClassBody + rest, 'Hidden'); } +/** + * Case-sensitive alpha sort key for a `@mikro-orm/core` named-import entry — + * matches `@mikro-orm/entity-generator`'s own `generateImports()` (sorts the + * raw identifiers, THEN prepends `type ` to whichever ones need it), read + * directly out of `SourceFile.js`. Ignoring any existing `type ` prefix for + * ordering purposes is what keeps this idempotent against the generator's + * own output — re-running `--write` after this pass must never reorder what + * the generator already got right. + */ +function coreImportSortKey(entry: string): string { + return entry.replace(/^type /, ''); +} + +/** + * Adds `identifier` (a VALUE import — never `type`-prefixed; see callers) to + * the file's `@mikro-orm/core` named import line, re-sorting the whole list + * with `coreImportSortKey` so the result is byte-identical to what + * `@mikro-orm/entity-generator` would have rendered had it known about this + * identifier itself. A no-op if the identifier is already present (every + * generated file has exactly one `@mikro-orm/core` import line — `defineEntity` + * and `p` are unconditional — so "no import line at all" is a renderer-shape + * change, not a legitimate input, and throws rather than silently doing + * nothing. + */ +function addNamedCoreImport(source: string, identifier: string): string { + const importLineRe = /^import \{ ([^}]*) \} from '@mikro-orm\/core';$/m; + const match = importLineRe.exec(source); + if (!match) { + throw new Error(`generate-entities: addNamedCoreImport could not find the "@mikro-orm/core" import line to add "${identifier}" to.`); + } + const entries = match[1].split(',').map((e) => e.trim()); + if (entries.some((e) => coreImportSortKey(e) === identifier)) return source; // already present + entries.push(identifier); + entries.sort((a, b) => { + const ka = coreImportSortKey(a); + const kb = coreImportSortKey(b); + return ka < kb ? -1 : ka > kb ? 1 : 0; + }); + const newLine = `import { ${entries.join(', ')} } from '@mikro-orm/core';`; + return source.slice(0, match.index) + newLine + source.slice(match.index + match[0].length); +} + +/** + * The text half of Rule 10: inserts `[EntityRepositoryType]?: XRepository;` + * as the class's FIRST member — before an existing `[PrimaryKeyProp]`/ + * `[EagerProps]` marker, if either is present (`generateClassDefinition()` + * only ever emits those two, plus `[Config]` for a custom base entity this + * codebase does not use) — and adds `EntityRepositoryType` to the + * `@mikro-orm/core` named import line. + * + * `EntityRepositoryType` is a real runtime `unique symbol` const, not an + * erased type (`POSSIBLE_TYPE_IMPORTS` in the installed entity-generator's + * `CoreImportsHelper.js` does not list it), so this is a VALUE import, never + * `import type` — the same way the generator's own decorator-mode renderer + * imports it, and the same way every existing `[PrimaryKeyProp]` marker in + * this tree already imports `PrimaryKeyProp` as a value (see e.g. + * `AppSettings.entity.ts`). + */ +export function injectRepositoryTypeMarker(source: string, fixups: readonly RepositoryTypeMarkerFixup[]): string { + let result = source; + for (const { className, repositoryClassName } of fixups) { + const classOpenRe = new RegExp(`^(export class ${escapeRegExp(className)} \\{)$`, 'm'); + const match = classOpenRe.exec(result); + if (!match) { + throw new Error( + `generate-entities: injectRepositoryTypeMarker could not find "export class ${className} {" to insert the marker after.`, + ); + } + const insertAt = match.index + match[0].length; + const marker = `\n [EntityRepositoryType]?: ${repositoryClassName};`; + result = result.slice(0, insertAt) + marker + result.slice(insertAt); + result = addNamedCoreImport(result, 'EntityRepositoryType'); + } + return result; +} + /** Every text pass, applied in order. */ export function applyTextPasses(source: string, fixups: RuleFixups): string { let result = injectJoinColumns(source, fixups.joinColumns); @@ -1314,6 +1455,7 @@ export function applyTextPasses(source: string, fixups: RuleFixups): string { result = injectJsonInterfaces(result, fixups.jsonColumns); result = removeUnusedCoreImportIfUnused(result, 'IType'); result = stripHiddenTypeAnnotation(result); + result = injectRepositoryTypeMarker(result, fixups.repositoryMarkers); return result; } @@ -1401,7 +1543,14 @@ export async function generateEntities(): Promise { }); try { const generator = orm.config.getExtension('@mikro-orm/entity-generator'); - let fixups: RuleFixups = { joinColumns: [], defaults: [], timestamps: [], jsonColumns: [], retypedScalars: [] }; + let fixups: RuleFixups = { + joinColumns: [], + defaults: [], + timestamps: [], + jsonColumns: [], + retypedScalars: [], + repositoryMarkers: [], + }; const rawFiles = await generator.generate({ entityDefinition: 'defineEntity', scalarPropertiesForRelations: 'always', @@ -1435,6 +1584,7 @@ export async function generateEntities(): Promise { timestamps: fixups.timestamps.filter((f) => f.className === className), jsonColumns: fixups.jsonColumns.filter((f) => f.className === className), retypedScalars: fixups.retypedScalars.filter((f) => f.className === className), + repositoryMarkers: fixups.repositoryMarkers.filter((f) => f.className === className), }; files.set(`${className}.entity.ts`, applyTextPasses(raw, relevantFixups)); } diff --git a/server/src/db/entities/Addons.entity.ts b/server/src/db/entities/Addons.entity.ts index 98ee20ded..06d317782 100644 --- a/server/src/db/entities/Addons.entity.ts +++ b/server/src/db/entities/Addons.entity.ts @@ -1,4 +1,4 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { AddonsRepository } from '../repositories/Addons.repository'; export interface AddonConfig { @@ -6,6 +6,7 @@ export interface AddonConfig { } export class Addons { + [EntityRepositoryType]?: AddonsRepository; id?: string | null; name!: string; description?: string | null; diff --git a/server/src/db/entities/AppSettings.entity.ts b/server/src/db/entities/AppSettings.entity.ts index 7baa7008a..cc57c6318 100644 --- a/server/src/db/entities/AppSettings.entity.ts +++ b/server/src/db/entities/AppSettings.entity.ts @@ -1,7 +1,8 @@ -import { PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { AppSettingsRepository } from '../repositories/AppSettings.repository'; export class AppSettings { + [EntityRepositoryType]?: AppSettingsRepository; [PrimaryKeyProp]?: 'key'; key?: string | null; value?: string | null; diff --git a/server/src/db/entities/AssignmentParticipants.entity.ts b/server/src/db/entities/AssignmentParticipants.entity.ts index 96c4a8b22..f9216bcf0 100644 --- a/server/src/db/entities/AssignmentParticipants.entity.ts +++ b/server/src/db/entities/AssignmentParticipants.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { AssignmentParticipantsRepository } from '../repositories/AssignmentParticipants.repository'; import { DayAssignments } from './DayAssignments.entity'; import { Users } from './Users.entity'; export class AssignmentParticipants { + [EntityRepositoryType]?: AssignmentParticipantsRepository; id!: number & Opt; assignment!: Ref; assignment_id!: number; diff --git a/server/src/db/entities/AuditLog.entity.ts b/server/src/db/entities/AuditLog.entity.ts index 91cd76b07..696b57a0a 100644 --- a/server/src/db/entities/AuditLog.entity.ts +++ b/server/src/db/entities/AuditLog.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { AuditLogRepository } from '../repositories/AuditLog.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class AuditLog { + [EntityRepositoryType]?: AuditLogRepository; id!: number & Opt; created_at?: string | null; user?: Ref | null; diff --git a/server/src/db/entities/BucketList.entity.ts b/server/src/db/entities/BucketList.entity.ts index 14ce30702..de75d5bb2 100644 --- a/server/src/db/entities/BucketList.entity.ts +++ b/server/src/db/entities/BucketList.entity.ts @@ -1,10 +1,11 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { BucketListRepository } from '../repositories/BucketList.repository'; import { DbTimestampType } from '../types'; import { DawarichVisitSuggestions } from './DawarichVisitSuggestions.entity'; import { Users } from './Users.entity'; export class BucketList { + [EntityRepositoryType]?: BucketListRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/BudgetCategoryOrder.entity.ts b/server/src/db/entities/BudgetCategoryOrder.entity.ts index a433c5a72..3fdbb27d1 100644 --- a/server/src/db/entities/BudgetCategoryOrder.entity.ts +++ b/server/src/db/entities/BudgetCategoryOrder.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { BudgetCategoryOrderRepository } from '../repositories/BudgetCategoryOrder.repository'; import { Trips } from './Trips.entity'; export class BudgetCategoryOrder { + [EntityRepositoryType]?: BudgetCategoryOrderRepository; [PrimaryKeyProp]?: ['trip', 'category']; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/BudgetItemMembers.entity.ts b/server/src/db/entities/BudgetItemMembers.entity.ts index 2148f13bd..507a1cbc2 100644 --- a/server/src/db/entities/BudgetItemMembers.entity.ts +++ b/server/src/db/entities/BudgetItemMembers.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { BudgetItemMembersRepository } from '../repositories/BudgetItemMembers.repository'; import { BudgetItems } from './BudgetItems.entity'; import { Users } from './Users.entity'; export class BudgetItemMembers { + [EntityRepositoryType]?: BudgetItemMembersRepository; id!: number & Opt; budgetItem!: Ref; budget_item_id!: number; diff --git a/server/src/db/entities/BudgetItemPayers.entity.ts b/server/src/db/entities/BudgetItemPayers.entity.ts index ad6a1f49c..5897e81f4 100644 --- a/server/src/db/entities/BudgetItemPayers.entity.ts +++ b/server/src/db/entities/BudgetItemPayers.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { BudgetItemPayersRepository } from '../repositories/BudgetItemPayers.repository'; import { BudgetItems } from './BudgetItems.entity'; import { Users } from './Users.entity'; export class BudgetItemPayers { + [EntityRepositoryType]?: BudgetItemPayersRepository; id!: number & Opt; budgetItem!: Ref; budget_item_id!: number; diff --git a/server/src/db/entities/BudgetItems.entity.ts b/server/src/db/entities/BudgetItems.entity.ts index 562c2b315..4132ea1e1 100644 --- a/server/src/db/entities/BudgetItems.entity.ts +++ b/server/src/db/entities/BudgetItems.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { BudgetItemsRepository } from '../repositories/BudgetItems.repository'; import { DbTimestampType } from '../types'; import { BudgetItemMembers } from './BudgetItemMembers.entity'; @@ -10,6 +10,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class BudgetItems { + [EntityRepositoryType]?: BudgetItemsRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/BudgetSettlements.entity.ts b/server/src/db/entities/BudgetSettlements.entity.ts index 4485d87e5..da3513563 100644 --- a/server/src/db/entities/BudgetSettlements.entity.ts +++ b/server/src/db/entities/BudgetSettlements.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { BudgetSettlementsRepository } from '../repositories/BudgetSettlements.repository'; import { DbTimestampType } from '../types'; import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class BudgetSettlements { + [EntityRepositoryType]?: BudgetSettlementsRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/Categories.entity.ts b/server/src/db/entities/Categories.entity.ts index 6c260ae11..f087532bf 100644 --- a/server/src/db/entities/Categories.entity.ts +++ b/server/src/db/entities/Categories.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CategoriesRepository } from '../repositories/Categories.repository'; import { DbTimestampType } from '../types'; import { CollectionPlaces } from './CollectionPlaces.entity'; @@ -6,6 +6,7 @@ import { Places } from './Places.entity'; import { Users } from './Users.entity'; export class Categories { + [EntityRepositoryType]?: CategoriesRepository; id!: number & Opt; name!: string; color?: string | null = '#6366f1'; diff --git a/server/src/db/entities/CollabLinks.entity.ts b/server/src/db/entities/CollabLinks.entity.ts index 90ed06725..9351f216b 100644 --- a/server/src/db/entities/CollabLinks.entity.ts +++ b/server/src/db/entities/CollabLinks.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollabLinksRepository } from '../repositories/CollabLinks.repository'; import { DbTimestampType } from '../types'; import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class CollabLinks { + [EntityRepositoryType]?: CollabLinksRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/CollabMessageReactions.entity.ts b/server/src/db/entities/CollabMessageReactions.entity.ts index 2c7150b70..03a08475f 100644 --- a/server/src/db/entities/CollabMessageReactions.entity.ts +++ b/server/src/db/entities/CollabMessageReactions.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollabMessageReactionsRepository } from '../repositories/CollabMessageReactions.repository'; import { DbTimestampType } from '../types'; import { CollabMessages } from './CollabMessages.entity'; import { Users } from './Users.entity'; export class CollabMessageReactions { + [EntityRepositoryType]?: CollabMessageReactionsRepository; id!: number & Opt; message!: Ref; message_id!: number; diff --git a/server/src/db/entities/CollabMessages.entity.ts b/server/src/db/entities/CollabMessages.entity.ts index ed0570344..9b6865bd6 100644 --- a/server/src/db/entities/CollabMessages.entity.ts +++ b/server/src/db/entities/CollabMessages.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollabMessagesRepository } from '../repositories/CollabMessages.repository'; import { DbTimestampType } from '../types'; import { CollabMessageReactions } from './CollabMessageReactions.entity'; @@ -7,6 +7,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class CollabMessages { + [EntityRepositoryType]?: CollabMessagesRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/CollabNotes.entity.ts b/server/src/db/entities/CollabNotes.entity.ts index 6c226e047..4784161f7 100644 --- a/server/src/db/entities/CollabNotes.entity.ts +++ b/server/src/db/entities/CollabNotes.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollabNotesRepository } from '../repositories/CollabNotes.repository'; import { DbTimestampType } from '../types'; import { TripFiles } from './TripFiles.entity'; @@ -6,6 +6,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class CollabNotes { + [EntityRepositoryType]?: CollabNotesRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/CollabPollVotes.entity.ts b/server/src/db/entities/CollabPollVotes.entity.ts index 6fd3ae6ce..45f877865 100644 --- a/server/src/db/entities/CollabPollVotes.entity.ts +++ b/server/src/db/entities/CollabPollVotes.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollabPollVotesRepository } from '../repositories/CollabPollVotes.repository'; import { DbTimestampType } from '../types'; import { CollabPolls } from './CollabPolls.entity'; import { Users } from './Users.entity'; export class CollabPollVotes { + [EntityRepositoryType]?: CollabPollVotesRepository; id!: number & Opt; poll!: Ref; poll_id!: number; diff --git a/server/src/db/entities/CollabPolls.entity.ts b/server/src/db/entities/CollabPolls.entity.ts index 04a8dd6d5..080d40195 100644 --- a/server/src/db/entities/CollabPolls.entity.ts +++ b/server/src/db/entities/CollabPolls.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollabPollsRepository } from '../repositories/CollabPolls.repository'; import { DbTimestampType } from '../types'; import { CollabPollVotes } from './CollabPollVotes.entity'; @@ -6,6 +6,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class CollabPolls { + [EntityRepositoryType]?: CollabPollsRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/CollectionLabels.entity.ts b/server/src/db/entities/CollectionLabels.entity.ts index 09cd1ff94..fd2b4ebcc 100644 --- a/server/src/db/entities/CollectionLabels.entity.ts +++ b/server/src/db/entities/CollectionLabels.entity.ts @@ -1,10 +1,11 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollectionLabelsRepository } from '../repositories/CollectionLabels.repository'; import { DbTimestampType } from '../types'; import { CollectionPlaces } from './CollectionPlaces.entity'; import { Collections } from './Collections.entity'; export class CollectionLabels { + [EntityRepositoryType]?: CollectionLabelsRepository; id!: number & Opt; collection!: Ref; collection_id!: number; diff --git a/server/src/db/entities/CollectionMembers.entity.ts b/server/src/db/entities/CollectionMembers.entity.ts index 5228b46cd..c69e4fb01 100644 --- a/server/src/db/entities/CollectionMembers.entity.ts +++ b/server/src/db/entities/CollectionMembers.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollectionMembersRepository } from '../repositories/CollectionMembers.repository'; import { DbTimestampType } from '../types'; import { Collections } from './Collections.entity'; import { Users } from './Users.entity'; export class CollectionMembers { + [EntityRepositoryType]?: CollectionMembersRepository; id!: number & Opt; collection!: Ref; collection_id!: number; diff --git a/server/src/db/entities/CollectionPlaceRatings.entity.ts b/server/src/db/entities/CollectionPlaceRatings.entity.ts index fa187d8ab..0ebef9482 100644 --- a/server/src/db/entities/CollectionPlaceRatings.entity.ts +++ b/server/src/db/entities/CollectionPlaceRatings.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollectionPlaceRatingsRepository } from '../repositories/CollectionPlaceRatings.repository'; import { DbTimestampType } from '../types'; import { CollectionPlaces } from './CollectionPlaces.entity'; import { Users } from './Users.entity'; export class CollectionPlaceRatings { + [EntityRepositoryType]?: CollectionPlaceRatingsRepository; id!: number & Opt; collectionPlace!: Ref; collection_place_id!: number; diff --git a/server/src/db/entities/CollectionPlaces.entity.ts b/server/src/db/entities/CollectionPlaces.entity.ts index 1db81cf5e..2d76ca8ee 100644 --- a/server/src/db/entities/CollectionPlaces.entity.ts +++ b/server/src/db/entities/CollectionPlaces.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollectionPlacesRepository } from '../repositories/CollectionPlaces.repository'; import { DbTimestampType } from '../types'; import { Categories } from './Categories.entity'; @@ -9,6 +9,7 @@ import { Tags } from './Tags.entity'; import { Users } from './Users.entity'; export class CollectionPlaces { + [EntityRepositoryType]?: CollectionPlacesRepository; id!: number & Opt; collection!: Ref; collection_id!: number; diff --git a/server/src/db/entities/Collections.entity.ts b/server/src/db/entities/Collections.entity.ts index 78de4a129..b7718755f 100644 --- a/server/src/db/entities/Collections.entity.ts +++ b/server/src/db/entities/Collections.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { CollectionsRepository } from '../repositories/Collections.repository'; import { DbTimestampType } from '../types'; import { CollectionLabels } from './CollectionLabels.entity'; @@ -7,6 +7,7 @@ import { CollectionPlaces } from './CollectionPlaces.entity'; import { Users } from './Users.entity'; export class Collections { + [EntityRepositoryType]?: CollectionsRepository; id!: number & Opt; owner!: Ref; owner_id!: number; diff --git a/server/src/db/entities/DawarichConnections.entity.ts b/server/src/db/entities/DawarichConnections.entity.ts index a2892da0f..b07c380af 100644 --- a/server/src/db/entities/DawarichConnections.entity.ts +++ b/server/src/db/entities/DawarichConnections.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { DawarichConnectionsRepository } from '../repositories/DawarichConnections.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class DawarichConnections { + [EntityRepositoryType]?: DawarichConnectionsRepository; [PrimaryKeyProp]?: 'user'; user?: Ref | null; user_id?: number | null; diff --git a/server/src/db/entities/DawarichVisitSuggestions.entity.ts b/server/src/db/entities/DawarichVisitSuggestions.entity.ts index c61fbf016..07b6198ca 100644 --- a/server/src/db/entities/DawarichVisitSuggestions.entity.ts +++ b/server/src/db/entities/DawarichVisitSuggestions.entity.ts @@ -1,4 +1,4 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { DawarichVisitSuggestionsRepository } from '../repositories/DawarichVisitSuggestions.repository'; import { BucketList } from './BucketList.entity'; import { Places } from './Places.entity'; @@ -6,6 +6,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class DawarichVisitSuggestions { + [EntityRepositoryType]?: DawarichVisitSuggestionsRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/DayAccommodations.entity.ts b/server/src/db/entities/DayAccommodations.entity.ts index a4ca29534..71a86ea1e 100644 --- a/server/src/db/entities/DayAccommodations.entity.ts +++ b/server/src/db/entities/DayAccommodations.entity.ts @@ -1,4 +1,4 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { DayAccommodationsRepository } from '../repositories/DayAccommodations.repository'; import { DbTimestampType } from '../types'; import { Days } from './Days.entity'; @@ -6,6 +6,7 @@ import { Places } from './Places.entity'; import { Trips } from './Trips.entity'; export class DayAccommodations { + [EntityRepositoryType]?: DayAccommodationsRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/DayAssignments.entity.ts b/server/src/db/entities/DayAssignments.entity.ts index 51dfdaf37..f7407b2b5 100644 --- a/server/src/db/entities/DayAssignments.entity.ts +++ b/server/src/db/entities/DayAssignments.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { DayAssignmentsRepository } from '../repositories/DayAssignments.repository'; import { DbTimestampType } from '../types'; import { AssignmentParticipants } from './AssignmentParticipants.entity'; @@ -9,6 +9,7 @@ import { Reservations } from './Reservations.entity'; import { RoadtripDayBoundaries } from './RoadtripDayBoundaries.entity'; export class DayAssignments { + [EntityRepositoryType]?: DayAssignmentsRepository; id!: number & Opt; day!: Ref; day_id!: number; diff --git a/server/src/db/entities/DayNotes.entity.ts b/server/src/db/entities/DayNotes.entity.ts index 11939d140..603ec3dff 100644 --- a/server/src/db/entities/DayNotes.entity.ts +++ b/server/src/db/entities/DayNotes.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { DayNotesRepository } from '../repositories/DayNotes.repository'; import { DbTimestampType } from '../types'; import { Days } from './Days.entity'; import { Trips } from './Trips.entity'; export class DayNotes { + [EntityRepositoryType]?: DayNotesRepository; id!: number & Opt; day!: Ref; day_id!: number; diff --git a/server/src/db/entities/Days.entity.ts b/server/src/db/entities/Days.entity.ts index 29a0594b7..480e021f3 100644 --- a/server/src/db/entities/Days.entity.ts +++ b/server/src/db/entities/Days.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { DaysRepository } from '../repositories/Days.repository'; import { DayAccommodations } from './DayAccommodations.entity'; import { DayAssignments } from './DayAssignments.entity'; @@ -11,6 +11,7 @@ import { RoadtripVias } from './RoadtripVias.entity'; import { Trips } from './Trips.entity'; export class Days { + [EntityRepositoryType]?: DaysRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/DocumentConnections.entity.ts b/server/src/db/entities/DocumentConnections.entity.ts index 1f0fcb990..62e2b1f98 100644 --- a/server/src/db/entities/DocumentConnections.entity.ts +++ b/server/src/db/entities/DocumentConnections.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { DocumentConnectionsRepository } from '../repositories/DocumentConnections.repository'; import { DbTimestampType } from '../types'; import { DocumentProviders } from './DocumentProviders.entity'; @@ -7,6 +7,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class DocumentConnections { + [EntityRepositoryType]?: DocumentConnectionsRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/DocumentProviderFields.entity.ts b/server/src/db/entities/DocumentProviderFields.entity.ts index 677e91809..a9a0b8512 100644 --- a/server/src/db/entities/DocumentProviderFields.entity.ts +++ b/server/src/db/entities/DocumentProviderFields.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { DocumentProviderFieldsRepository } from '../repositories/DocumentProviderFields.repository'; import { DocumentProviders } from './DocumentProviders.entity'; export class DocumentProviderFields { + [EntityRepositoryType]?: DocumentProviderFieldsRepository; id!: number & Opt; provider!: Ref; provider_id!: string; diff --git a/server/src/db/entities/DocumentProviders.entity.ts b/server/src/db/entities/DocumentProviders.entity.ts index 7b4d80b16..683a62280 100644 --- a/server/src/db/entities/DocumentProviders.entity.ts +++ b/server/src/db/entities/DocumentProviders.entity.ts @@ -1,9 +1,10 @@ -import { Collection, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, defineEntity, p } from '@mikro-orm/core'; import { DocumentProvidersRepository } from '../repositories/DocumentProviders.repository'; import { DocumentConnections } from './DocumentConnections.entity'; import { DocumentProviderFields } from './DocumentProviderFields.entity'; export class DocumentProviders { + [EntityRepositoryType]?: DocumentProvidersRepository; id?: string | null; name!: string; description?: string | null; diff --git a/server/src/db/entities/DocumentSyncItems.entity.ts b/server/src/db/entities/DocumentSyncItems.entity.ts index 2087c7c95..c5f6af221 100644 --- a/server/src/db/entities/DocumentSyncItems.entity.ts +++ b/server/src/db/entities/DocumentSyncItems.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { DocumentSyncItemsRepository } from '../repositories/DocumentSyncItems.repository'; import { TripDocumentLinks } from './TripDocumentLinks.entity'; import { TripFiles } from './TripFiles.entity'; import { Trips } from './Trips.entity'; export class DocumentSyncItems { + [EntityRepositoryType]?: DocumentSyncItemsRepository; id!: number & Opt; link!: Ref; link_id!: number; diff --git a/server/src/db/entities/FileLinks.entity.ts b/server/src/db/entities/FileLinks.entity.ts index adf088067..a324b82e8 100644 --- a/server/src/db/entities/FileLinks.entity.ts +++ b/server/src/db/entities/FileLinks.entity.ts @@ -1,4 +1,4 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { FileLinksRepository } from '../repositories/FileLinks.repository'; import { DbTimestampType } from '../types'; import { BudgetItems } from './BudgetItems.entity'; @@ -8,6 +8,7 @@ import { Reservations } from './Reservations.entity'; import { TripFiles } from './TripFiles.entity'; export class FileLinks { + [EntityRepositoryType]?: FileLinksRepository; id!: number & Opt; file!: Ref; file_id!: number; diff --git a/server/src/db/entities/GooglePlacePhotoMeta.entity.ts b/server/src/db/entities/GooglePlacePhotoMeta.entity.ts index a61deb099..b84c86f55 100644 --- a/server/src/db/entities/GooglePlacePhotoMeta.entity.ts +++ b/server/src/db/entities/GooglePlacePhotoMeta.entity.ts @@ -1,7 +1,8 @@ -import { PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { GooglePlacePhotoMetaRepository } from '../repositories/GooglePlacePhotoMeta.repository'; export class GooglePlacePhotoMeta { + [EntityRepositoryType]?: GooglePlacePhotoMetaRepository; [PrimaryKeyProp]?: 'place_id'; place_id?: string | null; attribution?: string | null; diff --git a/server/src/db/entities/HiddenCountries.entity.ts b/server/src/db/entities/HiddenCountries.entity.ts index 84eee9452..07ef7a8eb 100644 --- a/server/src/db/entities/HiddenCountries.entity.ts +++ b/server/src/db/entities/HiddenCountries.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { HiddenCountriesRepository } from '../repositories/HiddenCountries.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class HiddenCountries { + [EntityRepositoryType]?: HiddenCountriesRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/HiddenRegions.entity.ts b/server/src/db/entities/HiddenRegions.entity.ts index 89eeb01b9..eab7a397f 100644 --- a/server/src/db/entities/HiddenRegions.entity.ts +++ b/server/src/db/entities/HiddenRegions.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { HiddenRegionsRepository } from '../repositories/HiddenRegions.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class HiddenRegions { + [EntityRepositoryType]?: HiddenRegionsRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/IdempotencyKeys.entity.ts b/server/src/db/entities/IdempotencyKeys.entity.ts index 8574e603f..4cb740b6a 100644 --- a/server/src/db/entities/IdempotencyKeys.entity.ts +++ b/server/src/db/entities/IdempotencyKeys.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { IdempotencyKeysRepository } from '../repositories/IdempotencyKeys.repository'; import { Users } from './Users.entity'; export class IdempotencyKeys { + [EntityRepositoryType]?: IdempotencyKeysRepository; [PrimaryKeyProp]?: ['key', 'user', 'method', 'path']; key!: string; user!: Ref; diff --git a/server/src/db/entities/InviteTokens.entity.ts b/server/src/db/entities/InviteTokens.entity.ts index 46ad06cf8..dbfcf7bef 100644 --- a/server/src/db/entities/InviteTokens.entity.ts +++ b/server/src/db/entities/InviteTokens.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { InviteTokensRepository } from '../repositories/InviteTokens.repository'; import { DbTimestampType } from '../types'; import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class InviteTokens { + [EntityRepositoryType]?: InviteTokensRepository; id!: number & Opt; token!: string; max_uses: number & Opt = 1; diff --git a/server/src/db/entities/JourneyBooks.entity.ts b/server/src/db/entities/JourneyBooks.entity.ts index 1d1d48b99..29bcdb362 100644 --- a/server/src/db/entities/JourneyBooks.entity.ts +++ b/server/src/db/entities/JourneyBooks.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { JourneyBooksRepository } from '../repositories/JourneyBooks.repository'; import { DbTimestampType } from '../types'; import { Journeys } from './Journeys.entity'; import { Users } from './Users.entity'; export class JourneyBooks { + [EntityRepositoryType]?: JourneyBooksRepository; id!: number & Opt; journey!: Ref; journey_id!: number; diff --git a/server/src/db/entities/JourneyContributors.entity.ts b/server/src/db/entities/JourneyContributors.entity.ts index b09e499db..c69bdf62d 100644 --- a/server/src/db/entities/JourneyContributors.entity.ts +++ b/server/src/db/entities/JourneyContributors.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { JourneyContributorsRepository } from '../repositories/JourneyContributors.repository'; import { Journeys } from './Journeys.entity'; import { Users } from './Users.entity'; export class JourneyContributors { + [EntityRepositoryType]?: JourneyContributorsRepository; [PrimaryKeyProp]?: ['journey', 'user']; journey!: Ref; journey_id!: number; diff --git a/server/src/db/entities/JourneyEntries.entity.ts b/server/src/db/entities/JourneyEntries.entity.ts index 5757f5e40..7632aa0a3 100644 --- a/server/src/db/entities/JourneyEntries.entity.ts +++ b/server/src/db/entities/JourneyEntries.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { JourneyEntriesRepository } from '../repositories/JourneyEntries.repository'; import { JourneyEntryPhotos } from './JourneyEntryPhotos.entity'; import { Journeys } from './Journeys.entity'; @@ -7,6 +7,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class JourneyEntries { + [EntityRepositoryType]?: JourneyEntriesRepository; id!: number & Opt; journey!: Ref; journey_id!: number; diff --git a/server/src/db/entities/JourneyEntryPhotos.entity.ts b/server/src/db/entities/JourneyEntryPhotos.entity.ts index 04fff7878..4f10cde35 100644 --- a/server/src/db/entities/JourneyEntryPhotos.entity.ts +++ b/server/src/db/entities/JourneyEntryPhotos.entity.ts @@ -1,9 +1,10 @@ -import { PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { JourneyEntryPhotosRepository } from '../repositories/JourneyEntryPhotos.repository'; import { JourneyEntries } from './JourneyEntries.entity'; import { JourneyPhotos } from './JourneyPhotos.entity'; export class JourneyEntryPhotos { + [EntityRepositoryType]?: JourneyEntryPhotosRepository; [PrimaryKeyProp]?: ['entry', 'journeyPhoto']; entry!: Ref; entry_id!: number; diff --git a/server/src/db/entities/JourneyPhotos.entity.ts b/server/src/db/entities/JourneyPhotos.entity.ts index 4e45087a6..590e21679 100644 --- a/server/src/db/entities/JourneyPhotos.entity.ts +++ b/server/src/db/entities/JourneyPhotos.entity.ts @@ -1,10 +1,11 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { JourneyPhotosRepository } from '../repositories/JourneyPhotos.repository'; import { JourneyEntryPhotos } from './JourneyEntryPhotos.entity'; import { Journeys } from './Journeys.entity'; import { TrekPhotos } from './TrekPhotos.entity'; export class JourneyPhotos { + [EntityRepositoryType]?: JourneyPhotosRepository; id!: number & Opt; journey!: Ref; journey_id!: number; diff --git a/server/src/db/entities/JourneyShareTokens.entity.ts b/server/src/db/entities/JourneyShareTokens.entity.ts index a5f751d82..ecc9d9117 100644 --- a/server/src/db/entities/JourneyShareTokens.entity.ts +++ b/server/src/db/entities/JourneyShareTokens.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { JourneyShareTokensRepository } from '../repositories/JourneyShareTokens.repository'; import { DbTimestampType } from '../types'; import { Journeys } from './Journeys.entity'; import { Users } from './Users.entity'; export class JourneyShareTokens { + [EntityRepositoryType]?: JourneyShareTokensRepository; id!: number & Opt; journey!: Ref; journey_id!: number; diff --git a/server/src/db/entities/JourneyTrips.entity.ts b/server/src/db/entities/JourneyTrips.entity.ts index 7a7169124..a55b1ac54 100644 --- a/server/src/db/entities/JourneyTrips.entity.ts +++ b/server/src/db/entities/JourneyTrips.entity.ts @@ -1,9 +1,10 @@ -import { PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { JourneyTripsRepository } from '../repositories/JourneyTrips.repository'; import { Journeys } from './Journeys.entity'; import { Trips } from './Trips.entity'; export class JourneyTrips { + [EntityRepositoryType]?: JourneyTripsRepository; [PrimaryKeyProp]?: ['journey', 'trip']; journey!: Ref; journey_id!: number; diff --git a/server/src/db/entities/Journeys.entity.ts b/server/src/db/entities/Journeys.entity.ts index ee0a3b44c..d60a05c51 100644 --- a/server/src/db/entities/Journeys.entity.ts +++ b/server/src/db/entities/Journeys.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { JourneysRepository } from '../repositories/Journeys.repository'; import { JourneyBooks } from './JourneyBooks.entity'; import { JourneyContributors } from './JourneyContributors.entity'; @@ -9,6 +9,7 @@ import { JourneyTrips } from './JourneyTrips.entity'; import { Users } from './Users.entity'; export class Journeys { + [EntityRepositoryType]?: JourneysRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/McpTokens.entity.ts b/server/src/db/entities/McpTokens.entity.ts index 71fc1aaf6..d3c8421c2 100644 --- a/server/src/db/entities/McpTokens.entity.ts +++ b/server/src/db/entities/McpTokens.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { McpTokensRepository } from '../repositories/McpTokens.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class McpTokens { + [EntityRepositoryType]?: McpTokensRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/Migrations.entity.ts b/server/src/db/entities/Migrations.entity.ts index 3ab7b8467..1c4570f95 100644 --- a/server/src/db/entities/Migrations.entity.ts +++ b/server/src/db/entities/Migrations.entity.ts @@ -1,7 +1,8 @@ -import { defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, defineEntity, p } from '@mikro-orm/core'; import { MigrationsRepository } from '../repositories/Migrations.repository'; export class Migrations { + [EntityRepositoryType]?: MigrationsRepository; id!: number; timestamp!: bigint; name!: string; diff --git a/server/src/db/entities/NotificationChannelPreferences.entity.ts b/server/src/db/entities/NotificationChannelPreferences.entity.ts index 7b2bdf76f..478d1acf6 100644 --- a/server/src/db/entities/NotificationChannelPreferences.entity.ts +++ b/server/src/db/entities/NotificationChannelPreferences.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { NotificationChannelPreferencesRepository } from '../repositories/NotificationChannelPreferences.repository'; import { Users } from './Users.entity'; export class NotificationChannelPreferences { + [EntityRepositoryType]?: NotificationChannelPreferencesRepository; [PrimaryKeyProp]?: ['user', 'event_type', 'channel']; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/Notifications.entity.ts b/server/src/db/entities/Notifications.entity.ts index 54f2f17af..775075d67 100644 --- a/server/src/db/entities/Notifications.entity.ts +++ b/server/src/db/entities/Notifications.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { NotificationsRepository } from '../repositories/Notifications.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class Notifications { + [EntityRepositoryType]?: NotificationsRepository; id!: number & Opt; type!: string; scope!: string; diff --git a/server/src/db/entities/OauthClients.entity.ts b/server/src/db/entities/OauthClients.entity.ts index 0f2fe4ff8..03fb23478 100644 --- a/server/src/db/entities/OauthClients.entity.ts +++ b/server/src/db/entities/OauthClients.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { OauthClientsRepository } from '../repositories/OauthClients.repository'; import { DbTimestampType } from '../types'; import { OauthConsents } from './OauthConsents.entity'; @@ -6,6 +6,7 @@ import { OauthTokens } from './OauthTokens.entity'; import { Users } from './Users.entity'; export class OauthClients { + [EntityRepositoryType]?: OauthClientsRepository; id?: string | null; user?: Ref | null; user_id?: number | null; diff --git a/server/src/db/entities/OauthConsents.entity.ts b/server/src/db/entities/OauthConsents.entity.ts index f29e06ea7..fcfeb3cbf 100644 --- a/server/src/db/entities/OauthConsents.entity.ts +++ b/server/src/db/entities/OauthConsents.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { OauthConsentsRepository } from '../repositories/OauthConsents.repository'; import { DbTimestampType } from '../types'; import { OauthClients } from './OauthClients.entity'; import { Users } from './Users.entity'; export class OauthConsents { + [EntityRepositoryType]?: OauthConsentsRepository; id!: number & Opt; client!: Ref; client_id!: string; diff --git a/server/src/db/entities/OauthTokens.entity.ts b/server/src/db/entities/OauthTokens.entity.ts index da94a8312..357717a6f 100644 --- a/server/src/db/entities/OauthTokens.entity.ts +++ b/server/src/db/entities/OauthTokens.entity.ts @@ -1,10 +1,11 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { OauthTokensRepository } from '../repositories/OauthTokens.repository'; import { DbTimestampType } from '../types'; import { OauthClients } from './OauthClients.entity'; import { Users } from './Users.entity'; export class OauthTokens { + [EntityRepositoryType]?: OauthTokensRepository; id!: number & Opt; client!: Ref; client_id!: string; diff --git a/server/src/db/entities/PackingBags.entity.ts b/server/src/db/entities/PackingBags.entity.ts index 66c60593b..815907046 100644 --- a/server/src/db/entities/PackingBags.entity.ts +++ b/server/src/db/entities/PackingBags.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PackingBagsRepository } from '../repositories/PackingBags.repository'; import { DbTimestampType } from '../types'; import { PackingItems } from './PackingItems.entity'; @@ -6,6 +6,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class PackingBags { + [EntityRepositoryType]?: PackingBagsRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/PackingCategoryAssignees.entity.ts b/server/src/db/entities/PackingCategoryAssignees.entity.ts index 855fa1f08..d88548fef 100644 --- a/server/src/db/entities/PackingCategoryAssignees.entity.ts +++ b/server/src/db/entities/PackingCategoryAssignees.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PackingCategoryAssigneesRepository } from '../repositories/PackingCategoryAssignees.repository'; import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class PackingCategoryAssignees { + [EntityRepositoryType]?: PackingCategoryAssigneesRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/PackingItemContributors.entity.ts b/server/src/db/entities/PackingItemContributors.entity.ts index 8ea945655..315927fcb 100644 --- a/server/src/db/entities/PackingItemContributors.entity.ts +++ b/server/src/db/entities/PackingItemContributors.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PackingItemContributorsRepository } from '../repositories/PackingItemContributors.repository'; import { DbTimestampType } from '../types'; import { PackingItems } from './PackingItems.entity'; import { Users } from './Users.entity'; export class PackingItemContributors { + [EntityRepositoryType]?: PackingItemContributorsRepository; [PrimaryKeyProp]?: ['item', 'user']; item!: Ref; item_id!: number; diff --git a/server/src/db/entities/PackingItems.entity.ts b/server/src/db/entities/PackingItems.entity.ts index b33631b59..fc06757ea 100644 --- a/server/src/db/entities/PackingItems.entity.ts +++ b/server/src/db/entities/PackingItems.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PackingItemsRepository } from '../repositories/PackingItems.repository'; import { DbTimestampType } from '../types'; import { PackingBags } from './PackingBags.entity'; @@ -7,6 +7,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class PackingItems { + [EntityRepositoryType]?: PackingItemsRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/PackingTemplateCategories.entity.ts b/server/src/db/entities/PackingTemplateCategories.entity.ts index ae6cbcdcf..748f4d3d0 100644 --- a/server/src/db/entities/PackingTemplateCategories.entity.ts +++ b/server/src/db/entities/PackingTemplateCategories.entity.ts @@ -1,9 +1,10 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PackingTemplateCategoriesRepository } from '../repositories/PackingTemplateCategories.repository'; import { PackingTemplateItems } from './PackingTemplateItems.entity'; import { PackingTemplates } from './PackingTemplates.entity'; export class PackingTemplateCategories { + [EntityRepositoryType]?: PackingTemplateCategoriesRepository; id!: number & Opt; template!: Ref; template_id!: number; diff --git a/server/src/db/entities/PackingTemplateItems.entity.ts b/server/src/db/entities/PackingTemplateItems.entity.ts index 344899ba6..72115ee57 100644 --- a/server/src/db/entities/PackingTemplateItems.entity.ts +++ b/server/src/db/entities/PackingTemplateItems.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PackingTemplateItemsRepository } from '../repositories/PackingTemplateItems.repository'; import { PackingTemplateCategories } from './PackingTemplateCategories.entity'; export class PackingTemplateItems { + [EntityRepositoryType]?: PackingTemplateItemsRepository; id!: number & Opt; category!: Ref; category_id!: number; diff --git a/server/src/db/entities/PackingTemplates.entity.ts b/server/src/db/entities/PackingTemplates.entity.ts index e10149e72..fc35b6231 100644 --- a/server/src/db/entities/PackingTemplates.entity.ts +++ b/server/src/db/entities/PackingTemplates.entity.ts @@ -1,10 +1,11 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PackingTemplatesRepository } from '../repositories/PackingTemplates.repository'; import { DbTimestampType } from '../types'; import { PackingTemplateCategories } from './PackingTemplateCategories.entity'; import { Users } from './Users.entity'; export class PackingTemplates { + [EntityRepositoryType]?: PackingTemplatesRepository; id!: number & Opt; name!: string; created_by!: number; diff --git a/server/src/db/entities/PasswordResetTokens.entity.ts b/server/src/db/entities/PasswordResetTokens.entity.ts index 31ec9cd18..8f015cdfc 100644 --- a/server/src/db/entities/PasswordResetTokens.entity.ts +++ b/server/src/db/entities/PasswordResetTokens.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PasswordResetTokensRepository } from '../repositories/PasswordResetTokens.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class PasswordResetTokens { + [EntityRepositoryType]?: PasswordResetTokensRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/PhotoProviderFields.entity.ts b/server/src/db/entities/PhotoProviderFields.entity.ts index 824a46285..27758e7fc 100644 --- a/server/src/db/entities/PhotoProviderFields.entity.ts +++ b/server/src/db/entities/PhotoProviderFields.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PhotoProviderFieldsRepository } from '../repositories/PhotoProviderFields.repository'; import { PhotoProviders } from './PhotoProviders.entity'; export class PhotoProviderFields { + [EntityRepositoryType]?: PhotoProviderFieldsRepository; id!: number & Opt; provider!: Ref; provider_id!: string; diff --git a/server/src/db/entities/PhotoProviders.entity.ts b/server/src/db/entities/PhotoProviders.entity.ts index 4ac586d12..9cb2dd746 100644 --- a/server/src/db/entities/PhotoProviders.entity.ts +++ b/server/src/db/entities/PhotoProviders.entity.ts @@ -1,8 +1,9 @@ -import { Collection, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, defineEntity, p } from '@mikro-orm/core'; import { PhotoProvidersRepository } from '../repositories/PhotoProviders.repository'; import { PhotoProviderFields } from './PhotoProviderFields.entity'; export class PhotoProviders { + [EntityRepositoryType]?: PhotoProvidersRepository; id?: string | null; name!: string; description?: string | null; diff --git a/server/src/db/entities/Photos.entity.ts b/server/src/db/entities/Photos.entity.ts index 543936da0..d64376d2a 100644 --- a/server/src/db/entities/Photos.entity.ts +++ b/server/src/db/entities/Photos.entity.ts @@ -1,4 +1,4 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PhotosRepository } from '../repositories/Photos.repository'; import { DbTimestampType } from '../types'; import { Days } from './Days.entity'; @@ -6,6 +6,7 @@ import { Places } from './Places.entity'; import { Trips } from './Trips.entity'; export class Photos { + [EntityRepositoryType]?: PhotosRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/PlaceDetailsCache.entity.ts b/server/src/db/entities/PlaceDetailsCache.entity.ts index 2a2594e55..90adba03d 100644 --- a/server/src/db/entities/PlaceDetailsCache.entity.ts +++ b/server/src/db/entities/PlaceDetailsCache.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { PlaceDetailsCacheRepository } from '../repositories/PlaceDetailsCache.repository'; export class PlaceDetailsCache { + [EntityRepositoryType]?: PlaceDetailsCacheRepository; [PrimaryKeyProp]?: ['place_id', 'lang', 'expanded']; place_id!: string; lang: string & Opt = ''; diff --git a/server/src/db/entities/PlaceRatings.entity.ts b/server/src/db/entities/PlaceRatings.entity.ts index 055eea99c..dbaa519d7 100644 --- a/server/src/db/entities/PlaceRatings.entity.ts +++ b/server/src/db/entities/PlaceRatings.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PlaceRatingsRepository } from '../repositories/PlaceRatings.repository'; import { DbTimestampType } from '../types'; import { Places } from './Places.entity'; import { Users } from './Users.entity'; export class PlaceRatings { + [EntityRepositoryType]?: PlaceRatingsRepository; id!: number & Opt; place!: Ref; place_id!: number; diff --git a/server/src/db/entities/PlaceRegions.entity.ts b/server/src/db/entities/PlaceRegions.entity.ts index 2ae7b2510..0a108d35c 100644 --- a/server/src/db/entities/PlaceRegions.entity.ts +++ b/server/src/db/entities/PlaceRegions.entity.ts @@ -1,8 +1,9 @@ -import { PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PlaceRegionsRepository } from '../repositories/PlaceRegions.repository'; import { Places } from './Places.entity'; export class PlaceRegions { + [EntityRepositoryType]?: PlaceRegionsRepository; [PrimaryKeyProp]?: 'place'; place?: Ref | null; place_id?: number | null; diff --git a/server/src/db/entities/PlaceShadowPicks.entity.ts b/server/src/db/entities/PlaceShadowPicks.entity.ts index 2b404e766..d26ef5ee3 100644 --- a/server/src/db/entities/PlaceShadowPicks.entity.ts +++ b/server/src/db/entities/PlaceShadowPicks.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { PlaceShadowPicksRepository } from '../repositories/PlaceShadowPicks.repository'; export class PlaceShadowPicks { + [EntityRepositoryType]?: PlaceShadowPicksRepository; id!: number & Opt; created_at!: string & Opt; query!: string; diff --git a/server/src/db/entities/Places.entity.ts b/server/src/db/entities/Places.entity.ts index 47afb472b..d8afbe820 100644 --- a/server/src/db/entities/Places.entity.ts +++ b/server/src/db/entities/Places.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { PlacesRepository } from '../repositories/Places.repository'; import { DbTimestampType } from '../types'; import { BudgetItems } from './BudgetItems.entity'; @@ -18,6 +18,7 @@ import { TripFiles } from './TripFiles.entity'; import { Trips } from './Trips.entity'; export class Places { + [EntityRepositoryType]?: PlacesRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/PluginActions.entity.ts b/server/src/db/entities/PluginActions.entity.ts index 69bcfc406..84caeece3 100644 --- a/server/src/db/entities/PluginActions.entity.ts +++ b/server/src/db/entities/PluginActions.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { PluginActionsRepository } from '../repositories/PluginActions.repository'; export class PluginActions { + [EntityRepositoryType]?: PluginActionsRepository; [PrimaryKeyProp]?: ['plugin_id', 'action_key']; plugin_id!: string; action_key!: string; diff --git a/server/src/db/entities/PluginCapabilityAudit.entity.ts b/server/src/db/entities/PluginCapabilityAudit.entity.ts index 3b9794d78..10c034cb2 100644 --- a/server/src/db/entities/PluginCapabilityAudit.entity.ts +++ b/server/src/db/entities/PluginCapabilityAudit.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { PluginCapabilityAuditRepository } from '../repositories/PluginCapabilityAudit.repository'; export class PluginCapabilityAudit { + [EntityRepositoryType]?: PluginCapabilityAuditRepository; id!: number & Opt; plugin_id!: string; acting_user_id?: number | null; diff --git a/server/src/db/entities/PluginEgressHosts.entity.ts b/server/src/db/entities/PluginEgressHosts.entity.ts index 31a8bad3a..e5b6398a7 100644 --- a/server/src/db/entities/PluginEgressHosts.entity.ts +++ b/server/src/db/entities/PluginEgressHosts.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { PluginEgressHostsRepository } from '../repositories/PluginEgressHosts.repository'; export class PluginEgressHosts { + [EntityRepositoryType]?: PluginEgressHostsRepository; id!: number & Opt; plugin_id!: string; host!: string; diff --git a/server/src/db/entities/PluginEntityMetadata.entity.ts b/server/src/db/entities/PluginEntityMetadata.entity.ts index b80e2ba56..818bf41e3 100644 --- a/server/src/db/entities/PluginEntityMetadata.entity.ts +++ b/server/src/db/entities/PluginEntityMetadata.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { PluginEntityMetadataRepository } from '../repositories/PluginEntityMetadata.repository'; export class PluginEntityMetadata { + [EntityRepositoryType]?: PluginEntityMetadataRepository; id!: number & Opt; plugin_id!: string; entity_type!: string; diff --git a/server/src/db/entities/PluginErrorLog.entity.ts b/server/src/db/entities/PluginErrorLog.entity.ts index a9e85b81b..e3b8f8143 100644 --- a/server/src/db/entities/PluginErrorLog.entity.ts +++ b/server/src/db/entities/PluginErrorLog.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { PluginErrorLogRepository } from '../repositories/PluginErrorLog.repository'; import { DbTimestampType } from '../types'; export class PluginErrorLog { + [EntityRepositoryType]?: PluginErrorLogRepository; id!: number & Opt; plugin_id!: string; ts?: string | null; diff --git a/server/src/db/entities/PluginMetaMigrations.entity.ts b/server/src/db/entities/PluginMetaMigrations.entity.ts index 30aecd974..48fffae11 100644 --- a/server/src/db/entities/PluginMetaMigrations.entity.ts +++ b/server/src/db/entities/PluginMetaMigrations.entity.ts @@ -1,8 +1,9 @@ -import { PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { PluginMetaMigrationsRepository } from '../repositories/PluginMetaMigrations.repository'; import { DbTimestampType } from '../types'; export class PluginMetaMigrations { + [EntityRepositoryType]?: PluginMetaMigrationsRepository; [PrimaryKeyProp]?: ['plugin_id', 'migration_id']; plugin_id!: string; migration_id!: string; diff --git a/server/src/db/entities/PluginOauthState.entity.ts b/server/src/db/entities/PluginOauthState.entity.ts index 3ad89c905..2893eda14 100644 --- a/server/src/db/entities/PluginOauthState.entity.ts +++ b/server/src/db/entities/PluginOauthState.entity.ts @@ -1,7 +1,8 @@ -import { PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { PluginOauthStateRepository } from '../repositories/PluginOauthState.repository'; export class PluginOauthState { + [EntityRepositoryType]?: PluginOauthStateRepository; [PrimaryKeyProp]?: 'state'; state?: string | null; plugin_id!: string; diff --git a/server/src/db/entities/PluginOauthTokens.entity.ts b/server/src/db/entities/PluginOauthTokens.entity.ts index f4a97659b..14108533c 100644 --- a/server/src/db/entities/PluginOauthTokens.entity.ts +++ b/server/src/db/entities/PluginOauthTokens.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { PluginOauthTokensRepository } from '../repositories/PluginOauthTokens.repository'; export class PluginOauthTokens { + [EntityRepositoryType]?: PluginOauthTokensRepository; [PrimaryKeyProp]?: ['plugin_id', 'user_id']; plugin_id!: string; user_id!: number; diff --git a/server/src/db/entities/PluginScheduledTasks.entity.ts b/server/src/db/entities/PluginScheduledTasks.entity.ts index 974485e6a..9597eed7e 100644 --- a/server/src/db/entities/PluginScheduledTasks.entity.ts +++ b/server/src/db/entities/PluginScheduledTasks.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { PluginScheduledTasksRepository } from '../repositories/PluginScheduledTasks.repository'; export class PluginScheduledTasks { + [EntityRepositoryType]?: PluginScheduledTasksRepository; id!: number & Opt; plugin_id!: string; name!: string; diff --git a/server/src/db/entities/PluginSettingsFields.entity.ts b/server/src/db/entities/PluginSettingsFields.entity.ts index 7edc2e779..0100d4515 100644 --- a/server/src/db/entities/PluginSettingsFields.entity.ts +++ b/server/src/db/entities/PluginSettingsFields.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { PluginSettingsFieldsRepository } from '../repositories/PluginSettingsFields.repository'; export class PluginSettingsFields { + [EntityRepositoryType]?: PluginSettingsFieldsRepository; id!: number & Opt; plugin_id!: string; field_key!: string; diff --git a/server/src/db/entities/PluginUserConfig.entity.ts b/server/src/db/entities/PluginUserConfig.entity.ts index 041956895..b6ae59582 100644 --- a/server/src/db/entities/PluginUserConfig.entity.ts +++ b/server/src/db/entities/PluginUserConfig.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { PluginUserConfigRepository } from '../repositories/PluginUserConfig.repository'; export class PluginUserConfig { + [EntityRepositoryType]?: PluginUserConfigRepository; [PrimaryKeyProp]?: ['plugin_id', 'user_id']; plugin_id!: string; user_id!: number; diff --git a/server/src/db/entities/PluginUserErasureQueue.entity.ts b/server/src/db/entities/PluginUserErasureQueue.entity.ts index 30445bbb1..585b5eb70 100644 --- a/server/src/db/entities/PluginUserErasureQueue.entity.ts +++ b/server/src/db/entities/PluginUserErasureQueue.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { PluginUserErasureQueueRepository } from '../repositories/PluginUserErasureQueue.repository'; export class PluginUserErasureQueue { + [EntityRepositoryType]?: PluginUserErasureQueueRepository; id!: number & Opt; plugin_id!: string; user_id!: number; diff --git a/server/src/db/entities/Plugins.entity.ts b/server/src/db/entities/Plugins.entity.ts index a6ad80056..53d060d15 100644 --- a/server/src/db/entities/Plugins.entity.ts +++ b/server/src/db/entities/Plugins.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { PluginsRepository } from '../repositories/Plugins.repository'; import { DbTimestampType } from '../types'; export class Plugins { + [EntityRepositoryType]?: PluginsRepository; id?: string | null; name!: string; description?: string | null; diff --git a/server/src/db/entities/ReservationDayPositions.entity.ts b/server/src/db/entities/ReservationDayPositions.entity.ts index a096cdd8e..5dddf729e 100644 --- a/server/src/db/entities/ReservationDayPositions.entity.ts +++ b/server/src/db/entities/ReservationDayPositions.entity.ts @@ -1,9 +1,10 @@ -import { PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { ReservationDayPositionsRepository } from '../repositories/ReservationDayPositions.repository'; import { Days } from './Days.entity'; import { Reservations } from './Reservations.entity'; export class ReservationDayPositions { + [EntityRepositoryType]?: ReservationDayPositionsRepository; [PrimaryKeyProp]?: ['reservation', 'day']; reservation!: Ref; reservation_id!: number; diff --git a/server/src/db/entities/ReservationEndpoints.entity.ts b/server/src/db/entities/ReservationEndpoints.entity.ts index a83f00974..825307730 100644 --- a/server/src/db/entities/ReservationEndpoints.entity.ts +++ b/server/src/db/entities/ReservationEndpoints.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { ReservationEndpointsRepository } from '../repositories/ReservationEndpoints.repository'; import { DbTimestampType } from '../types'; import { Reservations } from './Reservations.entity'; export class ReservationEndpoints { + [EntityRepositoryType]?: ReservationEndpointsRepository; id!: number & Opt; reservation!: Ref; reservation_id!: number; diff --git a/server/src/db/entities/ReservationTravelers.entity.ts b/server/src/db/entities/ReservationTravelers.entity.ts index bfd1ac3ca..59a2eb591 100644 --- a/server/src/db/entities/ReservationTravelers.entity.ts +++ b/server/src/db/entities/ReservationTravelers.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { ReservationTravelersRepository } from '../repositories/ReservationTravelers.repository'; import { Reservations } from './Reservations.entity'; import { Users } from './Users.entity'; export class ReservationTravelers { + [EntityRepositoryType]?: ReservationTravelersRepository; id!: number & Opt; reservation!: Ref; reservation_id!: number; diff --git a/server/src/db/entities/Reservations.entity.ts b/server/src/db/entities/Reservations.entity.ts index a7933bcb7..8c946b908 100644 --- a/server/src/db/entities/Reservations.entity.ts +++ b/server/src/db/entities/Reservations.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { ReservationsRepository } from '../repositories/Reservations.repository'; import { DbTimestampType } from '../types'; import { BudgetItems } from './BudgetItems.entity'; @@ -13,6 +13,7 @@ import { TripFiles } from './TripFiles.entity'; import { Trips } from './Trips.entity'; export class Reservations { + [EntityRepositoryType]?: ReservationsRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/RoadtripDayBoundaries.entity.ts b/server/src/db/entities/RoadtripDayBoundaries.entity.ts index 7bbd99ed7..deb20c280 100644 --- a/server/src/db/entities/RoadtripDayBoundaries.entity.ts +++ b/server/src/db/entities/RoadtripDayBoundaries.entity.ts @@ -1,9 +1,10 @@ -import { PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { RoadtripDayBoundariesRepository } from '../repositories/RoadtripDayBoundaries.repository'; import { DayAssignments } from './DayAssignments.entity'; import { Trips } from './Trips.entity'; export class RoadtripDayBoundaries { + [EntityRepositoryType]?: RoadtripDayBoundariesRepository; [PrimaryKeyProp]?: ['trip', 'day_number']; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/RoadtripDayTracks.entity.ts b/server/src/db/entities/RoadtripDayTracks.entity.ts index e5ee859a2..4f1b4fa88 100644 --- a/server/src/db/entities/RoadtripDayTracks.entity.ts +++ b/server/src/db/entities/RoadtripDayTracks.entity.ts @@ -1,9 +1,10 @@ -import { PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { RoadtripDayTracksRepository } from '../repositories/RoadtripDayTracks.repository'; import { Days } from './Days.entity'; import { Places } from './Places.entity'; export class RoadtripDayTracks { + [EntityRepositoryType]?: RoadtripDayTracksRepository; [PrimaryKeyProp]?: 'day'; day?: Ref | null; day_id?: number | null; diff --git a/server/src/db/entities/RoadtripPreferences.entity.ts b/server/src/db/entities/RoadtripPreferences.entity.ts index 3073e5566..d5879c332 100644 --- a/server/src/db/entities/RoadtripPreferences.entity.ts +++ b/server/src/db/entities/RoadtripPreferences.entity.ts @@ -1,8 +1,9 @@ -import { PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { RoadtripPreferencesRepository } from '../repositories/RoadtripPreferences.repository'; import { Trips } from './Trips.entity'; export class RoadtripPreferences { + [EntityRepositoryType]?: RoadtripPreferencesRepository; [PrimaryKeyProp]?: ['trip', 'key']; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/RoadtripVias.entity.ts b/server/src/db/entities/RoadtripVias.entity.ts index 85e191491..477a07124 100644 --- a/server/src/db/entities/RoadtripVias.entity.ts +++ b/server/src/db/entities/RoadtripVias.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { RoadtripViasRepository } from '../repositories/RoadtripVias.repository'; import { Days } from './Days.entity'; export class RoadtripVias { + [EntityRepositoryType]?: RoadtripViasRepository; id!: number & Opt; day!: Ref; day_id!: number; diff --git a/server/src/db/entities/RouteUsageDaily.entity.ts b/server/src/db/entities/RouteUsageDaily.entity.ts index 457def889..fea8f7edc 100644 --- a/server/src/db/entities/RouteUsageDaily.entity.ts +++ b/server/src/db/entities/RouteUsageDaily.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { RouteUsageDailyRepository } from '../repositories/RouteUsageDaily.repository'; export class RouteUsageDaily { + [EntityRepositoryType]?: RouteUsageDailyRepository; [PrimaryKeyProp]?: ['day', 'profile', 'surface', 'self_hosted']; day!: string; profile!: string; diff --git a/server/src/db/entities/SchemaVersion.entity.ts b/server/src/db/entities/SchemaVersion.entity.ts index 6ffda26e7..48e8e4cc7 100644 --- a/server/src/db/entities/SchemaVersion.entity.ts +++ b/server/src/db/entities/SchemaVersion.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, defineEntity, p } from '@mikro-orm/core'; import { SchemaVersionRepository } from '../repositories/SchemaVersion.repository'; export class SchemaVersion { + [EntityRepositoryType]?: SchemaVersionRepository; id!: number & Opt; version!: number; } diff --git a/server/src/db/entities/SchoolHolidayCountries.entity.ts b/server/src/db/entities/SchoolHolidayCountries.entity.ts index ac923f800..73e041190 100644 --- a/server/src/db/entities/SchoolHolidayCountries.entity.ts +++ b/server/src/db/entities/SchoolHolidayCountries.entity.ts @@ -1,8 +1,9 @@ -import { Collection, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { SchoolHolidayCountriesRepository } from '../repositories/SchoolHolidayCountries.repository'; import { SchoolHolidayRegions } from './SchoolHolidayRegions.entity'; export class SchoolHolidayCountries { + [EntityRepositoryType]?: SchoolHolidayCountriesRepository; [PrimaryKeyProp]?: 'code'; code?: string | null; name!: string; diff --git a/server/src/db/entities/SchoolHolidayPeriods.entity.ts b/server/src/db/entities/SchoolHolidayPeriods.entity.ts index 60bb25f1c..628ec39e7 100644 --- a/server/src/db/entities/SchoolHolidayPeriods.entity.ts +++ b/server/src/db/entities/SchoolHolidayPeriods.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { SchoolHolidayPeriodsRepository } from '../repositories/SchoolHolidayPeriods.repository'; import { SchoolHolidayRegions } from './SchoolHolidayRegions.entity'; export class SchoolHolidayPeriods { + [EntityRepositoryType]?: SchoolHolidayPeriodsRepository; id!: number & Opt; region!: Ref; region_id!: number; diff --git a/server/src/db/entities/SchoolHolidayRegions.entity.ts b/server/src/db/entities/SchoolHolidayRegions.entity.ts index c8328e5ad..154fbc607 100644 --- a/server/src/db/entities/SchoolHolidayRegions.entity.ts +++ b/server/src/db/entities/SchoolHolidayRegions.entity.ts @@ -1,9 +1,10 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { SchoolHolidayRegionsRepository } from '../repositories/SchoolHolidayRegions.repository'; import { SchoolHolidayCountries } from './SchoolHolidayCountries.entity'; import { SchoolHolidayPeriods } from './SchoolHolidayPeriods.entity'; export class SchoolHolidayRegions { + [EntityRepositoryType]?: SchoolHolidayRegionsRepository; id!: number & Opt; country!: string; name!: string; diff --git a/server/src/db/entities/Settings.entity.ts b/server/src/db/entities/Settings.entity.ts index c70994d34..6de914911 100644 --- a/server/src/db/entities/Settings.entity.ts +++ b/server/src/db/entities/Settings.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { SettingsRepository } from '../repositories/Settings.repository'; import { Users } from './Users.entity'; export class Settings { + [EntityRepositoryType]?: SettingsRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/ShareTokens.entity.ts b/server/src/db/entities/ShareTokens.entity.ts index 089001c5a..448b6240c 100644 --- a/server/src/db/entities/ShareTokens.entity.ts +++ b/server/src/db/entities/ShareTokens.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { ShareTokensRepository } from '../repositories/ShareTokens.repository'; import { DbTimestampType } from '../types'; import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class ShareTokens { + [EntityRepositoryType]?: ShareTokensRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/Tags.entity.ts b/server/src/db/entities/Tags.entity.ts index 3cc1a4186..7c58f8e7e 100644 --- a/server/src/db/entities/Tags.entity.ts +++ b/server/src/db/entities/Tags.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TagsRepository } from '../repositories/Tags.repository'; import { DbTimestampType } from '../types'; import { CollectionPlaces } from './CollectionPlaces.entity'; @@ -6,6 +6,7 @@ import { Places } from './Places.entity'; import { Users } from './Users.entity'; export class Tags { + [EntityRepositoryType]?: TagsRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/TodoCategoryAssignees.entity.ts b/server/src/db/entities/TodoCategoryAssignees.entity.ts index 96cce6a26..76003274d 100644 --- a/server/src/db/entities/TodoCategoryAssignees.entity.ts +++ b/server/src/db/entities/TodoCategoryAssignees.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TodoCategoryAssigneesRepository } from '../repositories/TodoCategoryAssignees.repository'; import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class TodoCategoryAssignees { + [EntityRepositoryType]?: TodoCategoryAssigneesRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/TodoItems.entity.ts b/server/src/db/entities/TodoItems.entity.ts index ab18f2bfd..206b2331e 100644 --- a/server/src/db/entities/TodoItems.entity.ts +++ b/server/src/db/entities/TodoItems.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TodoItemsRepository } from '../repositories/TodoItems.repository'; import { DbTimestampType } from '../types'; import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class TodoItems { + [EntityRepositoryType]?: TodoItemsRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/TrekPhotoCacheMeta.entity.ts b/server/src/db/entities/TrekPhotoCacheMeta.entity.ts index 3f4e66d96..490493311 100644 --- a/server/src/db/entities/TrekPhotoCacheMeta.entity.ts +++ b/server/src/db/entities/TrekPhotoCacheMeta.entity.ts @@ -1,7 +1,8 @@ -import { type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core'; import { TrekPhotoCacheMetaRepository } from '../repositories/TrekPhotoCacheMeta.repository'; export class TrekPhotoCacheMeta { + [EntityRepositoryType]?: TrekPhotoCacheMetaRepository; [PrimaryKeyProp]?: 'cache_key'; cache_key?: string | null; content_type: string & Opt = 'image/jpeg'; diff --git a/server/src/db/entities/TrekPhotos.entity.ts b/server/src/db/entities/TrekPhotos.entity.ts index 019e7526e..6c2c969de 100644 --- a/server/src/db/entities/TrekPhotos.entity.ts +++ b/server/src/db/entities/TrekPhotos.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TrekPhotosRepository } from '../repositories/TrekPhotos.repository'; import { DbTimestampType } from '../types'; import { JourneyPhotos } from './JourneyPhotos.entity'; @@ -6,6 +6,7 @@ import { TripPhotos } from './TripPhotos.entity'; import { Users } from './Users.entity'; export class TrekPhotos { + [EntityRepositoryType]?: TrekPhotosRepository; id!: number & Opt; provider!: string; asset_id?: string | null; diff --git a/server/src/db/entities/TripAlbumLinks.entity.ts b/server/src/db/entities/TripAlbumLinks.entity.ts index fe139828f..df41280c2 100644 --- a/server/src/db/entities/TripAlbumLinks.entity.ts +++ b/server/src/db/entities/TripAlbumLinks.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TripAlbumLinksRepository } from '../repositories/TripAlbumLinks.repository'; import { DbTimestampType } from '../types'; import { TripPhotos } from './TripPhotos.entity'; @@ -6,6 +6,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class TripAlbumLinks { + [EntityRepositoryType]?: TripAlbumLinksRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/TripDocumentLinks.entity.ts b/server/src/db/entities/TripDocumentLinks.entity.ts index a5475d539..c366ad487 100644 --- a/server/src/db/entities/TripDocumentLinks.entity.ts +++ b/server/src/db/entities/TripDocumentLinks.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TripDocumentLinksRepository } from '../repositories/TripDocumentLinks.repository'; import { DbTimestampType } from '../types'; import { DocumentConnections } from './DocumentConnections.entity'; @@ -7,6 +7,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class TripDocumentLinks { + [EntityRepositoryType]?: TripDocumentLinksRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/TripFiles.entity.ts b/server/src/db/entities/TripFiles.entity.ts index bb40e02b8..2a8493ce3 100644 --- a/server/src/db/entities/TripFiles.entity.ts +++ b/server/src/db/entities/TripFiles.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TripFilesRepository } from '../repositories/TripFiles.repository'; import { DbTimestampType } from '../types'; import { CollabMessages } from './CollabMessages.entity'; @@ -11,6 +11,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class TripFiles { + [EntityRepositoryType]?: TripFilesRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/TripInviteTokens.entity.ts b/server/src/db/entities/TripInviteTokens.entity.ts index c5e070d66..b669c2514 100644 --- a/server/src/db/entities/TripInviteTokens.entity.ts +++ b/server/src/db/entities/TripInviteTokens.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TripInviteTokensRepository } from '../repositories/TripInviteTokens.repository'; import { DbTimestampType } from '../types'; import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class TripInviteTokens { + [EntityRepositoryType]?: TripInviteTokensRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/TripMembers.entity.ts b/server/src/db/entities/TripMembers.entity.ts index 1b10abef3..7a02c13a6 100644 --- a/server/src/db/entities/TripMembers.entity.ts +++ b/server/src/db/entities/TripMembers.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TripMembersRepository } from '../repositories/TripMembers.repository'; import { DbTimestampType } from '../types'; import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class TripMembers { + [EntityRepositoryType]?: TripMembersRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/TripPhotos.entity.ts b/server/src/db/entities/TripPhotos.entity.ts index 930fed041..25e6384d9 100644 --- a/server/src/db/entities/TripPhotos.entity.ts +++ b/server/src/db/entities/TripPhotos.entity.ts @@ -1,4 +1,4 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TripPhotosRepository } from '../repositories/TripPhotos.repository'; import { DbTimestampType } from '../types'; import { TrekPhotos } from './TrekPhotos.entity'; @@ -7,6 +7,7 @@ import { Trips } from './Trips.entity'; import { Users } from './Users.entity'; export class TripPhotos { + [EntityRepositoryType]?: TripPhotosRepository; id!: number & Opt; trip!: Ref; trip_id!: number; diff --git a/server/src/db/entities/Trips.entity.ts b/server/src/db/entities/Trips.entity.ts index 2a4655480..903e0931a 100644 --- a/server/src/db/entities/Trips.entity.ts +++ b/server/src/db/entities/Trips.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { TripsRepository } from '../repositories/Trips.repository'; import { DbTimestampType } from '../types'; import { BudgetCategoryOrder } from './BudgetCategoryOrder.entity'; @@ -37,6 +37,7 @@ import { TripPhotos } from './TripPhotos.entity'; import { Users } from './Users.entity'; export class Trips { + [EntityRepositoryType]?: TripsRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/UserNoticeDismissals.entity.ts b/server/src/db/entities/UserNoticeDismissals.entity.ts index 39aac796f..b70ee9d95 100644 --- a/server/src/db/entities/UserNoticeDismissals.entity.ts +++ b/server/src/db/entities/UserNoticeDismissals.entity.ts @@ -1,8 +1,9 @@ -import { PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { UserNoticeDismissalsRepository } from '../repositories/UserNoticeDismissals.repository'; import { Users } from './Users.entity'; export class UserNoticeDismissals { + [EntityRepositoryType]?: UserNoticeDismissalsRepository; [PrimaryKeyProp]?: ['user', 'notice_id']; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/Users.entity.ts b/server/src/db/entities/Users.entity.ts index 565c26ef5..ff28652a7 100644 --- a/server/src/db/entities/Users.entity.ts +++ b/server/src/db/entities/Users.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { UsersRepository } from '../repositories/Users.repository'; import { DbTimestampType } from '../types'; import { AssignmentParticipants } from './AssignmentParticipants.entity'; @@ -72,6 +72,7 @@ import { WebauthnChallenges } from './WebauthnChallenges.entity'; import { WebauthnCredentials } from './WebauthnCredentials.entity'; export class Users { + [EntityRepositoryType]?: UsersRepository; id!: number & Opt; username!: string; email!: string; diff --git a/server/src/db/entities/VacayCompanyHolidays.entity.ts b/server/src/db/entities/VacayCompanyHolidays.entity.ts index 5737d2e20..416c0a66b 100644 --- a/server/src/db/entities/VacayCompanyHolidays.entity.ts +++ b/server/src/db/entities/VacayCompanyHolidays.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacayCompanyHolidaysRepository } from '../repositories/VacayCompanyHolidays.repository'; import { VacayPlans } from './VacayPlans.entity'; export class VacayCompanyHolidays { + [EntityRepositoryType]?: VacayCompanyHolidaysRepository; id!: number & Opt; plan!: Ref; plan_id!: number; diff --git a/server/src/db/entities/VacayEntries.entity.ts b/server/src/db/entities/VacayEntries.entity.ts index 6dbe9ba41..75260d407 100644 --- a/server/src/db/entities/VacayEntries.entity.ts +++ b/server/src/db/entities/VacayEntries.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacayEntriesRepository } from '../repositories/VacayEntries.repository'; import { Users } from './Users.entity'; import { VacayPlans } from './VacayPlans.entity'; export class VacayEntries { + [EntityRepositoryType]?: VacayEntriesRepository; id!: number & Opt; plan!: Ref; plan_id!: number; diff --git a/server/src/db/entities/VacayHolidayCalendars.entity.ts b/server/src/db/entities/VacayHolidayCalendars.entity.ts index d8be0329b..67e9e2af4 100644 --- a/server/src/db/entities/VacayHolidayCalendars.entity.ts +++ b/server/src/db/entities/VacayHolidayCalendars.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacayHolidayCalendarsRepository } from '../repositories/VacayHolidayCalendars.repository'; import { VacayPlans } from './VacayPlans.entity'; export class VacayHolidayCalendars { + [EntityRepositoryType]?: VacayHolidayCalendarsRepository; id!: number & Opt; plan!: Ref; plan_id!: number; diff --git a/server/src/db/entities/VacayPlanMembers.entity.ts b/server/src/db/entities/VacayPlanMembers.entity.ts index cc530a85a..f211ed439 100644 --- a/server/src/db/entities/VacayPlanMembers.entity.ts +++ b/server/src/db/entities/VacayPlanMembers.entity.ts @@ -1,10 +1,11 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacayPlanMembersRepository } from '../repositories/VacayPlanMembers.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; import { VacayPlans } from './VacayPlans.entity'; export class VacayPlanMembers { + [EntityRepositoryType]?: VacayPlanMembersRepository; id!: number & Opt; plan!: Ref; plan_id!: number; diff --git a/server/src/db/entities/VacayPlans.entity.ts b/server/src/db/entities/VacayPlans.entity.ts index c0c7fd8a8..86e25320b 100644 --- a/server/src/db/entities/VacayPlans.entity.ts +++ b/server/src/db/entities/VacayPlans.entity.ts @@ -1,4 +1,4 @@ -import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacayPlansRepository } from '../repositories/VacayPlans.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; @@ -11,6 +11,7 @@ import { VacayUserYears } from './VacayUserYears.entity'; import { VacayYears } from './VacayYears.entity'; export class VacayPlans { + [EntityRepositoryType]?: VacayPlansRepository; id!: number & Opt; owner!: Ref; owner_id!: number; diff --git a/server/src/db/entities/VacayShares.entity.ts b/server/src/db/entities/VacayShares.entity.ts index 7fc1c0474..e12ae50f3 100644 --- a/server/src/db/entities/VacayShares.entity.ts +++ b/server/src/db/entities/VacayShares.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacaySharesRepository } from '../repositories/VacayShares.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class VacayShares { + [EntityRepositoryType]?: VacaySharesRepository; id!: number & Opt; owner!: Ref; owner_id!: number; diff --git a/server/src/db/entities/VacayUserColors.entity.ts b/server/src/db/entities/VacayUserColors.entity.ts index 6cc8da471..f251f3b60 100644 --- a/server/src/db/entities/VacayUserColors.entity.ts +++ b/server/src/db/entities/VacayUserColors.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacayUserColorsRepository } from '../repositories/VacayUserColors.repository'; import { Users } from './Users.entity'; import { VacayPlans } from './VacayPlans.entity'; export class VacayUserColors { + [EntityRepositoryType]?: VacayUserColorsRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/VacayUserSettings.entity.ts b/server/src/db/entities/VacayUserSettings.entity.ts index 285c25c70..b229fe229 100644 --- a/server/src/db/entities/VacayUserSettings.entity.ts +++ b/server/src/db/entities/VacayUserSettings.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, PrimaryKeyProp, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacayUserSettingsRepository } from '../repositories/VacayUserSettings.repository'; import { Users } from './Users.entity'; export class VacayUserSettings { + [EntityRepositoryType]?: VacayUserSettingsRepository; [PrimaryKeyProp]?: 'user'; user?: Ref | null; user_id?: number | null; diff --git a/server/src/db/entities/VacayUserYears.entity.ts b/server/src/db/entities/VacayUserYears.entity.ts index f9fb7e05d..5bc9b4569 100644 --- a/server/src/db/entities/VacayUserYears.entity.ts +++ b/server/src/db/entities/VacayUserYears.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacayUserYearsRepository } from '../repositories/VacayUserYears.repository'; import { Users } from './Users.entity'; import { VacayPlans } from './VacayPlans.entity'; export class VacayUserYears { + [EntityRepositoryType]?: VacayUserYearsRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/VacayYears.entity.ts b/server/src/db/entities/VacayYears.entity.ts index 251b03ebe..d11c5873d 100644 --- a/server/src/db/entities/VacayYears.entity.ts +++ b/server/src/db/entities/VacayYears.entity.ts @@ -1,8 +1,9 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VacayYearsRepository } from '../repositories/VacayYears.repository'; import { VacayPlans } from './VacayPlans.entity'; export class VacayYears { + [EntityRepositoryType]?: VacayYearsRepository; id!: number & Opt; plan!: Ref; plan_id!: number; diff --git a/server/src/db/entities/VisitedCountries.entity.ts b/server/src/db/entities/VisitedCountries.entity.ts index 0527fa87a..e2426c81d 100644 --- a/server/src/db/entities/VisitedCountries.entity.ts +++ b/server/src/db/entities/VisitedCountries.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VisitedCountriesRepository } from '../repositories/VisitedCountries.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class VisitedCountries { + [EntityRepositoryType]?: VisitedCountriesRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/VisitedRegions.entity.ts b/server/src/db/entities/VisitedRegions.entity.ts index 39a471885..b311d0b1f 100644 --- a/server/src/db/entities/VisitedRegions.entity.ts +++ b/server/src/db/entities/VisitedRegions.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { VisitedRegionsRepository } from '../repositories/VisitedRegions.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class VisitedRegions { + [EntityRepositoryType]?: VisitedRegionsRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/src/db/entities/WebauthnChallenges.entity.ts b/server/src/db/entities/WebauthnChallenges.entity.ts index 4fef490d7..9b677277b 100644 --- a/server/src/db/entities/WebauthnChallenges.entity.ts +++ b/server/src/db/entities/WebauthnChallenges.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { WebauthnChallengesRepository } from '../repositories/WebauthnChallenges.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class WebauthnChallenges { + [EntityRepositoryType]?: WebauthnChallengesRepository; id!: number & Opt; challenge!: string; user?: Ref | null; diff --git a/server/src/db/entities/WebauthnCredentials.entity.ts b/server/src/db/entities/WebauthnCredentials.entity.ts index a228a68d4..2a1fa27ab 100644 --- a/server/src/db/entities/WebauthnCredentials.entity.ts +++ b/server/src/db/entities/WebauthnCredentials.entity.ts @@ -1,9 +1,10 @@ -import { type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; +import { EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core'; import { WebauthnCredentialsRepository } from '../repositories/WebauthnCredentials.repository'; import { DbTimestampType } from '../types'; import { Users } from './Users.entity'; export class WebauthnCredentials { + [EntityRepositoryType]?: WebauthnCredentialsRepository; id!: number & Opt; user!: Ref; user_id!: number; diff --git a/server/tests/helpers/mcp-test-controllers.ts b/server/tests/helpers/mcp-test-controllers.ts index 34242b95c..66dfb48b2 100644 --- a/server/tests/helpers/mcp-test-controllers.ts +++ b/server/tests/helpers/mcp-test-controllers.ts @@ -117,11 +117,8 @@ import { AddonsMcp } from '../../src/nest/addons/addons.mcp'; import { createTestUnitOfWork, createTestAppSettingsRepo, createTestCategoriesRepo, createTestTagsRepo, createTestSettingsRepo } from './test-uow'; import { createTestOrm } from './test-orm'; import { AppSettings } from '../../src/db/entities/AppSettings.entity'; -import type { AppSettingsRepository } from '../../src/db/repositories/AppSettings.repository'; import { AuditLog } from '../../src/db/entities/AuditLog.entity'; -import type { AuditLogRepository } from '../../src/db/repositories/AuditLog.repository'; import { Users } from '../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../src/db/repositories/Users.repository'; /** * Hand-wired counterpart of the boot-time discovery in McpRegistryService, @@ -133,10 +130,10 @@ import type { UsersRepository } from '../../src/db/repositories/Users.repository export async function createMcpTestRegistry(): Promise { const dbService = new DatabaseService(db); const generalStorage = makeStorageFixture('').storage; - const appSettings = (await createTestOrm(dbService.connection)).repo(AppSettings) as AppSettingsRepository; + const appSettings = (await createTestOrm(dbService.connection)).repo(AppSettings); const mcpOrm = await createTestOrm(dbService.connection); - const auditLogRepo = mcpOrm.repo(AuditLog) as AuditLogRepository; - const usersRepo = mcpOrm.repo(Users) as UsersRepository; + const auditLogRepo = mcpOrm.repo(AuditLog); + const usersRepo = mcpOrm.repo(Users); const permissionsService = new PermissionsService(await createTestAppSettingsRepo(dbService.connection), await createTestUnitOfWork(dbService.connection)); // Same argument list as auth.bridge.ts. AtlasService used to sit in third // place; when getTravelStats moved onto AtlasService itself the edge was diff --git a/server/tests/helpers/plugin-host.ts b/server/tests/helpers/plugin-host.ts index cf10a8051..9627ba4bc 100644 --- a/server/tests/helpers/plugin-host.ts +++ b/server/tests/helpers/plugin-host.ts @@ -74,11 +74,8 @@ import { RuntimeEnvService } from '../../src/nest/app-config/runtime-env.service import { makeStorageFixture } from './storage-fixture'; import { createTestUnitOfWork, createTestAppSettingsRepo, createTestCategoriesRepo, createTestTagsRepo, createTestSettingsRepo, sharedTestOrm } from './test-uow'; import { AppSettings } from '../../src/db/entities/AppSettings.entity'; -import type { AppSettingsRepository } from '../../src/db/repositories/AppSettings.repository'; import { AuditLog } from '../../src/db/entities/AuditLog.entity'; -import type { AuditLogRepository } from '../../src/db/repositories/AuditLog.repository'; import { Users } from '../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../src/db/repositories/Users.repository'; /** * Hand-wired counterpart of the PluginsModule DI graph for no-Nest tests @@ -92,8 +89,8 @@ import type { UsersRepository } from '../../src/db/repositories/Users.repository */ export async function createPluginRpcHostFactory(dbs: DatabaseService): Promise { const generalStorage = makeStorageFixture('').storage; - const appSettings = (await sharedTestOrm(dbs.connection)).repo(AppSettings) as AppSettingsRepository; - const usersRepo = (await sharedTestOrm(dbs.connection)).repo(Users) as UsersRepository; + const appSettings = (await sharedTestOrm(dbs.connection)).repo(AppSettings); + const usersRepo = (await sharedTestOrm(dbs.connection)).repo(Users); const permissions = new PermissionsService(await createTestAppSettingsRepo(dbs.connection), await createTestUnitOfWork(dbs.connection)); const exchangeRates = new ExchangeRatesService(); const realtime = new RealtimeService(); @@ -168,7 +165,7 @@ export async function createPluginRuntime(dbs: DatabaseService, registry?: Plugi const orm = await sharedTestOrm(dbs.connection); return new PluginRuntimeService( dbs, - new AuditService(orm.repo(AuditLog) as AuditLogRepository, orm.repo(Users) as UsersRepository), + new AuditService(orm.repo(AuditLog), orm.repo(Users)), await createTestAddonsService(dbs.connection, dbs), new PluginUserSettingsService(dbs), registry, diff --git a/server/tests/helpers/test-addons.ts b/server/tests/helpers/test-addons.ts index 39eb80330..ea5b4585d 100644 --- a/server/tests/helpers/test-addons.ts +++ b/server/tests/helpers/test-addons.ts @@ -3,15 +3,10 @@ import { AddonsService } from '../../src/nest/addons/addons.service'; import { DatabaseService } from '../../src/nest/database/database.service'; import { sharedTestOrm } from './test-uow'; import { Addons } from '../../src/db/entities/Addons.entity'; -import type { AddonsRepository } from '../../src/db/repositories/Addons.repository'; import { PhotoProviders } from '../../src/db/entities/PhotoProviders.entity'; -import type { PhotoProvidersRepository } from '../../src/db/repositories/PhotoProviders.repository'; import { PhotoProviderFields } from '../../src/db/entities/PhotoProviderFields.entity'; -import type { PhotoProviderFieldsRepository } from '../../src/db/repositories/PhotoProviderFields.repository'; import { AppSettings } from '../../src/db/entities/AppSettings.entity'; -import type { AppSettingsRepository } from '../../src/db/repositories/AppSettings.repository'; import { Users } from '../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../src/db/repositories/Users.repository'; /** * AddonsService's constructor grew from one `DatabaseService` to four @@ -45,11 +40,11 @@ import type { UsersRepository } from '../../src/db/repositories/Users.repository export async function createTestAddonsService(db: Database.Database, dbs: DatabaseService = new DatabaseService(db)): Promise { const t = await sharedTestOrm(db); return new AddonsService( - t.repo(Addons) as AddonsRepository, - t.repo(PhotoProviders) as PhotoProvidersRepository, - t.repo(PhotoProviderFields) as PhotoProviderFieldsRepository, - t.repo(AppSettings) as AppSettingsRepository, - t.repo(Users) as UsersRepository, + t.repo(Addons), + t.repo(PhotoProviders), + t.repo(PhotoProviderFields), + t.repo(AppSettings), + t.repo(Users), dbs, ); } diff --git a/server/tests/helpers/test-uow.ts b/server/tests/helpers/test-uow.ts index 35d08a6e9..3ceea61e1 100644 --- a/server/tests/helpers/test-uow.ts +++ b/server/tests/helpers/test-uow.ts @@ -89,7 +89,7 @@ export function createTestUnitOfWork(db: Database.Database): Promise export function createTestAppSettingsRepo(db: Database.Database): Promise { const existing = appSettingsPerHandle.get(db); if (existing !== undefined) return existing; - const pending = sharedTestOrm(db).then((t) => t.repo(AppSettings) as AppSettingsRepository); + const pending = sharedTestOrm(db).then((t) => t.repo(AppSettings)); appSettingsPerHandle.set(db, pending); return pending; } @@ -104,7 +104,7 @@ export function createTestAppSettingsRepo(db: Database.Database): Promise { const existing = categoriesPerHandle.get(db); if (existing !== undefined) return existing; - const pending = sharedTestOrm(db).then((t) => t.repo(Categories) as CategoriesRepository); + const pending = sharedTestOrm(db).then((t) => t.repo(Categories)); categoriesPerHandle.set(db, pending); return pending; } @@ -116,7 +116,7 @@ export function createTestCategoriesRepo(db: Database.Database): Promise { const existing = tagsPerHandle.get(db); if (existing !== undefined) return existing; - const pending = sharedTestOrm(db).then((t) => t.repo(Tags) as TagsRepository); + const pending = sharedTestOrm(db).then((t) => t.repo(Tags)); tagsPerHandle.set(db, pending); return pending; } @@ -129,7 +129,7 @@ export function createTestTagsRepo(db: Database.Database): Promise { const existing = settingsPerHandle.get(db); if (existing !== undefined) return existing; - const pending = sharedTestOrm(db).then((t) => t.repo(Settings) as SettingsRepository); + const pending = sharedTestOrm(db).then((t) => t.repo(Settings)); settingsPerHandle.set(db, pending); return pending; } @@ -146,7 +146,7 @@ export function createTestSettingsRepo(db: Database.Database): Promise { const existing = usersPerHandle.get(db); if (existing !== undefined) return existing; - const pending = sharedTestOrm(db).then((t) => t.repo(Users) as UsersRepository); + const pending = sharedTestOrm(db).then((t) => t.repo(Users)); usersPerHandle.set(db, pending); return pending; } diff --git a/server/tests/integration/mcp.test.ts b/server/tests/integration/mcp.test.ts index 97da3c1fd..bff10718b 100644 --- a/server/tests/integration/mcp.test.ts +++ b/server/tests/integration/mcp.test.ts @@ -42,9 +42,7 @@ import { createTestAddonsService } from '../helpers/test-addons'; import { AuditService } from '../../src/nest/audit/audit.service'; import { createTestOrm, type TestOrm } from '../helpers/test-orm'; import { AuditLog } from '../../src/db/entities/AuditLog.entity'; -import type { AuditLogRepository } from '../../src/db/repositories/AuditLog.repository'; import { Users } from '../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../src/db/repositories/Users.repository'; const oauthDbs = new DatabaseService(testDb); let oauthSvc: OauthService; @@ -76,7 +74,7 @@ beforeAll(async () => { nestApp = await buildApp(); app = nestApp.getHttpAdapter().getInstance(); t = await createTestOrm(testDb); - oauthSvc = new OauthService(oauthDbs, await createTestAddonsService(testDb, oauthDbs), new AuditService(t.repo(AuditLog) as AuditLogRepository, t.repo(Users) as UsersRepository)); + oauthSvc = new OauthService(oauthDbs, await createTestAddonsService(testDb, oauthDbs), new AuditService(t.repo(AuditLog), t.repo(Users))); }); beforeEach(() => { diff --git a/server/tests/integration/oauth-authorize.test.ts b/server/tests/integration/oauth-authorize.test.ts index 9b39d5d98..0d1c7fe71 100644 --- a/server/tests/integration/oauth-authorize.test.ts +++ b/server/tests/integration/oauth-authorize.test.ts @@ -46,9 +46,7 @@ import { createTestAddonsService } from '../helpers/test-addons'; import { AuditService } from '../../src/nest/audit/audit.service'; import { createTestOrm, type TestOrm } from '../helpers/test-orm'; import { AuditLog } from '../../src/db/entities/AuditLog.entity'; -import type { AuditLogRepository } from '../../src/db/repositories/AuditLog.repository'; import { Users } from '../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../src/db/repositories/Users.repository'; // The consent controller writes pending codes through the container instance; // the SDK-mounted authorize path reads them back. The map is module-scoped in @@ -87,7 +85,7 @@ beforeAll(async () => { nestApp = await buildApp(); app = nestApp.getHttpAdapter().getInstance(); t = await createTestOrm(testDb); - containerSideOauth = new OauthService(oauthDbs, await createTestAddonsService(testDb, oauthDbs), new AuditService(t.repo(AuditLog) as AuditLogRepository, t.repo(Users) as UsersRepository)); + containerSideOauth = new OauthService(oauthDbs, await createTestAddonsService(testDb, oauthDbs), new AuditService(t.repo(AuditLog), t.repo(Users))); }); beforeEach(() => { diff --git a/server/tests/integration/oauth.test.ts b/server/tests/integration/oauth.test.ts index 19a179e3e..fbe238959 100644 --- a/server/tests/integration/oauth.test.ts +++ b/server/tests/integration/oauth.test.ts @@ -43,9 +43,7 @@ import { createTestAddonsService } from '../helpers/test-addons'; import { AuditService } from '../../src/nest/audit/audit.service'; import { createTestOrm, type TestOrm } from '../helpers/test-orm'; import { AuditLog } from '../../src/db/entities/AuditLog.entity'; -import type { AuditLogRepository } from '../../src/db/repositories/AuditLog.repository'; import { Users } from '../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../src/db/repositories/Users.repository'; // In production the consent controller writes pending codes through the // container instance and the SDK routes read them back through the same @@ -85,7 +83,7 @@ beforeAll(async () => { nestApp = await buildApp(); app = nestApp.getHttpAdapter().getInstance(); t = await createTestOrm(testDb); - containerSideOauth = new OauthService(oauthDbs, await createTestAddonsService(testDb, oauthDbs), new AuditService(t.repo(AuditLog) as AuditLogRepository, t.repo(Users) as UsersRepository)); + containerSideOauth = new OauthService(oauthDbs, await createTestAddonsService(testDb, oauthDbs), new AuditService(t.repo(AuditLog), t.repo(Users))); }); beforeEach(() => { diff --git a/server/tests/integration/plugins/boot-registry-order.test.ts b/server/tests/integration/plugins/boot-registry-order.test.ts index a86dff301..dfd294976 100644 --- a/server/tests/integration/plugins/boot-registry-order.test.ts +++ b/server/tests/integration/plugins/boot-registry-order.test.ts @@ -55,13 +55,9 @@ import { AuditService } from '../../../src/nest/audit/audit.service'; import { createTestAddonsService } from '../../helpers/test-addons'; import { AddonsService } from '../../../src/nest/addons/addons.service'; import { Addons } from '../../../src/db/entities/Addons.entity'; -import type { AddonsRepository } from '../../../src/db/repositories/Addons.repository'; import { PhotoProviders } from '../../../src/db/entities/PhotoProviders.entity'; -import type { PhotoProvidersRepository } from '../../../src/db/repositories/PhotoProviders.repository'; import { PhotoProviderFields } from '../../../src/db/entities/PhotoProviderFields.entity'; -import type { PhotoProviderFieldsRepository } from '../../../src/db/repositories/PhotoProviderFields.repository'; import { AppSettings } from '../../../src/db/entities/AppSettings.entity'; -import type { AppSettingsRepository } from '../../../src/db/repositories/AppSettings.repository'; import { PluginRuntimeService } from '../../../src/nest/plugins/plugin-runtime.service'; import { PluginUserSettingsService } from '../../../src/nest/plugins/plugin-user-settings.service'; import { PluginRpcHostFactory } from '../../../src/nest/plugins/host/plugin-rpc-host.factory'; @@ -70,9 +66,7 @@ import type { PluginRpcRegistryService } from '../../../src/nest/plugins/host/rp import { DbRpc } from '../../../src/nest/plugins/host/rpc/db.rpc'; import { createTestOrm, type TestOrm } from '../../helpers/test-orm'; import { AuditLog } from '../../../src/db/entities/AuditLog.entity'; -import type { AuditLogRepository } from '../../../src/db/repositories/AuditLog.repository'; import { Users } from '../../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../../src/db/repositories/Users.repository'; let codeRoot: string; let dataRoot: string; @@ -121,8 +115,8 @@ describe('plugin boot vs registry scan ordering', () => { const registry = new PluginRpcRegistry(); const hostFactory = new PluginRpcHostFactory(dbs, registry as unknown as PluginRpcRegistryService); t = await createTestOrm(dbConn); - const auditLogRepo = t.repo(AuditLog) as AuditLogRepository; - const usersRepo = t.repo(Users) as UsersRepository; + const auditLogRepo = t.repo(AuditLog); + const usersRepo = t.repo(Users); const addonsService = await createTestAddonsService(dbConn, dbs); mod = await Test.createTestingModule({ @@ -211,15 +205,15 @@ describe('plugin boot vs registry scan ordering', () => { // Built directly on t2 (not createTestAddonsService's sharedTestOrm) so // its repositories share t2's allowGlobalContext: false ORM. const addonsService2 = new AddonsService( - t2.repo(Addons) as AddonsRepository, - t2.repo(PhotoProviders) as PhotoProvidersRepository, - t2.repo(PhotoProviderFields) as PhotoProviderFieldsRepository, - t2.repo(AppSettings) as AppSettingsRepository, - t2.repo(Users) as UsersRepository, + t2.repo(Addons), + t2.repo(PhotoProviders), + t2.repo(PhotoProviderFields), + t2.repo(AppSettings), + t2.repo(Users), dbs2, ); - const auditLogRepo2 = t2.repo(AuditLog) as AuditLogRepository; - const usersRepo2 = t2.repo(Users) as UsersRepository; + const auditLogRepo2 = t2.repo(AuditLog); + const usersRepo2 = t2.repo(Users); mod2 = await Test.createTestingModule({ providers: [ diff --git a/server/tests/unit/db/entity-class-fields.test.ts b/server/tests/unit/db/entity-class-fields.test.ts index f2bc2c170..9484ce0e3 100644 --- a/server/tests/unit/db/entity-class-fields.test.ts +++ b/server/tests/unit/db/entity-class-fields.test.ts @@ -1,4 +1,4 @@ -import { ReferenceKind } from '@mikro-orm/core'; +import { EntityRepositoryType, ReferenceKind } from '@mikro-orm/core'; import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'vitest'; import { ALL_ENTITIES } from '../../../src/db/entities'; import { BudgetItems } from '../../../src/db/entities/BudgetItems.entity'; @@ -83,6 +83,44 @@ describe('entity class fields never carry a NaN initialiser (task-4-review-shape }); }); +/** + * Plan 3b pre-task (`scripts/generate-entities.ts`'s `RULE10_repositoryTypeMarker` + * / `injectRepositoryTypeMarker`): `[EntityRepositoryType]?: XRepository;` is + * a type-only class member, never routed through `meta.addProperty` — this + * pins that it stays that way, so CLASSFIELD-002's census above (and its + * pinned count, 423) can never silently start counting it. + */ +describe('[EntityRepositoryType] marker is excluded from the class-field census (RULE10)', () => { + it('CLASSFIELD-003: every entity has an own [EntityRepositoryType] symbol property that is never a real metadata property and never leaks as a string key', async () => { + const testDb = createSnapshotTestDb(); + try { + const t = await createTestOrm(testDb); + try { + const failures: string[] = []; + for (const schema of ALL_ENTITIES) { + const meta = t.orm.getMetadata().get(schema.class); + const Ctor = schema.class as new () => Record; + const instance = new Ctor(); + if (!Object.getOwnPropertySymbols(instance).includes(EntityRepositoryType)) { + failures.push(`${meta.className}: missing an own [EntityRepositoryType] symbol property`); + } + if (Object.keys(instance).includes('EntityRepositoryType')) { + failures.push(`${meta.className}: [EntityRepositoryType] leaked as a string-keyed own property`); + } + if (meta.props.some((prop) => prop.name === 'EntityRepositoryType')) { + failures.push(`${meta.className}: [EntityRepositoryType] was registered as a real metadata property`); + } + } + expect(failures).toEqual([]); + } finally { + await t.close(); + } + } finally { + testDb.close(); + } + }); +}); + /** * The reviewer's exact repro (`task-4-review-shape.md`, Important finding * 1): before the fix, `em.create(BudgetItems, …)` and diff --git a/server/tests/unit/db/generate-entities.test.ts b/server/tests/unit/db/generate-entities.test.ts index 48d5bab23..6aee080c8 100644 --- a/server/tests/unit/db/generate-entities.test.ts +++ b/server/tests/unit/db/generate-entities.test.ts @@ -1,14 +1,19 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { EntityMetadata, ReferenceKind, type EntityProperty } from '@mikro-orm/core'; -import { describe, expect, it } from 'vitest'; +import { EntityMetadata, type EntityRepository, ReferenceKind, type EntityProperty } from '@mikro-orm/core'; +import { describe, expect, expectTypeOf, it } from 'vitest'; +import { Users } from '../../../src/db/entities/Users.entity'; +import { UsersRepository } from '../../../src/db/repositories/Users.repository'; +import { createSnapshotTestDb } from '../../helpers/db-mock'; +import { createTestOrm } from '../../helpers/test-orm'; import { assertFilesGenerated, BOOLEAN_COLUMNS, JoinColumnFixup, JsonColumnFixup, KNOWN_DIFFS, + RepositoryTypeMarkerFixup, RULE1_fixUnknownScalarTypes, RULE1b_markJsonColumns, RULE1c_markBooleanColumns, @@ -21,6 +26,7 @@ import { RULE7_dropNoActionRules, RULE8_bindRepositories, RULE9_addImplicitUniqueConstraints, + RULE10_repositoryTypeMarker, RULE_normalizeLiteralDefaults, applyTextPasses, checkEntities, @@ -32,6 +38,7 @@ import { injectJsonInterfaces, injectJsonTypeParams, injectMissingDefaults, + injectRepositoryTypeMarker, regenerateEntitiesIndex, stripHiddenTypeAnnotation, stripRedundantColumnType, @@ -415,6 +422,21 @@ describe('RULE8_bindRepositories', () => { }); }); +describe('RULE10_repositoryTypeMarker', () => { + it('RULE10-001: collects a fixup naming meta.repositoryClass (already set by Rule 8) for every entity', () => { + const meta = fixtureMeta('Days', 'days', []); + RULE8_bindRepositories([meta]); + const fixups = RULE10_repositoryTypeMarker([meta]); + expect(fixups).toEqual([{ className: 'Days', repositoryClassName: 'DaysRepository' }]); + }); + + it('RULE10-002: an entity with no repositoryClass set (Rule 8 never ran) is skipped, not fabricated', () => { + const meta = fixtureMeta('Days', 'days', []); + const fixups = RULE10_repositoryTypeMarker([meta]); + expect(fixups).toEqual([]); + }); +}); + describe('RULE9_addImplicitUniqueConstraints', () => { it('RULE9-001: a table with a matching implicit-unique entry gets a uniques: block referencing the columns as properties — a plain (non-FK) column keeps its own name', () => { const userId = fixtureProp({ name: 'user_id', primary: false }); @@ -746,6 +768,44 @@ describe('stripHiddenTypeAnnotation', () => { }); }); +describe('injectRepositoryTypeMarker', () => { + it('TEXT-REPOMARKER-001: inserts the marker as the FIRST class member and adds a value import', () => { + const source = "import { defineEntity, p } from '@mikro-orm/core';\n\nexport class X {\n id!: number;\n}\n"; + const out = injectRepositoryTypeMarker(source, [{ className: 'X', repositoryClassName: 'XRepository' }]); + expect(out).toContain('export class X {\n [EntityRepositoryType]?: XRepository;\n id!: number;\n'); + expect(out).toContain("import { EntityRepositoryType, defineEntity, p } from '@mikro-orm/core';"); + }); + + it('TEXT-REPOMARKER-002: lands before an existing [PrimaryKeyProp] marker, not after it', () => { + const source = + "import { PrimaryKeyProp, defineEntity, p } from '@mikro-orm/core';\n\n" + + "export class AppSettings {\n [PrimaryKeyProp]?: 'key';\n key?: string | null;\n}\n"; + const out = injectRepositoryTypeMarker(source, [{ className: 'AppSettings', repositoryClassName: 'AppSettingsRepository' }]); + const markerIndex = out.indexOf('[EntityRepositoryType]'); + const pkIndex = out.indexOf('[PrimaryKeyProp]'); + expect(markerIndex).toBeGreaterThan(-1); + expect(markerIndex).toBeLessThan(pkIndex); + }); + + it('TEXT-REPOMARKER-003: re-sorts the import line the same way the generator itself would (case-sensitive, type prefix ignored for ordering)', () => { + const source = "import { Collection, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core';\n\nexport class Users {\n id!: number;\n}\n"; + const out = injectRepositoryTypeMarker(source, [{ className: 'Users', repositoryClassName: 'UsersRepository' }]); + expect(out).toContain("import { Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p } from '@mikro-orm/core';"); + }); + + it('TEXT-REPOMARKER-004: throws, naming the class, if "export class X {" cannot be found (renderer shape changed)', () => { + const source = "import { defineEntity, p } from '@mikro-orm/core';\n\nexport class Y {\n id!: number;\n}\n"; + expect(() => injectRepositoryTypeMarker(source, [{ className: 'X', repositoryClassName: 'XRepository' }])).toThrow( + /could not find "export class X \{"/, + ); + }); + + it('TEXT-REPOMARKER-005: an empty fixups list is a no-op', () => { + const source = "import { defineEntity, p } from '@mikro-orm/core';\n\nexport class X {\n id!: number;\n}\n"; + expect(injectRepositoryTypeMarker(source, [])).toBe(source); + }); +}); + describe('applyTextPasses', () => { it('TEXT-ALL-001: composes every pass without one undoing another', () => { const source = @@ -760,9 +820,11 @@ describe('applyTextPasses', () => { timestamps: [], jsonColumns: [], retypedScalars: [], + repositoryMarkers: [{ className: 'X', repositoryClassName: 'XRepository' }], }); expect(out).toContain(".joinColumn('country')"); expect(out).not.toContain('& Hidden'); + expect(out).toContain('export class X {\n [EntityRepositoryType]?: XRepository;\n countryRef!: Ref;\n'); }); }); @@ -1101,6 +1163,49 @@ describe('generateEntities — validation diff against the five reference entiti ); }); +/** + * Plan 3b pre-task: Rule 10 end-to-end against the real schema, plus the + * type-level probe the brief asks for — `em.getRepository(Users)` (and + * `t.repo(Users)` from `tests/helpers/test-orm.ts`, whose `repo` already + * returns `GetRepository>`) must resolve to + * `UsersRepository`, not the generic `SqlEntityRepository` fallback. + * `expectTypeOf(...).toEqualTypeOf<...>()` is checked by `tsc` (`typecheck:tests` + * is the actual gate; `expect-type`'s runtime is an intentional no-op) — the + * `toBeInstanceOf` assertion below is the runtime half of the same proof. + */ +describe('generateEntities — repository type marker (Plan 3b pre-task, RULE10)', () => { + it('REPOMARKER-E2E-001: Users.entity.ts declares [EntityRepositoryType] as its first class member, importing it as a value', async () => { + const { files } = await generateEntities(); + const users = files.get('Users.entity.ts'); + expect(users).toBeDefined(); + expect(users).toMatch(/export class Users \{\n {2}\[EntityRepositoryType\]\?: UsersRepository;\n/); + expect(users).toMatch(/^import \{ Collection, EntityRepositoryType, type Opt, type Ref, defineEntity, p \} from '@mikro-orm\/core';$/m); + }, 30_000); + + it('REPOMARKER-E2E-002: em.getRepository(Users) / t.repo(Users) resolve to UsersRepository — no cast needed, real instance at runtime', async () => { + const testDb = createSnapshotTestDb(); + try { + const t = await createTestOrm(testDb); + try { + // Type-level: this assignment only compiles (under typecheck:tests) once + // GetRepository> resolves to UsersRepository + // via the [EntityRepositoryType] marker — the generic EntityRepository + // fallback would not be assignable to UsersRepository. + const repo: UsersRepository = t.em.getRepository(Users); + expectTypeOf(repo).toEqualTypeOf(); + expectTypeOf(t.repo(Users)).toEqualTypeOf(); + expectTypeOf(t.repo(Users)).not.toEqualTypeOf>(); + // Runtime: the repository instance really is a UsersRepository. + expect(t.repo(Users)).toBeInstanceOf(UsersRepository); + } finally { + await t.close(); + } + } finally { + testDb.close(); + } + }); +}); + describe('PENDING_ENTITIES ratchet (I7)', () => { it("PENDING-ENTITIES-001: stays accurate — none of them may already have an entity file", () => { const failures: string[] = []; diff --git a/server/tests/unit/db/repositories/Addons.repository.test.ts b/server/tests/unit/db/repositories/Addons.repository.test.ts index 4c6b05bdb..9eb3d506f 100644 --- a/server/tests/unit/db/repositories/Addons.repository.test.ts +++ b/server/tests/unit/db/repositories/Addons.repository.test.ts @@ -11,7 +11,7 @@ let addons: AddonsRepository; beforeAll(async () => { t = await createTestOrm(testDb); - addons = t.repo(Addons) as AddonsRepository; + addons = t.repo(Addons); }); beforeEach(() => { resetTestDb(testDb); diff --git a/server/tests/unit/db/repositories/AppSettings.repository.test.ts b/server/tests/unit/db/repositories/AppSettings.repository.test.ts index 5d5fdfae5..2573e71b0 100644 --- a/server/tests/unit/db/repositories/AppSettings.repository.test.ts +++ b/server/tests/unit/db/repositories/AppSettings.repository.test.ts @@ -11,7 +11,7 @@ let appSettings: AppSettingsRepository; beforeAll(async () => { t = await createTestOrm(testDb); - appSettings = t.repo(AppSettings) as AppSettingsRepository; + appSettings = t.repo(AppSettings); }); beforeEach(() => { resetTestDb(testDb); t.clear(); }); afterAll(async () => { await t.close(); testDb.close(); }); diff --git a/server/tests/unit/db/repositories/AuditLog.repository.test.ts b/server/tests/unit/db/repositories/AuditLog.repository.test.ts index e5825396a..e0640d5cb 100644 --- a/server/tests/unit/db/repositories/AuditLog.repository.test.ts +++ b/server/tests/unit/db/repositories/AuditLog.repository.test.ts @@ -14,7 +14,7 @@ let auditLog: AuditLogRepository; beforeAll(async () => { t = await createTestOrm(testDb); - auditLog = t.repo(AuditLog) as AuditLogRepository; + auditLog = t.repo(AuditLog); }); beforeEach(() => { resetTestDb(testDb); t.clear(); }); afterAll(async () => { await t.close(); testDb.close(); }); diff --git a/server/tests/unit/db/repositories/Categories.repository.test.ts b/server/tests/unit/db/repositories/Categories.repository.test.ts index f84e14606..154a7ad03 100644 --- a/server/tests/unit/db/repositories/Categories.repository.test.ts +++ b/server/tests/unit/db/repositories/Categories.repository.test.ts @@ -12,7 +12,7 @@ let categories: CategoriesRepository; beforeAll(async () => { t = await createTestOrm(testDb); - categories = t.repo(Categories) as CategoriesRepository; + categories = t.repo(Categories); }); // `categories` is a KEEP_TABLES table (tests/helpers/test-db.ts): resetTestDb // never clears it and re-seeds the ten defaults by name, so rows created by diff --git a/server/tests/unit/db/repositories/DayNotes.repository.test.ts b/server/tests/unit/db/repositories/DayNotes.repository.test.ts index 85d63d15e..4b1d9d89a 100644 --- a/server/tests/unit/db/repositories/DayNotes.repository.test.ts +++ b/server/tests/unit/db/repositories/DayNotes.repository.test.ts @@ -13,7 +13,7 @@ let notes: DayNotesRepository; beforeAll(async () => { t = await createTestOrm(testDb); - notes = t.repo(DayNotes) as DayNotesRepository; + notes = t.repo(DayNotes); }); beforeEach(() => { resetTestDb(testDb); t.clear(); }); afterAll(async () => { await t.close(); testDb.close(); }); diff --git a/server/tests/unit/db/repositories/Days.repository.test.ts b/server/tests/unit/db/repositories/Days.repository.test.ts index 8dc223de8..6e1a855d3 100644 --- a/server/tests/unit/db/repositories/Days.repository.test.ts +++ b/server/tests/unit/db/repositories/Days.repository.test.ts @@ -12,7 +12,7 @@ let days: DaysRepository; beforeAll(async () => { t = await createTestOrm(testDb); - days = t.repo(Days) as DaysRepository; + days = t.repo(Days); }); beforeEach(() => { resetTestDb(testDb); t.clear(); }); afterAll(async () => { await t.close(); testDb.close(); }); diff --git a/server/tests/unit/db/repositories/PhotoProviderFields.repository.test.ts b/server/tests/unit/db/repositories/PhotoProviderFields.repository.test.ts index 654a3619e..6031de6bb 100644 --- a/server/tests/unit/db/repositories/PhotoProviderFields.repository.test.ts +++ b/server/tests/unit/db/repositories/PhotoProviderFields.repository.test.ts @@ -11,7 +11,7 @@ let fields: PhotoProviderFieldsRepository; beforeAll(async () => { t = await createTestOrm(testDb); - fields = t.repo(PhotoProviderFields) as PhotoProviderFieldsRepository; + fields = t.repo(PhotoProviderFields); }); beforeEach(() => { resetTestDb(testDb); diff --git a/server/tests/unit/db/repositories/PhotoProviders.repository.test.ts b/server/tests/unit/db/repositories/PhotoProviders.repository.test.ts index 23753853c..9ccea942f 100644 --- a/server/tests/unit/db/repositories/PhotoProviders.repository.test.ts +++ b/server/tests/unit/db/repositories/PhotoProviders.repository.test.ts @@ -11,7 +11,7 @@ let photoProviders: PhotoProvidersRepository; beforeAll(async () => { t = await createTestOrm(testDb); - photoProviders = t.repo(PhotoProviders) as PhotoProvidersRepository; + photoProviders = t.repo(PhotoProviders); }); beforeEach(() => { resetTestDb(testDb); diff --git a/server/tests/unit/db/repositories/Settings.repository.test.ts b/server/tests/unit/db/repositories/Settings.repository.test.ts index d926e506f..1d4999553 100644 --- a/server/tests/unit/db/repositories/Settings.repository.test.ts +++ b/server/tests/unit/db/repositories/Settings.repository.test.ts @@ -14,7 +14,7 @@ let otherUser: TestUser; beforeAll(async () => { t = await createTestOrm(testDb); - settings = t.repo(Settings) as SettingsRepository; + settings = t.repo(Settings); }); beforeEach(() => { resetTestDb(testDb); diff --git a/server/tests/unit/db/repositories/Tags.repository.test.ts b/server/tests/unit/db/repositories/Tags.repository.test.ts index 8817e5a1a..3df590a40 100644 --- a/server/tests/unit/db/repositories/Tags.repository.test.ts +++ b/server/tests/unit/db/repositories/Tags.repository.test.ts @@ -12,7 +12,7 @@ let tags: TagsRepository; beforeAll(async () => { t = await createTestOrm(testDb); - tags = t.repo(Tags) as TagsRepository; + tags = t.repo(Tags); }); beforeEach(() => { resetTestDb(testDb); t.clear(); }); afterAll(async () => { await t.close(); testDb.close(); }); diff --git a/server/tests/unit/db/repositories/Trips.repository.test.ts b/server/tests/unit/db/repositories/Trips.repository.test.ts index 2b6fb8efc..929256094 100644 --- a/server/tests/unit/db/repositories/Trips.repository.test.ts +++ b/server/tests/unit/db/repositories/Trips.repository.test.ts @@ -12,7 +12,7 @@ let trips: TripsRepository; beforeAll(async () => { t = await createTestOrm(testDb); - trips = t.repo(Trips) as TripsRepository; + trips = t.repo(Trips); }); beforeEach(() => { resetTestDb(testDb); t.clear(); }); afterAll(async () => { await t.close(); testDb.close(); }); diff --git a/server/tests/unit/db/repositories/Users.repository.test.ts b/server/tests/unit/db/repositories/Users.repository.test.ts index 1acdcb732..bd4aa529b 100644 --- a/server/tests/unit/db/repositories/Users.repository.test.ts +++ b/server/tests/unit/db/repositories/Users.repository.test.ts @@ -12,7 +12,7 @@ let users: UsersRepository; beforeAll(async () => { t = await createTestOrm(testDb); - users = t.repo(Users) as UsersRepository; + users = t.repo(Users); }); beforeEach(() => { resetTestDb(testDb); t.clear(); }); afterAll(async () => { await t.close(); testDb.close(); }); diff --git a/server/tests/unit/db/repositories/_shared/owned-lookup.test.ts b/server/tests/unit/db/repositories/_shared/owned-lookup.test.ts index 146b92d49..b28592fdb 100644 --- a/server/tests/unit/db/repositories/_shared/owned-lookup.test.ts +++ b/server/tests/unit/db/repositories/_shared/owned-lookup.test.ts @@ -13,7 +13,7 @@ let tags: TagsRepository; beforeAll(async () => { t = await createTestOrm(testDb); - tags = t.repo(Tags) as TagsRepository; + tags = t.repo(Tags); }); beforeEach(() => { resetTestDb(testDb); t.clear(); }); afterAll(async () => { await t.close(); testDb.close(); }); diff --git a/server/tests/unit/nest/addons.service.test.ts b/server/tests/unit/nest/addons.service.test.ts index b3d27f8d9..31cebb91f 100644 --- a/server/tests/unit/nest/addons.service.test.ts +++ b/server/tests/unit/nest/addons.service.test.ts @@ -151,11 +151,11 @@ function rawAppSetting(key: string): { key: string; value: string | null } | und beforeAll(async () => { t = await createTestOrm(testDb); - addonsRepo = t.repo(Addons) as AddonsRepository; - photoProvidersRepo = t.repo(PhotoProviders) as PhotoProvidersRepository; - photoProviderFieldsRepo = t.repo(PhotoProviderFields) as PhotoProviderFieldsRepository; - appSettingsRepo = t.repo(AppSettings) as AppSettingsRepository; - usersRepo = t.repo(Users) as UsersRepository; + addonsRepo = t.repo(Addons); + photoProvidersRepo = t.repo(PhotoProviders); + photoProviderFieldsRepo = t.repo(PhotoProviderFields); + appSettingsRepo = t.repo(AppSettings); + usersRepo = t.repo(Users); }); beforeEach(() => { diff --git a/server/tests/unit/nest/audit.service.test.ts b/server/tests/unit/nest/audit.service.test.ts index f60ff7f2d..eee71b859 100644 --- a/server/tests/unit/nest/audit.service.test.ts +++ b/server/tests/unit/nest/audit.service.test.ts @@ -46,8 +46,8 @@ beforeAll(async () => { createTables(testDb); runMigrations(testDb); t = await createTestOrm(testDb); - auditLogRepo = t.repo(AuditLog) as AuditLogRepository; - usersRepo = t.repo(Users) as UsersRepository; + auditLogRepo = t.repo(AuditLog); + usersRepo = t.repo(Users); svc = new AuditService(auditLogRepo, usersRepo); }); diff --git a/server/tests/unit/nest/database/unit-of-work.d5.test.ts b/server/tests/unit/nest/database/unit-of-work.d5.test.ts index 658eac91d..14e112d15 100644 --- a/server/tests/unit/nest/database/unit-of-work.d5.test.ts +++ b/server/tests/unit/nest/database/unit-of-work.d5.test.ts @@ -5,7 +5,6 @@ import { resetTestDb } from '../../../helpers/test-db'; import { createTestOrm, type TestOrm } from '../../../helpers/test-orm'; import { createUser } from '../../../helpers/factories'; import { Users } from '../../../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../../../src/db/repositories/Users.repository'; import { UnitOfWork } from '../../../../src/nest/database/unit-of-work'; /** @@ -41,10 +40,10 @@ describe('UnitOfWork transaction resolution (D5)', () => { let forkMatches: boolean | undefined; await uow.transactional(async () => { - const repo = t.repo(Users) as UsersRepository; + const repo = t.repo(Users); globalMatches = repo.getEntityManager().getContext() === TransactionContext.getEntityManager(); - const forkedRepo = t.orm.em.fork().getRepository(Users) as UsersRepository; + const forkedRepo = t.orm.em.fork().getRepository(Users); forkMatches = forkedRepo.getEntityManager().getContext() === TransactionContext.getEntityManager(); }); diff --git a/server/tests/unit/nest/database/unit-of-work.test.ts b/server/tests/unit/nest/database/unit-of-work.test.ts index f62603337..328e12df6 100644 --- a/server/tests/unit/nest/database/unit-of-work.test.ts +++ b/server/tests/unit/nest/database/unit-of-work.test.ts @@ -24,7 +24,7 @@ let days: DaysRepository; beforeAll(async () => { t = await createTestOrm(testDb); uow = new UnitOfWork(t.em); - days = t.repo(Days) as DaysRepository; + days = t.repo(Days); }); beforeEach(() => { resetTestDb(testDb); t.clear(); }); afterAll(async () => { await t.close(); testDb.close(); }); @@ -87,7 +87,7 @@ describe('UnitOfWork.transactional', () => { // A separate fork = a separate acquirer of the connection. It waits on the // ConnectionMutex instead of deadlocking because nothing inside the // transaction waits on it: the writer's own timer resolves regardless. - const reader = t.orm.em.fork().getRepository(Days) as DaysRepository; + const reader = t.orm.em.fork().getRepository(Days); const seen = await reader.listByTrip(trip.id); await tx; expect(seen).toHaveLength(1); diff --git a/server/tests/unit/nest/memories/journey-thumbs.job.test.ts b/server/tests/unit/nest/memories/journey-thumbs.job.test.ts index 7d8484f8c..9dfdef761 100644 --- a/server/tests/unit/nest/memories/journey-thumbs.job.test.ts +++ b/server/tests/unit/nest/memories/journey-thumbs.job.test.ts @@ -20,7 +20,6 @@ import type { ThumbnailService } from '../../../../src/nest/memories/thumbnail.s import { createSnapshotTestDb } from '../../../helpers/db-mock'; import { createTestOrm, type TestOrm } from '../../../helpers/test-orm'; import { Addons } from '../../../../src/db/entities/Addons.entity'; -import type { AddonsRepository } from '../../../../src/db/repositories/Addons.repository'; const testDb = createSnapshotTestDb(); let t: TestOrm; @@ -40,7 +39,7 @@ beforeEach(() => vi.clearAllMocks()); * actually exercises the request-context property the real chain depends on. */ function makeThumbnails(): Pick { - const addonsRepo = t.repo(Addons) as AddonsRepository; + const addonsRepo = t.repo(Addons); return { sweepOrphanThumbs: async () => { await addonsRepo.isEnabled('journey'); diff --git a/server/tests/unit/nest/oauth.service.test.ts b/server/tests/unit/nest/oauth.service.test.ts index 9d0d2c69d..4bd4dfce4 100644 --- a/server/tests/unit/nest/oauth.service.test.ts +++ b/server/tests/unit/nest/oauth.service.test.ts @@ -107,8 +107,8 @@ beforeAll(async () => { createTables(testDb); runMigrations(testDb); t = await createTestOrm(testDb); - auditLogRepo = t.repo(AuditLog) as AuditLogRepository; - usersRepo = t.repo(Users) as UsersRepository; + auditLogRepo = t.repo(AuditLog); + usersRepo = t.repo(Users); svc = new OauthService(dbs, addonsStub, new AuditService(auditLogRepo, usersRepo)); }); diff --git a/server/tests/unit/nest/permissions.service.test.ts b/server/tests/unit/nest/permissions.service.test.ts index 6f0dd3d4d..302affb23 100644 --- a/server/tests/unit/nest/permissions.service.test.ts +++ b/server/tests/unit/nest/permissions.service.test.ts @@ -69,7 +69,7 @@ beforeAll(() => { beforeAll(async () => { t = await createTestOrm(testDb); - appSettings = t.repo(AppSettings) as AppSettingsRepository; + appSettings = t.repo(AppSettings); svc = new PermissionsService(appSettings, await createTestUnitOfWork(testDb)); }); diff --git a/server/tests/unit/nest/settings/instance-api-keys.test.ts b/server/tests/unit/nest/settings/instance-api-keys.test.ts index 10b5ab3c2..69bebd625 100644 --- a/server/tests/unit/nest/settings/instance-api-keys.test.ts +++ b/server/tests/unit/nest/settings/instance-api-keys.test.ts @@ -34,8 +34,8 @@ let users: UsersRepository; beforeAll(async () => { t = await createTestOrm(testDb); - appSettings = t.repo(AppSettings) as AppSettingsRepository; - users = t.repo(Users) as UsersRepository; + appSettings = t.repo(AppSettings); + users = t.repo(Users); }); beforeEach(() => { diff --git a/server/tests/unit/plugins/request-context.test.ts b/server/tests/unit/plugins/request-context.test.ts index e52c6c749..b291b334a 100644 --- a/server/tests/unit/plugins/request-context.test.ts +++ b/server/tests/unit/plugins/request-context.test.ts @@ -41,7 +41,6 @@ import { UnitOfWork } from '../../../src/nest/database/unit-of-work'; import { RpcRateLimiter, DEFAULT_RPC_LIMIT } from '../../../src/nest/plugins/host/rate-limit'; import { createTestOrm, type TestOrm } from '../../helpers/test-orm'; import { AppSettings } from '../../../src/db/entities/AppSettings.entity'; -import type { AppSettingsRepository } from '../../../src/db/repositories/AppSettings.repository'; import type { PluginRpcHost } from '../../../src/nest/plugins/host/rpc-host'; import type { RpcRequest, RpcResponse, RpcError } from '../../../src/nest/plugins/protocol/envelope'; import type { EntityManager } from '@mikro-orm/core'; @@ -69,7 +68,7 @@ let userId: number; beforeAll(async () => { t = await createTestOrm(testDb, { allowGlobalContext: false }); const dbs = new DatabaseService(testDb); - permissions = new PermissionsService(t.repo(AppSettings) as AppSettingsRepository, new UnitOfWork(t.em)); + permissions = new PermissionsService(t.repo(AppSettings), new UnitOfWork(t.em)); guards = new PluginGuards(dbs, permissions, await createTestAddonsService(testDb, dbs)); userId = createUser(testDb, { role: 'user' }).user.id; // An admin has tightened trip_create from its 'everybody' default. diff --git a/server/tests/unit/plugins/settings-isolation.test.ts b/server/tests/unit/plugins/settings-isolation.test.ts index 954d9e51e..f2f248801 100644 --- a/server/tests/unit/plugins/settings-isolation.test.ts +++ b/server/tests/unit/plugins/settings-isolation.test.ts @@ -30,9 +30,7 @@ import { PluginUserSettingsService } from '../../../src/nest/plugins/plugin-user import { parseManifest, ManifestError } from '../../../src/nest/plugins/install/manifest'; import { createTestOrm, type TestOrm } from '../../helpers/test-orm'; import { AuditLog } from '../../../src/db/entities/AuditLog.entity'; -import type { AuditLogRepository } from '../../../src/db/repositories/AuditLog.repository'; import { Users } from '../../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../../src/db/repositories/Users.repository'; /** The host-side settings reads, over the same connection the test seeded. */ const userSettings = () => new PluginUserSettingsService(new DatabaseService(dbConn)); @@ -139,7 +137,7 @@ describe('a plugin channel label is bounded by the host', () => { t = await createTestOrm(dbConn); const rt = new PluginRuntimeService( new DatabaseService(dbConn), - new AuditService(t.repo(AuditLog) as AuditLogRepository, t.repo(Users) as UsersRepository), + new AuditService(t.repo(AuditLog), t.repo(Users)), await createTestAddonsService(dbConn), userSettings(), ); diff --git a/server/tests/unit/services/airtrailTestConnection.test.ts b/server/tests/unit/services/airtrailTestConnection.test.ts index 50b5b6570..a4f4df5ea 100644 --- a/server/tests/unit/services/airtrailTestConnection.test.ts +++ b/server/tests/unit/services/airtrailTestConnection.test.ts @@ -14,9 +14,7 @@ import { DatabaseService } from '../../../src/nest/database/database.service'; import { AuditService } from '../../../src/nest/audit/audit.service'; import { createTestOrm, type TestOrm } from '../../helpers/test-orm'; import { AuditLog } from '../../../src/db/entities/AuditLog.entity'; -import type { AuditLogRepository } from '../../../src/db/repositories/AuditLog.repository'; import { Users } from '../../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../../src/db/repositories/Users.repository'; // The probe is the only call that would leave the process, so the client is a // stub; the credential handling around it runs against the real row. @@ -28,7 +26,7 @@ beforeAll(async () => { t = await createTestOrm(db); svc = new AirtrailService( new DatabaseService(db), - new AuditService(t.repo(AuditLog) as AuditLogRepository, t.repo(Users) as UsersRepository), + new AuditService(t.repo(AuditLog), t.repo(Users)), { listFlights } as unknown as AirtrailClient, ); }); diff --git a/server/tests/unit/services/airtrailWriteback.test.ts b/server/tests/unit/services/airtrailWriteback.test.ts index 9062d2c0c..d8ecce9f2 100644 --- a/server/tests/unit/services/airtrailWriteback.test.ts +++ b/server/tests/unit/services/airtrailWriteback.test.ts @@ -14,9 +14,7 @@ import { DatabaseService } from '../../../src/nest/database/database.service'; import { AuditService } from '../../../src/nest/database/../audit/audit.service'; import { createTestOrm, type TestOrm } from '../../helpers/test-orm'; import { AuditLog } from '../../../src/db/entities/AuditLog.entity'; -import type { AuditLogRepository } from '../../../src/db/repositories/AuditLog.repository'; import { Users } from '../../../src/db/entities/Users.entity'; -import type { UsersRepository } from '../../../src/db/repositories/Users.repository'; // The free functions became methods with the airtrail fold; same SQL, same // behaviour, one instance over the same db handle. @@ -30,7 +28,7 @@ beforeAll(async () => { t = await createTestOrm(db); svc = new AirtrailService( new DatabaseService(db), - new AuditService(t.repo(AuditLog) as AuditLogRepository, t.repo(Users) as UsersRepository), + new AuditService(t.repo(AuditLog), t.repo(Users)), new AirtrailClient(), ); getConnectionSettings = (...args) => svc.getConnectionSettings(...args);