sprinklers3/server/repositories/UserRepository.ts

50 lines
1.5 KiB
TypeScript
Raw Normal View History

2018-09-04 14:50:08 -06:00
import { EntityRepository, FindConditions, FindOneOptions, Repository } from "typeorm";
2018-08-31 21:59:06 -06:00
import { User } from "@server/entities";
2018-09-04 14:46:26 -06:00
export interface FindUserOptions extends FindOneOptions<User> {
2018-09-02 02:57:55 -06:00
devices: boolean;
}
2018-09-04 14:46:26 -06:00
function computeOptions(
2018-09-02 02:57:55 -06:00
options?: Partial<FindUserOptions>
): FindOneOptions<User> {
const opts: FindUserOptions = { devices: false, ...options };
2018-09-04 14:46:26 -06:00
const { devices, ...rest } = opts;
const relations = [devices && "devices"].filter(Boolean) as string[];
return { relations, ...rest };
}
@EntityRepository(User)
export class UserRepository extends Repository<User> {
2018-09-02 02:57:55 -06:00
findAll(options?: Partial<FindUserOptions>) {
2018-09-04 14:46:26 -06:00
const opts = computeOptions(options);
2018-09-02 02:57:55 -06:00
return super.find(opts);
}
2018-08-12 11:55:15 +03:00
2018-09-04 14:46:26 -06:00
findOneUser(conditions: FindConditions<User>, options?: Partial<FindUserOptions>) {
const opts = computeOptions(options);
return super.findOne(conditions, opts);
}
2018-09-02 02:57:55 -06:00
findById(id: number, options?: Partial<FindUserOptions>) {
2018-09-04 14:46:26 -06:00
return this.findOneUser({ id }, options);
2018-09-02 02:57:55 -06:00
}
2018-09-02 02:57:55 -06:00
findByUsername(username: string, options?: Partial<FindUserOptions>) {
2018-09-04 14:46:26 -06:00
return this.findOneUser({ username }, options);
2018-09-02 02:57:55 -06:00
}
2018-09-04 14:46:26 -06:00
// async checkAndSave(entity: User): Promise<User> {
// return this.manager.transaction(manager => {
// let query = manager.createQueryBuilder<User>(User, "user", manager.queryRunner!);
// if (entity.id != null) {
// query = query.where("user.id <> :id", { id: entity.id })
// }
// query
// return manager.save(entity);
// });
// }
}