mirror of
https://github.com/standardnotes/server
synced 2026-10-21 06:03:37 -04:00
99 lines
2.8 KiB
TypeScript
99 lines
2.8 KiB
TypeScript
import { SettingName } from '@standardnotes/settings'
|
|
import { ReadStream } from 'fs'
|
|
import { inject, injectable } from 'inversify'
|
|
import { Repository } from 'typeorm'
|
|
import TYPES from '../../Bootstrap/Types'
|
|
import { Setting } from '../../Domain/Setting/Setting'
|
|
import { SettingRepositoryInterface } from '../../Domain/Setting/SettingRepositoryInterface'
|
|
import { DeleteSettingDto } from '../../Domain/UseCase/DeleteSetting/DeleteSettingDto'
|
|
|
|
@injectable()
|
|
export class MySQLSettingRepository implements SettingRepositoryInterface {
|
|
constructor(
|
|
@inject(TYPES.ORMSettingRepository)
|
|
private ormRepository: Repository<Setting>,
|
|
) {}
|
|
|
|
async save(setting: Setting): Promise<Setting> {
|
|
return this.ormRepository.save(setting)
|
|
}
|
|
|
|
async findOneByUuidAndNames(uuid: string, names: SettingName[]): Promise<Setting | null> {
|
|
return this.ormRepository
|
|
.createQueryBuilder('setting')
|
|
.where('setting.uuid = :uuid AND setting.name IN (:...names)', {
|
|
names,
|
|
uuid,
|
|
})
|
|
.getOne()
|
|
}
|
|
|
|
async streamAllByNameAndValue(name: SettingName, value: string): Promise<ReadStream> {
|
|
return this.ormRepository
|
|
.createQueryBuilder('setting')
|
|
.where('setting.name = :name AND setting.value = :value', {
|
|
name,
|
|
value,
|
|
})
|
|
.orderBy('updated_at', 'ASC')
|
|
.stream()
|
|
}
|
|
|
|
async findOneByUuid(uuid: string): Promise<Setting | null> {
|
|
return this.ormRepository
|
|
.createQueryBuilder('setting')
|
|
.where('setting.uuid = :uuid', {
|
|
uuid,
|
|
})
|
|
.getOne()
|
|
}
|
|
|
|
async findOneByNameAndUserUuid(name: string, userUuid: string): Promise<Setting | null> {
|
|
return this.ormRepository
|
|
.createQueryBuilder('setting')
|
|
.where('setting.name = :name AND setting.user_uuid = :user_uuid', {
|
|
name,
|
|
user_uuid: userUuid,
|
|
})
|
|
.getOne()
|
|
}
|
|
|
|
async findLastByNameAndUserUuid(name: string, userUuid: string): Promise<Setting | null> {
|
|
const settings = await this.ormRepository
|
|
.createQueryBuilder('setting')
|
|
.where('setting.name = :name AND setting.user_uuid = :user_uuid', {
|
|
name,
|
|
user_uuid: userUuid,
|
|
})
|
|
.orderBy('updated_at', 'DESC')
|
|
.limit(1)
|
|
.getMany()
|
|
|
|
if (settings.length === 0) {
|
|
return null
|
|
}
|
|
|
|
return settings.pop() as Setting
|
|
}
|
|
|
|
async findAllByUserUuid(userUuid: string): Promise<Setting[]> {
|
|
return this.ormRepository
|
|
.createQueryBuilder('setting')
|
|
.where('setting.user_uuid = :user_uuid', {
|
|
user_uuid: userUuid,
|
|
})
|
|
.getMany()
|
|
}
|
|
|
|
async deleteByUserUuid({ settingName, userUuid }: DeleteSettingDto): Promise<void> {
|
|
await this.ormRepository
|
|
.createQueryBuilder('setting')
|
|
.delete()
|
|
.where('name = :name AND user_uuid = :user_uuid', {
|
|
user_uuid: userUuid,
|
|
name: settingName,
|
|
})
|
|
.execute()
|
|
}
|
|
}
|