diff --git a/server/src/dtos/search.dto.ts b/server/src/dtos/search.dto.ts index e0b5c9b7793..67ab059e115 100644 --- a/server/src/dtos/search.dto.ts +++ b/server/src/dtos/search.dto.ts @@ -4,8 +4,8 @@ import { IsEnum, IsInt, IsNotEmpty, IsString, Max, Min } from 'class-validator'; import { PropertyLifecycle } from 'src/decorators'; import { AlbumResponseDto } from 'src/dtos/album.dto'; import { AssetResponseDto } from 'src/dtos/asset-response.dto'; -import { GeodataPlacesEntity } from 'src/entities/geodata-places.entity'; import { AssetOrder, AssetType } from 'src/enum'; +import { SearchPlacesItem } from 'src/types'; import { Optional, ValidateBoolean, ValidateDate, ValidateUUID } from 'src/validation'; class BaseSearchDto { @@ -226,15 +226,16 @@ export class PlacesResponseDto { admin2name?: string; } -export function mapPlaces(place: GeodataPlacesEntity): PlacesResponseDto { +export function mapPlaces(place: SearchPlacesItem): PlacesResponseDto { return { name: place.name, latitude: place.latitude, longitude: place.longitude, - admin1name: place.admin1Name, - admin2name: place.admin2Name, + admin1name: place.admin1Name ?? undefined, + admin2name: place.admin2Name ?? undefined, }; } + export enum SearchSuggestionType { COUNTRY = 'country', STATE = 'state', diff --git a/server/src/entities/geodata-places.entity.ts b/server/src/entities/geodata-places.entity.ts deleted file mode 100644 index aad6c38dda8..00000000000 --- a/server/src/entities/geodata-places.entity.ts +++ /dev/null @@ -1,13 +0,0 @@ -export class GeodataPlacesEntity { - id!: number; - name!: string; - longitude!: number; - latitude!: number; - countryCode!: string; - admin1Code!: string; - admin2Code!: string; - admin1Name!: string; - admin2Name!: string; - alternateNames!: string; - modificationDate!: Date; -} diff --git a/server/src/repositories/search.repository.ts b/server/src/repositories/search.repository.ts index 954ab0fe5af..736eb6dcc18 100644 --- a/server/src/repositories/search.repository.ts +++ b/server/src/repositories/search.repository.ts @@ -5,7 +5,6 @@ import { randomUUID } from 'node:crypto'; import { DB } from 'src/db'; import { DummyValue, GenerateSql } from 'src/decorators'; import { AssetEntity, searchAssetBuilder } from 'src/entities/asset.entity'; -import { GeodataPlacesEntity } from 'src/entities/geodata-places.entity'; import { AssetStatus, AssetType } from 'src/enum'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { anyUuid, asUuid } from 'src/utils/database'; @@ -372,7 +371,7 @@ export class SearchRepository { } @GenerateSql({ params: [DummyValue.STRING] }) - searchPlaces(placeName: string): Promise { + searchPlaces(placeName: string) { return this.db .selectFrom('geodata_places') .selectAll() @@ -395,7 +394,7 @@ export class SearchRepository { `, ) .limit(20) - .execute() as Promise; + .execute(); } @GenerateSql({ params: [[DummyValue.UUID]] }) diff --git a/server/src/types.ts b/server/src/types.ts index 623b0fece0f..6620621da87 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -16,6 +16,7 @@ import { import { ActivityRepository } from 'src/repositories/activity.repository'; import { ApiKeyRepository } from 'src/repositories/api-key.repository'; import { MemoryRepository } from 'src/repositories/memory.repository'; +import { SearchRepository } from 'src/repositories/search.repository'; import { SessionRepository } from 'src/repositories/session.repository'; export type DeepPartial = T extends object ? { [K in keyof T]?: DeepPartial } : T; @@ -25,12 +26,15 @@ export type RepositoryInterface = Pick; type IActivityRepository = RepositoryInterface; type IApiKeyRepository = RepositoryInterface; type IMemoryRepository = RepositoryInterface; +type ISearchRepository = RepositoryInterface; type ISessionRepository = RepositoryInterface; export type ActivityItem = | Awaited> | Awaited>[0]; +export type SearchPlacesItem = Awaited>[0]; + export type ApiKeyItem = | Awaited> | NonNullable>>