rez_core 2.0.41 → 2.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module/enterprise/controller/organization.controller.d.ts +3 -0
- package/dist/module/enterprise/controller/organization.controller.js +14 -0
- package/dist/module/enterprise/controller/organization.controller.js.map +1 -1
- package/dist/module/enterprise/enterprise.module.js +10 -1
- package/dist/module/enterprise/enterprise.module.js.map +1 -1
- package/dist/module/enterprise/entity/school.entity.js +11 -0
- package/dist/module/enterprise/entity/school.entity.js.map +1 -1
- package/dist/module/enterprise/repository/brand.repository.d.ts +8 -0
- package/dist/module/enterprise/repository/brand.repository.js +39 -0
- package/dist/module/enterprise/repository/brand.repository.js.map +1 -0
- package/dist/module/enterprise/repository/school.repository.d.ts +10 -0
- package/dist/module/enterprise/repository/school.repository.js +146 -0
- package/dist/module/enterprise/repository/school.repository.js.map +1 -0
- package/dist/module/enterprise/service/organization.service.d.ts +8 -1
- package/dist/module/enterprise/service/organization.service.js +15 -2
- package/dist/module/enterprise/service/organization.service.js.map +1 -1
- package/dist/module/meta/controller/app-master.controller.d.ts +9 -0
- package/dist/module/meta/controller/app-master.controller.js +51 -0
- package/dist/module/meta/controller/app-master.controller.js.map +1 -0
- package/dist/module/meta/controller/entity.controller.js +0 -5
- package/dist/module/meta/controller/entity.controller.js.map +1 -1
- package/dist/module/meta/entity/app-master.entity.d.ts +6 -1
- package/dist/module/meta/entity/app-master.entity.js +26 -6
- package/dist/module/meta/entity/app-master.entity.js.map +1 -1
- package/dist/module/meta/entity.module.js +13 -0
- package/dist/module/meta/entity.module.js.map +1 -1
- package/dist/module/meta/repository/app-master.repository.d.ts +7 -0
- package/dist/module/meta/repository/app-master.repository.js +36 -0
- package/dist/module/meta/repository/app-master.repository.js.map +1 -0
- package/dist/module/meta/service/app-master.service.d.ts +8 -0
- package/dist/module/meta/service/app-master.service.js +42 -0
- package/dist/module/meta/service/app-master.service.js.map +1 -0
- package/dist/module/meta/service/entity-service-impl.service.js +0 -2
- package/dist/module/meta/service/entity-service-impl.service.js.map +1 -1
- package/dist/module/user/repository/user-role-mapping.repository.d.ts +3 -0
- package/dist/module/user/repository/user-role-mapping.repository.js +9 -0
- package/dist/module/user/repository/user-role-mapping.repository.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/module/enterprise/controller/organization.controller.ts +11 -0
- package/src/module/enterprise/enterprise.module.ts +10 -1
- package/src/module/enterprise/entity/school.entity.ts +3 -1
- package/src/module/enterprise/repository/brand.repository.ts +23 -0
- package/src/module/enterprise/repository/school.repository.ts +155 -0
- package/src/module/enterprise/service/organization.service.ts +13 -2
- package/src/module/meta/controller/app-master.controller.ts +38 -0
- package/src/module/meta/controller/entity.controller.ts +0 -5
- package/src/module/meta/entity/app-master.entity.ts +17 -2
- package/src/module/meta/entity.module.ts +13 -0
- package/src/module/meta/repository/app-master.repository.ts +20 -0
- package/src/module/meta/service/app-master.service.ts +34 -0
- package/src/module/meta/service/entity-service-impl.service.ts +0 -2
- package/src/module/user/repository/user-role-mapping.repository.ts +14 -0
package/package.json
CHANGED
|
@@ -20,4 +20,15 @@ export class OrganizationController {
|
|
|
20
20
|
// const enterpriseId = req.user['enterpriseId']; // or adapt based on your user structure
|
|
21
21
|
return this.orgService.findById(userData?.organization_id);
|
|
22
22
|
}
|
|
23
|
+
|
|
24
|
+
@UseGuards(JwtAuthGuard)
|
|
25
|
+
@Get('hierarchy')
|
|
26
|
+
async getOrganizationHierarchy(@Req() req: Request & { user: any }) {
|
|
27
|
+
const userId = req.user.userData?.id;
|
|
28
|
+
const appcode = req.user.userData?.appcode;
|
|
29
|
+
|
|
30
|
+
console.log(userId, appcode, 'userId, appcode');
|
|
31
|
+
|
|
32
|
+
return await this.orgService.getOrganizationHierarchy(userId, appcode);
|
|
33
|
+
}
|
|
23
34
|
}
|
|
@@ -8,6 +8,9 @@ import { OrganizationAppMappingService } from './service/organization-app-mappin
|
|
|
8
8
|
import { OrganizationAppMapping } from './entity/organization-app-mapping.entity';
|
|
9
9
|
import { BrandData } from './entity/brand.entity';
|
|
10
10
|
import { SchoolData } from './entity/school.entity';
|
|
11
|
+
import { BrandRepository } from './repository/brand.repository';
|
|
12
|
+
import { SchoolRepository } from './repository/school.repository';
|
|
13
|
+
import { UtilsModule } from 'src/utils/utils.module';
|
|
11
14
|
|
|
12
15
|
@Module({
|
|
13
16
|
imports: [
|
|
@@ -18,9 +21,15 @@ import { SchoolData } from './entity/school.entity';
|
|
|
18
21
|
SchoolData,
|
|
19
22
|
]),
|
|
20
23
|
UserModule,
|
|
24
|
+
UtilsModule,
|
|
21
25
|
],
|
|
22
26
|
controllers: [OrganizationController],
|
|
23
|
-
providers: [
|
|
27
|
+
providers: [
|
|
28
|
+
OrganizationService,
|
|
29
|
+
OrganizationAppMappingService,
|
|
30
|
+
BrandRepository,
|
|
31
|
+
SchoolRepository,
|
|
32
|
+
],
|
|
24
33
|
exports: [OrganizationService],
|
|
25
34
|
})
|
|
26
35
|
export class EnterpriseModule {}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { BaseEntity } from 'src/module/meta/entity/base-entity.entity';
|
|
2
|
-
import { Entity } from 'typeorm';
|
|
2
|
+
import { Column, Entity } from 'typeorm';
|
|
3
3
|
|
|
4
4
|
@Entity({ name: 'cr_school' })
|
|
5
5
|
export class SchoolData extends BaseEntity {
|
|
6
|
+
@Column({ name: 'brand_id', nullable: true })
|
|
6
7
|
brand_id: number;
|
|
7
8
|
|
|
9
|
+
@Column({ name: 'brand_code', nullable: true })
|
|
8
10
|
brand_code: string;
|
|
9
11
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectRepository } from '@nestjs/typeorm';
|
|
3
|
+
import { EnterpriseData } from '../entity/enterprise.entity';
|
|
4
|
+
import { Repository } from 'typeorm';
|
|
5
|
+
import { BrandData } from '../entity/brand.entity';
|
|
6
|
+
|
|
7
|
+
@Injectable()
|
|
8
|
+
export class BrandRepository {
|
|
9
|
+
constructor(
|
|
10
|
+
@InjectRepository(BrandData)
|
|
11
|
+
private readonly brandRepository: Repository<BrandData>,
|
|
12
|
+
) {}
|
|
13
|
+
|
|
14
|
+
async findAllByOrgId(orgId: number): Promise<BrandData[]> {
|
|
15
|
+
return await this.brandRepository.find({
|
|
16
|
+
where: { organization_id: orgId },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async findOne(id: number): Promise<BrandData | null> {
|
|
21
|
+
return await this.brandRepository.findOne({ where: { id } });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectRepository } from '@nestjs/typeorm';
|
|
3
|
+
import { DataSource, Repository } from 'typeorm';
|
|
4
|
+
import { SchoolData } from '../entity/school.entity';
|
|
5
|
+
import { UserRoleMapping } from 'src/module/user/entity/user-role-mapping.entity';
|
|
6
|
+
|
|
7
|
+
@Injectable()
|
|
8
|
+
export class SchoolRepository {
|
|
9
|
+
constructor(
|
|
10
|
+
@InjectRepository(SchoolData)
|
|
11
|
+
private readonly schoolRepo: Repository<SchoolData>,
|
|
12
|
+
private readonly dataSource: DataSource,
|
|
13
|
+
) {}
|
|
14
|
+
|
|
15
|
+
async findAllByOrgId(brdId: number): Promise<SchoolData[]> {
|
|
16
|
+
return await this.schoolRepo.find({
|
|
17
|
+
where: { brand_id: brdId },
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async findAllByBrandId(brdId: number): Promise<SchoolData[]> {
|
|
22
|
+
return await this.schoolRepo.find({
|
|
23
|
+
where: { brand_id: brdId },
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async getUserContextDropdown(userId: number, appCode: string) {
|
|
28
|
+
const userRoleRepo = this.dataSource.getRepository(UserRoleMapping);
|
|
29
|
+
|
|
30
|
+
// Check if user has any org level access for the app
|
|
31
|
+
const hasOrgAccess = await userRoleRepo
|
|
32
|
+
.createQueryBuilder('urm')
|
|
33
|
+
.where('urm.user_id = :userId', { userId })
|
|
34
|
+
.andWhere('urm.appcode = :appCode', { appCode })
|
|
35
|
+
.andWhere('urm.level_type = :levelType', { levelType: 'ORG' })
|
|
36
|
+
.getRawMany();
|
|
37
|
+
|
|
38
|
+
console.log(hasOrgAccess);
|
|
39
|
+
if (hasOrgAccess.length > 0) {
|
|
40
|
+
// Return nested Org -> Brand -> School structure
|
|
41
|
+
const schools = await this.dataSource
|
|
42
|
+
.createQueryBuilder()
|
|
43
|
+
.select([
|
|
44
|
+
'org.id AS org_id',
|
|
45
|
+
'org.name AS org_name',
|
|
46
|
+
'br.id AS brand_id',
|
|
47
|
+
'br.name AS brand_name',
|
|
48
|
+
'sch.id AS school_id',
|
|
49
|
+
'sch.name AS school_name',
|
|
50
|
+
])
|
|
51
|
+
.from('cr_school', 'sch')
|
|
52
|
+
.innerJoin('cr_brand', 'br', 'sch.brand_id = br.id')
|
|
53
|
+
.innerJoin('cr_organization', 'org', 'br.organization_id = org.id')
|
|
54
|
+
.where('org.id = :orgId', { orgId: hasOrgAccess[0].urm_level_id })
|
|
55
|
+
.getRawMany();
|
|
56
|
+
const result = {};
|
|
57
|
+
|
|
58
|
+
for (const row of schools) {
|
|
59
|
+
const {
|
|
60
|
+
org_id,
|
|
61
|
+
org_name,
|
|
62
|
+
brand_id,
|
|
63
|
+
brand_name,
|
|
64
|
+
school_id,
|
|
65
|
+
school_name,
|
|
66
|
+
} = row;
|
|
67
|
+
|
|
68
|
+
if (!result[org_id]) {
|
|
69
|
+
result[org_id] = {
|
|
70
|
+
org_id,
|
|
71
|
+
org_name,
|
|
72
|
+
brands: {},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (!result[org_id].brands[brand_id]) {
|
|
76
|
+
result[org_id].brands[brand_id] = {
|
|
77
|
+
brand_id,
|
|
78
|
+
brand_name,
|
|
79
|
+
schools: [],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
result[org_id].brands[brand_id].schools.push({
|
|
83
|
+
school_id,
|
|
84
|
+
school_name,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return Object.values(result).map((org: { [key: string]: any }) => ({
|
|
89
|
+
...org,
|
|
90
|
+
brands: Object.values(org.brands),
|
|
91
|
+
}));
|
|
92
|
+
} else {
|
|
93
|
+
// 1. Get schools via BRN-level access
|
|
94
|
+
const brnMappings = await this.dataSource
|
|
95
|
+
.createQueryBuilder()
|
|
96
|
+
.select([
|
|
97
|
+
'brand.id AS brand_id',
|
|
98
|
+
'brand.name AS brand_name',
|
|
99
|
+
'school.id AS school_id',
|
|
100
|
+
'school.name AS school_name',
|
|
101
|
+
])
|
|
102
|
+
.from('cr_user_role_mapping', 'urm')
|
|
103
|
+
.innerJoin('cr_brand', 'brand', 'brand.id = urm.level_id')
|
|
104
|
+
.innerJoin('cr_school', 'school', 'school.brand_id = brand.id')
|
|
105
|
+
.where('urm.user_id = :userId', { userId })
|
|
106
|
+
.andWhere('urm.appcode = :appCode', { appCode })
|
|
107
|
+
.andWhere('urm.level_type = :levelType', { levelType: 'BRN' })
|
|
108
|
+
.getRawMany();
|
|
109
|
+
|
|
110
|
+
// 2. Get directly mapped schools via SCH-level access
|
|
111
|
+
const schMappings = await this.dataSource
|
|
112
|
+
.createQueryBuilder()
|
|
113
|
+
.select([
|
|
114
|
+
'brand.id AS brand_id',
|
|
115
|
+
'brand.name AS brand_name',
|
|
116
|
+
'school.id AS school_id',
|
|
117
|
+
'school.name AS school_name',
|
|
118
|
+
])
|
|
119
|
+
.from('cr_user_role_mapping', 'urm')
|
|
120
|
+
.innerJoin('cr_school', 'school', 'school.id = urm.level_id')
|
|
121
|
+
.innerJoin('cr_brand', 'brand', 'brand.id = school.brand_id')
|
|
122
|
+
.where('urm.user_id = :userId', { userId })
|
|
123
|
+
.andWhere('urm.appcode = :appCode', { appCode })
|
|
124
|
+
.andWhere('urm.level_type = :levelType', { levelType: 'SCH' })
|
|
125
|
+
.getRawMany();
|
|
126
|
+
|
|
127
|
+
// 3. Combine both mappings
|
|
128
|
+
const allMappings = [...brnMappings, ...schMappings];
|
|
129
|
+
|
|
130
|
+
// 4. Group by brand
|
|
131
|
+
const result = {};
|
|
132
|
+
for (const row of allMappings) {
|
|
133
|
+
const { brand_id, brand_name, school_id, school_name } = row;
|
|
134
|
+
|
|
135
|
+
if (!result[brand_id]) {
|
|
136
|
+
result[brand_id] = {
|
|
137
|
+
brand_id,
|
|
138
|
+
brand_name,
|
|
139
|
+
schools: [],
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// prevent duplicates if needed
|
|
144
|
+
if (
|
|
145
|
+
school_id &&
|
|
146
|
+
!result[brand_id].schools.some((s) => s.school_id === school_id)
|
|
147
|
+
) {
|
|
148
|
+
result[brand_id].schools.push({ school_id, school_name });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return Object.values(result);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
1
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
2
2
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
3
3
|
import { EntityManager, Repository } from 'typeorm';
|
|
4
4
|
import { OrganizationData } from '../entity/organization.entity';
|
|
5
5
|
import { ClockIDGenService } from 'src/utils/service/clockIDGenUtil.service';
|
|
6
|
+
import { UserService } from 'src/module/user/service/user.service';
|
|
7
|
+
import { ENTITYTYPE_USER } from 'src/constant/global.constant';
|
|
8
|
+
import { BrandRepository } from '../repository/brand.repository';
|
|
9
|
+
import { SchoolRepository } from '../repository/school.repository';
|
|
6
10
|
|
|
7
11
|
@Injectable()
|
|
8
12
|
export class OrganizationService {
|
|
9
13
|
constructor(
|
|
10
14
|
@InjectRepository(OrganizationData)
|
|
11
15
|
private readonly organizationRepository: Repository<OrganizationData>,
|
|
16
|
+
private readonly brandRepository: BrandRepository,
|
|
17
|
+
private readonly schoolRepository: SchoolRepository,
|
|
12
18
|
private readonly idGen: ClockIDGenService,
|
|
19
|
+
@Inject('UserService') private readonly userService: UserService,
|
|
13
20
|
) {}
|
|
14
21
|
|
|
15
22
|
async create(
|
|
@@ -46,7 +53,7 @@ export class OrganizationService {
|
|
|
46
53
|
return await repo.findOne({ where: { id } });
|
|
47
54
|
}
|
|
48
55
|
|
|
49
|
-
async findById(id:number | undefined){
|
|
56
|
+
async findById(id: number | undefined) {
|
|
50
57
|
return await this.organizationRepository.find({ where: { id } });
|
|
51
58
|
}
|
|
52
59
|
|
|
@@ -70,4 +77,8 @@ export class OrganizationService {
|
|
|
70
77
|
|
|
71
78
|
await repo.delete(id);
|
|
72
79
|
}
|
|
80
|
+
|
|
81
|
+
async getOrganizationHierarchy(userId: number, appCode: string) {
|
|
82
|
+
return await this.schoolRepository.getUserContextDropdown(userId, appCode);
|
|
83
|
+
}
|
|
73
84
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Controller,
|
|
3
|
+
Get,
|
|
4
|
+
Query,
|
|
5
|
+
Res,
|
|
6
|
+
HttpStatus,
|
|
7
|
+
UseGuards,
|
|
8
|
+
Inject,
|
|
9
|
+
Req,
|
|
10
|
+
} from '@nestjs/common';
|
|
11
|
+
import { JwtAuthGuard } from '../../auth/guards/jwt.guard';
|
|
12
|
+
import { Response } from 'express';
|
|
13
|
+
import { AppMasterService } from '../service/app-master.service';
|
|
14
|
+
|
|
15
|
+
@Controller('apps')
|
|
16
|
+
@UseGuards(JwtAuthGuard)
|
|
17
|
+
export class AppMasterController {
|
|
18
|
+
constructor(private appMasterService: AppMasterService) {}
|
|
19
|
+
|
|
20
|
+
@Get('')
|
|
21
|
+
async getAppByAppCode(
|
|
22
|
+
@Req() req: Request & { user: any },
|
|
23
|
+
@Res() res: Response,
|
|
24
|
+
) {
|
|
25
|
+
try {
|
|
26
|
+
const id = req.user.userData.id;
|
|
27
|
+
|
|
28
|
+
const data = await this.appMasterService.getAppMasterDataByAppCode(id);
|
|
29
|
+
|
|
30
|
+
return res.status(HttpStatus.OK).json(data);
|
|
31
|
+
} catch (error) {
|
|
32
|
+
return res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({
|
|
33
|
+
success: false,
|
|
34
|
+
message: error.message || 'Error fetching entity data',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -110,7 +110,6 @@ export class EntityController {
|
|
|
110
110
|
@Req() req: Request & { user: any },
|
|
111
111
|
) {
|
|
112
112
|
let loggedInUser = req.user.userData;
|
|
113
|
-
console.log(loggedInUser," loggedInUser");
|
|
114
113
|
// let loggedInUser = await this.entityService.getEntityData(
|
|
115
114
|
// ENTITYTYPE_USER,
|
|
116
115
|
// requestedUser.userId,
|
|
@@ -121,18 +120,14 @@ export class EntityController {
|
|
|
121
120
|
);
|
|
122
121
|
}
|
|
123
122
|
|
|
124
|
-
console.log(entityType,"entityType");
|
|
125
123
|
const entityMaster =
|
|
126
124
|
await this.entityMasterService.getEntityData(entityType);
|
|
127
|
-
console.log(entityMaster, "entityMaster");
|
|
128
125
|
const entityService =
|
|
129
126
|
await this.reflectionHelper.getBean<EntityServiceImpl>(
|
|
130
127
|
entityMaster.entity_service,
|
|
131
128
|
);
|
|
132
|
-
console.log(entityService, "entityService");
|
|
133
129
|
if (entityService) {
|
|
134
130
|
let existingEntity = await entityService.getEntityData(entityType, id);
|
|
135
|
-
console.log(existingEntity, "existingEntity");
|
|
136
131
|
if (!existingEntity) {
|
|
137
132
|
}
|
|
138
133
|
// let mergeEntity = JsonUtil.merge(existingEntity, entityData);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Entity, PrimaryGeneratedColumn } from 'typeorm';
|
|
1
|
+
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
|
2
2
|
import { BaseEntity } from './base-entity.entity';
|
|
3
3
|
|
|
4
4
|
@Entity({ name: 'cr_app_master' })
|
|
5
|
-
export class
|
|
5
|
+
export class AppMaster extends BaseEntity {
|
|
6
6
|
constructor() {
|
|
7
7
|
super();
|
|
8
8
|
this.entity_type = 'APM';
|
|
@@ -10,4 +10,19 @@ export class UserAppMapping extends BaseEntity {
|
|
|
10
10
|
|
|
11
11
|
@PrimaryGeneratedColumn()
|
|
12
12
|
id: number;
|
|
13
|
+
|
|
14
|
+
@Column({ name: 'type', type: 'varchar', nullable: true })
|
|
15
|
+
type: string;
|
|
16
|
+
|
|
17
|
+
@Column({ name: 'color', type: 'varchar', nullable: true })
|
|
18
|
+
color: string;
|
|
19
|
+
|
|
20
|
+
@Column({ name: 'route', type: 'varchar', nullable: true })
|
|
21
|
+
route: string;
|
|
22
|
+
|
|
23
|
+
@Column({ name: 'description', type: 'varchar', nullable: true })
|
|
24
|
+
description: string;
|
|
25
|
+
|
|
26
|
+
@Column({ name: 'backgroudColor', type: 'varchar', nullable: true })
|
|
27
|
+
backgroudColor: string;
|
|
13
28
|
}
|
|
@@ -41,6 +41,12 @@ import { FilterModule } from '../filter/filter.module';
|
|
|
41
41
|
import { UserAppMappingService } from './service/user-app-mapping.service';
|
|
42
42
|
import { UserAppMappingRepository } from './repository/user-app-mapping.repository';
|
|
43
43
|
import { UserAppMapping } from './entity/user-app-mapping.entity';
|
|
44
|
+
import { AppMasterController } from './controller/app-master.controller';
|
|
45
|
+
import { UserRoleMappingRepository } from '../user/repository/user-role-mapping.repository';
|
|
46
|
+
import { UserRoleMapping } from '../user/entity/user-role-mapping.entity';
|
|
47
|
+
import { AppMasterService } from './service/app-master.service';
|
|
48
|
+
import { AppMasterRespository } from './repository/app-master.repository';
|
|
49
|
+
import { AppMaster } from './entity/app-master.entity';
|
|
44
50
|
|
|
45
51
|
@Module({
|
|
46
52
|
imports: [
|
|
@@ -57,6 +63,8 @@ import { UserAppMapping } from './entity/user-app-mapping.entity';
|
|
|
57
63
|
SectionMaster,
|
|
58
64
|
FieldGroup,
|
|
59
65
|
UserAppMapping,
|
|
66
|
+
UserRoleMapping,
|
|
67
|
+
AppMaster,
|
|
60
68
|
]),
|
|
61
69
|
forwardRef(() => ListMasterModule),
|
|
62
70
|
forwardRef(() => FilterModule),
|
|
@@ -84,6 +92,9 @@ import { UserAppMapping } from './entity/user-app-mapping.entity';
|
|
|
84
92
|
{ provide: 'ViewMasterService', useClass: ViewMasterService },
|
|
85
93
|
UserAppMappingService,
|
|
86
94
|
UserAppMappingRepository,
|
|
95
|
+
UserRoleMappingRepository,
|
|
96
|
+
AppMasterRespository,
|
|
97
|
+
AppMasterService,
|
|
87
98
|
],
|
|
88
99
|
exports: [
|
|
89
100
|
EntityMasterService,
|
|
@@ -100,6 +111,7 @@ import { UserAppMapping } from './entity/user-app-mapping.entity';
|
|
|
100
111
|
AttributeMasterService,
|
|
101
112
|
UserAppMappingService,
|
|
102
113
|
UserAppMappingRepository,
|
|
114
|
+
AppMasterService,
|
|
103
115
|
],
|
|
104
116
|
controllers: [
|
|
105
117
|
EntityController,
|
|
@@ -107,6 +119,7 @@ import { UserAppMapping } from './entity/user-app-mapping.entity';
|
|
|
107
119
|
MediaController,
|
|
108
120
|
ViewMasterController,
|
|
109
121
|
MetaController,
|
|
122
|
+
AppMasterController,
|
|
110
123
|
],
|
|
111
124
|
})
|
|
112
125
|
export class EntityModule {}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectRepository } from '@nestjs/typeorm';
|
|
3
|
+
import { BaseEntity, Repository } from 'typeorm';
|
|
4
|
+
import { AppMaster } from '../entity/app-master.entity';
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class AppMasterRespository {
|
|
8
|
+
constructor(
|
|
9
|
+
@InjectRepository(AppMaster)
|
|
10
|
+
private readonly AppMasterRespository: Repository<AppMaster>,
|
|
11
|
+
) {}
|
|
12
|
+
|
|
13
|
+
async getAppMasterDataByAppCode(
|
|
14
|
+
appCode: string,
|
|
15
|
+
): Promise<AppMaster[] | null> {
|
|
16
|
+
return await this.AppMasterRespository.find({
|
|
17
|
+
where: { appcode: appCode },
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { UserRoleMappingRepository } from 'src/module/user/repository/user-role-mapping.repository';
|
|
3
|
+
import { AppMasterRespository } from '../repository/app-master.repository';
|
|
4
|
+
|
|
5
|
+
@Injectable()
|
|
6
|
+
export class AppMasterService {
|
|
7
|
+
constructor(
|
|
8
|
+
private readonly appMasterRepository: AppMasterRespository,
|
|
9
|
+
private readonly userRoleMappingRepository: UserRoleMappingRepository,
|
|
10
|
+
) {}
|
|
11
|
+
|
|
12
|
+
async getAppMasterDataByAppCode(userId: number) {
|
|
13
|
+
const app_code =
|
|
14
|
+
await this.userRoleMappingRepository.findDistinctAppcodeByUserId(userId);
|
|
15
|
+
|
|
16
|
+
const result: Record<string, any> = {};
|
|
17
|
+
|
|
18
|
+
if (app_code.appcode.length > 0) {
|
|
19
|
+
const resolvedData = await Promise.all(
|
|
20
|
+
app_code.appcode.map(async (element) => {
|
|
21
|
+
const data =
|
|
22
|
+
await this.appMasterRepository.getAppMasterDataByAppCode(element);
|
|
23
|
+
return { [element]: data };
|
|
24
|
+
}),
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
resolvedData.forEach((entry) => {
|
|
28
|
+
Object.assign(result, entry);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -117,12 +117,10 @@ export class EntityServiceImpl implements EntityService<BaseEntity> {
|
|
|
117
117
|
id: number,
|
|
118
118
|
): Promise<BaseEntity | null> {
|
|
119
119
|
const entityData = await this.entityMasterService.getEntityData(entityType);
|
|
120
|
-
console.log(entityData, 'entityData in getEntityData');
|
|
121
120
|
|
|
122
121
|
const repoService = this.reflectionHelper.getRepoService(
|
|
123
122
|
entityData.entity_data_class,
|
|
124
123
|
);
|
|
125
|
-
console.log(repoService, 'repoService in getEntityData');
|
|
126
124
|
if (!repoService) {
|
|
127
125
|
throw new Error(
|
|
128
126
|
`Repository service not found for entityType: ${entityType}`,
|
|
@@ -47,4 +47,18 @@ export class UserRoleMappingRepository {
|
|
|
47
47
|
async deleteByUserId(userId: number) {
|
|
48
48
|
await this.userRoleMappingRepository.delete({ user_id: userId });
|
|
49
49
|
}
|
|
50
|
+
|
|
51
|
+
async findDistinctAppcodeByUserId(
|
|
52
|
+
userId: number,
|
|
53
|
+
): Promise<{ appcode: string[] }> {
|
|
54
|
+
const result = await this.userRoleMappingRepository
|
|
55
|
+
.createQueryBuilder('urm')
|
|
56
|
+
.select('DISTINCT urm.appcode', 'appcode')
|
|
57
|
+
.where('urm.user_id = :userId', { userId })
|
|
58
|
+
.getRawMany();
|
|
59
|
+
|
|
60
|
+
const appcodeArray = result.map((row) => row.appcode);
|
|
61
|
+
|
|
62
|
+
return { appcode: appcodeArray };
|
|
63
|
+
}
|
|
50
64
|
}
|