2018-08-11 19:28:19 +03:00
|
|
|
import { EntityRepository, FindOneOptions, Repository } from "typeorm";
|
2018-07-20 00:03:11 -06:00
|
|
|
|
2018-08-31 21:59:06 -06:00
|
|
|
import { User } from "@server/entities";
|
2018-07-20 00:03:11 -06:00
|
|
|
|
2018-08-11 17:00:53 +03:00
|
|
|
export interface FindUserOptions {
|
2018-09-02 02:57:55 -06:00
|
|
|
devices: boolean;
|
2018-08-11 17:00:53 +03:00
|
|
|
}
|
|
|
|
|
2018-09-02 02:57:55 -06:00
|
|
|
function applyDefaultOptions(
|
|
|
|
options?: Partial<FindUserOptions>
|
|
|
|
): FindOneOptions<User> {
|
|
|
|
const opts: FindUserOptions = { devices: false, ...options };
|
|
|
|
const relations = [opts.devices && "devices"].filter(Boolean) as string[];
|
|
|
|
return { relations };
|
2018-08-11 17:00:53 +03:00
|
|
|
}
|
|
|
|
|
2018-07-20 00:03:11 -06:00
|
|
|
@EntityRepository(User)
|
|
|
|
export class UserRepository extends Repository<User> {
|
2018-09-02 02:57:55 -06:00
|
|
|
findAll(options?: Partial<FindUserOptions>) {
|
|
|
|
const opts = applyDefaultOptions(options);
|
|
|
|
return super.find(opts);
|
|
|
|
}
|
2018-08-12 11:55:15 +03:00
|
|
|
|
2018-09-02 02:57:55 -06:00
|
|
|
findById(id: number, options?: Partial<FindUserOptions>) {
|
|
|
|
const opts = applyDefaultOptions(options);
|
|
|
|
return super.findOne(id, opts);
|
|
|
|
}
|
2018-08-11 17:00:53 +03:00
|
|
|
|
2018-09-02 02:57:55 -06:00
|
|
|
findByUsername(username: string, options?: Partial<FindUserOptions>) {
|
|
|
|
const opts = applyDefaultOptions(options);
|
|
|
|
return this.findOne({ username }, opts);
|
|
|
|
}
|
2018-07-20 00:03:11 -06:00
|
|
|
}
|