mirror of
https://github.com/immich-app/immich.git
synced 2025-05-24 01:12:58 -04:00
refactor: migrate system metadata to kysely (#15231)
This commit is contained in:
parent
930f979960
commit
cc6a8b0c74
24
server/src/queries/system.metadata.repository.sql
Normal file
24
server/src/queries/system.metadata.repository.sql
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
-- NOTE: This file is auto generated by ./sql-generator
|
||||||
|
|
||||||
|
-- SystemMetadataRepository.get
|
||||||
|
select
|
||||||
|
"value"
|
||||||
|
from
|
||||||
|
"system_metadata"
|
||||||
|
where
|
||||||
|
"key" = $1
|
||||||
|
|
||||||
|
-- SystemMetadataRepository.set
|
||||||
|
insert into
|
||||||
|
"system_metadata" ("key", "value")
|
||||||
|
values
|
||||||
|
($1, $2)
|
||||||
|
on conflict ("key") do
|
||||||
|
update
|
||||||
|
set
|
||||||
|
"value" = $3
|
||||||
|
|
||||||
|
-- SystemMetadataRepository.delete
|
||||||
|
delete from "system_metadata"
|
||||||
|
where
|
||||||
|
"key" = $1
|
@ -1,31 +1,44 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { Insertable, Kysely } from 'kysely';
|
||||||
|
import { InjectKysely } from 'nestjs-kysely';
|
||||||
import { readFile } from 'node:fs/promises';
|
import { readFile } from 'node:fs/promises';
|
||||||
import { SystemMetadata, SystemMetadataEntity } from 'src/entities/system-metadata.entity';
|
import { DB, SystemMetadata as DbSystemMetadata } from 'src/db';
|
||||||
|
import { GenerateSql } from 'src/decorators';
|
||||||
|
import { SystemMetadata } from 'src/entities/system-metadata.entity';
|
||||||
import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface';
|
import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface';
|
||||||
import { Repository } from 'typeorm';
|
|
||||||
|
type Upsert = Insertable<DbSystemMetadata>;
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SystemMetadataRepository implements ISystemMetadataRepository {
|
export class SystemMetadataRepository implements ISystemMetadataRepository {
|
||||||
constructor(
|
constructor(@InjectKysely() private db: Kysely<DB>) {}
|
||||||
@InjectRepository(SystemMetadataEntity)
|
|
||||||
private repository: Repository<SystemMetadataEntity>,
|
|
||||||
) {}
|
|
||||||
|
|
||||||
|
@GenerateSql({ params: ['metadata_key'] })
|
||||||
async get<T extends keyof SystemMetadata>(key: T): Promise<SystemMetadata[T] | null> {
|
async get<T extends keyof SystemMetadata>(key: T): Promise<SystemMetadata[T] | null> {
|
||||||
const metadata = await this.repository.findOne({ where: { key } });
|
const metadata = await this.db
|
||||||
|
.selectFrom('system_metadata')
|
||||||
|
.select('value')
|
||||||
|
.where('key', '=', key)
|
||||||
|
.executeTakeFirst();
|
||||||
|
|
||||||
if (!metadata) {
|
if (!metadata) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return metadata.value as SystemMetadata[T];
|
return metadata.value as SystemMetadata[T];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GenerateSql({ params: ['metadata_key', { foo: 'bar' }] })
|
||||||
async set<T extends keyof SystemMetadata>(key: T, value: SystemMetadata[T]): Promise<void> {
|
async set<T extends keyof SystemMetadata>(key: T, value: SystemMetadata[T]): Promise<void> {
|
||||||
await this.repository.upsert({ key, value }, { conflictPaths: { key: true } });
|
await this.db
|
||||||
|
.insertInto('system_metadata')
|
||||||
|
.values({ key, value } as Upsert)
|
||||||
|
.onConflict((oc) => oc.columns(['key']).doUpdateSet({ value } as Upsert))
|
||||||
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GenerateSql({ params: ['metadata_key'] })
|
||||||
async delete<T extends keyof SystemMetadata>(key: T): Promise<void> {
|
async delete<T extends keyof SystemMetadata>(key: T): Promise<void> {
|
||||||
await this.repository.delete({ key });
|
await this.db.deleteFrom('system_metadata').where('key', '=', key).execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
readFile(filename: string): Promise<string> {
|
readFile(filename: string): Promise<string> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user