Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | 1x 1x 1x 1x 1x 1x 1x 1x 105x 105x 105x 105x 105x 105x 105x 105x 105x 105x 105x 105x 105x 105x | import {Getter, inject} from '@loopback/core';
import {BelongsToAccessor, HasManyRepositoryFactory, HasOneRepositoryFactory, repository} from '@loopback/repository';
import {CompanyRepository} from '.';
import {LogChainDataSource} from '../datasources';
import {Company, Role, Status, TradeLane, UserActivity} from '../models';
import {BaseCrudRepository} from './base-crud.repository.base';
import {RoleRepository} from './role.repository';
import {TradeLaneRepository} from './trade-lane.repository';
import {UserActivityRepository} from './user-activity.repository';
import {UserView, UserViewRelations, UserViewWithRelations} from '@logchain/models/views';
import {Constants} from '@logchain/configs';
export class UserViewRepository extends BaseCrudRepository<UserView, typeof UserView.prototype.id, UserViewRelations> {
public readonly creator: BelongsToAccessor<UserView, typeof UserView.prototype.id>;
public readonly modifier: BelongsToAccessor<UserView, typeof UserView.prototype.id>;
public readonly company: BelongsToAccessor<Company, typeof UserView.prototype.id>;
public readonly activities: HasManyRepositoryFactory<UserActivity, typeof UserView.prototype.id>;
public readonly tradelanes: HasManyRepositoryFactory<TradeLane, typeof UserView.prototype.id>;
public readonly role: HasOneRepositoryFactory<Role, typeof Role.prototype.id>;
constructor(
@inject('datasources.logchain') dataSource: LogChainDataSource,
@repository.getter('UserActivityRepository')
protected activities_repo_getter: Getter<UserActivityRepository>,
@repository.getter('TradeLaneRepository')
protected tradelane_repo_getter: Getter<TradeLaneRepository>,
@repository.getter('CompanyRepository')
protected comp_repo_getter: Getter<CompanyRepository>,
@repository.getter('RoleRepository')
protected role_repo_getter: Getter<RoleRepository>,
) {
super(UserView, dataSource);
this.creator = this.createBelongsToAccessor('creator', Getter.fromValue(this));
this.modifier = this.createBelongsToAccessor('modifier', Getter.fromValue(this));
this.company = this.createBelongsToAccessor('company', comp_repo_getter);
this.activities = this.createHasManyRepositoryFactoryFor('activities', activities_repo_getter);
this.registerInclusionResolver('activities', this.activities.inclusionResolver);
this.tradelanes = this.createHasManyRepositoryFactoryFor('tradelanes', tradelane_repo_getter);
this.registerInclusionResolver('tradelanes', this.tradelanes.inclusionResolver);
this.role = this.createHasOneRepositoryFactoryFor('role', role_repo_getter);
this.registerInclusionResolver('role', this.role.inclusionResolver);
}
/**
* Find user by sub.
* @param sub The sub of user
*/
async findBySub(sub: string): Promise<UserViewWithRelations | null> {
return this.findOne({
include: [
{
relation: 'company',
scope: {
fields: {
id: true,
identifier: true,
name: true,
timezone: true,
status: true,
licences: true,
},
include: [
{
relation: 'licences',
scope: {
order: ['created_date DESC'],
limit: 1,
},
}
],
},
},
],
where: {
sub,
},
});
}
/**
* Find users by role rights.
* @param feature_id The feature id.
* @param right The right access.
*/
async findByRoleRights(company_id: number, feature_id: string, right: string): Promise<UserView[]> {
if (!Object.values(Constants.AccessScope).includes(right)) {
throw new Error(`Right is invalid ${right}`);
}
const logchain_admins = await this.execute(
`SELECT
name,
contact_email
FROM
role_rights AS rr
INNER JOIN users_view AS u ON rr.role_id = u.role_id
WHERE
feature_id = $1
AND rr."${right}" = $2
AND u.status = $3
AND u.company_id = $4;`,
[feature_id, Constants.Access.Allowed, Status.User.Active, company_id],
);
return logchain_admins as UserView[];
}
}
|