sprinklers3/server/repositories/SprinklersDeviceRepository.ts

57 lines
1.7 KiB
TypeScript
Raw Normal View History

2018-09-04 14:46:26 -06:00
import { DeepPartial, EntityRepository, Repository, SaveOptions } from "typeorm";
2018-08-31 21:59:06 -06:00
import { SprinklersDevice, User } from "@server/entities";
2018-09-04 14:46:26 -06:00
import UniqueConstraintError from "@server/UniqueConstraintError";
@EntityRepository(SprinklersDevice)
export class SprinklersDeviceRepository extends Repository<SprinklersDevice> {
2018-09-02 02:57:55 -06:00
findByName(name: string) {
return this.findOne({ name });
}
2018-09-02 02:57:55 -06:00
async userHasAccess(userId: number, deviceId: number): Promise<boolean> {
const count = await this.manager
.createQueryBuilder(User, "user")
.innerJoinAndSelect(
"user.devices",
"sprinklers_device",
"user.id = :userId AND sprinklers_device.id = :deviceId",
{ userId, deviceId }
)
.getCount();
return count > 0;
}
2018-09-02 02:57:55 -06:00
async findUserDevice(
userId: number,
deviceId: number
): Promise<SprinklersDevice | null> {
const user = await this.manager
.createQueryBuilder(User, "user")
.innerJoinAndSelect(
"user.devices",
"sprinklers_device",
"user.id = :userId AND sprinklers_device.id = :deviceId",
{ userId, deviceId }
)
.getOne();
if (!user) {
return null;
}
2018-09-02 02:57:55 -06:00
return user.devices![0];
}
2018-09-04 14:46:26 -06:00
save<T extends DeepPartial<SprinklersDevice>>(entities: T[], options?: SaveOptions): Promise<T[]>;
save<T extends DeepPartial<SprinklersDevice>>(entity: T, options?: SaveOptions): Promise<T>;
async save(entity: any, options?: SaveOptions): Promise<any> {
try {
return await super.save(entity, options);
} catch (e) {
if (UniqueConstraintError.is(e)) {
throw new UniqueConstraintError(e);
}
throw e;
}
}
}