diff --git a/apps/json-api-front/src/app/app.component.ts b/apps/json-api-front/src/app/app.component.ts index 077ec213..142b374e 100644 --- a/apps/json-api-front/src/app/app.component.ts +++ b/apps/json-api-front/src/app/app.component.ts @@ -1,12 +1,12 @@ import { Component, inject, OnInit } from '@angular/core'; import { NxWelcomeComponent } from './nx-welcome.component'; -import { JsonApiSdkService } from '@klerick/json-api-nestjs-sdk'; -import { AtomicFactory } from '@klerick/json-api-nestjs-sdk/ngModule'; +import { JsonApiSdkService } from '@yaser2us/json-api-nestjs-sdk'; +import { AtomicFactory } from '@yaser2us/json-api-nestjs-sdk/ngModule'; import { JSON_RPC, RPC_BATCH, Rpc, -} from '@klerick/nestjs-json-rpc-sdk/ngModule'; +} from '@yaser2us/nestjs-json-rpc-sdk/ngModule'; import { RpcService as IRpcService } from '@nestjs-json-api/type-for-rpc'; import { switchMap } from 'rxjs'; diff --git a/apps/json-api-front/src/app/app.config.ts b/apps/json-api-front/src/app/app.config.ts index e4a2cc92..12e14dec 100644 --- a/apps/json-api-front/src/app/app.config.ts +++ b/apps/json-api-front/src/app/app.config.ts @@ -1,10 +1,10 @@ import { ApplicationConfig, InjectionToken } from '@angular/core'; -import { provideJsonApi } from '@klerick/json-api-nestjs-sdk/ngModule'; +import { provideJsonApi } from '@yaser2us/json-api-nestjs-sdk/ngModule'; import { JsonRpcAngularConfig, TransportType, provideJsonRpc, -} from '@klerick/nestjs-json-rpc-sdk/ngModule'; +} from '@yaser2us/nestjs-json-rpc-sdk/ngModule'; import { Subject } from 'rxjs'; import { webSocket } from 'rxjs/webSocket'; import { io } from 'socket.io-client'; diff --git a/apps/json-api-server-e2e/jest.config.ts b/apps/json-api-server-e2e/jest.config.ts index 5c75a2f7..ab3778fc 100644 --- a/apps/json-api-server-e2e/jest.config.ts +++ b/apps/json-api-server-e2e/jest.config.ts @@ -18,15 +18,15 @@ export default { moduleFileExtensions: ['ts', 'js', 'html'], coverageDirectory: '../../coverage/json-api-server-e2e', moduleNameMapper: { - '^@klerick/json-api-nestjs$': + '^@yaser2us/json-api-nestjs$': '/../../dist/libs/json-api/json-api-nestjs', - '^@klerick/json-api-nestjs-microorm$': + '^@yaser2us/json-api-nestjs-microorm$': '/../../dist/libs/json-api/json-api-nestjs-microorm', - '^@klerick/json-api-nestjs-shared$': + '^@yaser2us/json-api-nestjs-shared$': '/../../dist/libs/json-api/json-api-nestjs-shared', - '^@klerick/json-api-nestjs-typeorm$': + '^@yaser2us/json-api-nestjs-typeorm$': '/../../dist/libs/json-api/json-api-nestjs-typeorm', - '^@klerick/json-api-nestjs-sdk$': + '^@yaser2us/json-api-nestjs-sdk$': '/../../dist/libs/json-api/json-api-nestjs-sdk', }, }; diff --git a/apps/json-api-server-e2e/src/json-api/json-api-sdk/atomic-sdk.spec.ts b/apps/json-api-server-e2e/src/json-api/json-api-sdk/atomic-sdk.spec.ts index b89a48c5..f9c79931 100644 --- a/apps/json-api-server-e2e/src/json-api/json-api-sdk/atomic-sdk.spec.ts +++ b/apps/json-api-server-e2e/src/json-api/json-api-sdk/atomic-sdk.spec.ts @@ -1,5 +1,5 @@ import { INestApplication } from '@nestjs/common'; -import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk'; +import { FilterOperand, JsonSdkPromise } from '@yaser2us/json-api-nestjs-sdk'; import { Addresses, CommentKind, diff --git a/apps/json-api-server-e2e/src/json-api/json-api-sdk/check-common-decorator.spec.ts b/apps/json-api-server-e2e/src/json-api/json-api-sdk/check-common-decorator.spec.ts index 969858db..abe32c69 100644 --- a/apps/json-api-server-e2e/src/json-api/json-api-sdk/check-common-decorator.spec.ts +++ b/apps/json-api-server-e2e/src/json-api/json-api-sdk/check-common-decorator.spec.ts @@ -1,5 +1,5 @@ import { INestApplication } from '@nestjs/common'; -import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk'; +import { FilterOperand, JsonSdkPromise } from '@yaser2us/json-api-nestjs-sdk'; import { AxiosError } from 'axios'; import { Users } from '@nestjs-json-api/typeorm-database'; diff --git a/apps/json-api-server-e2e/src/json-api/json-api-sdk/check-othe-call.spec.ts b/apps/json-api-server-e2e/src/json-api/json-api-sdk/check-othe-call.spec.ts index d6d2957a..817d6019 100644 --- a/apps/json-api-server-e2e/src/json-api/json-api-sdk/check-othe-call.spec.ts +++ b/apps/json-api-server-e2e/src/json-api/json-api-sdk/check-othe-call.spec.ts @@ -1,5 +1,5 @@ import { INestApplication } from '@nestjs/common'; -import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk'; +import { FilterOperand, JsonSdkPromise } from '@yaser2us/json-api-nestjs-sdk'; import { BookList, Users } from '@nestjs-json-api/typeorm-database'; import { AxiosError } from 'axios'; import { faker } from '@faker-js/faker'; diff --git a/apps/json-api-server-e2e/src/json-api/json-api-sdk/get-method.spec.ts b/apps/json-api-server-e2e/src/json-api/json-api-sdk/get-method.spec.ts index 34df9ff4..498a9559 100644 --- a/apps/json-api-server-e2e/src/json-api/json-api-sdk/get-method.spec.ts +++ b/apps/json-api-server-e2e/src/json-api/json-api-sdk/get-method.spec.ts @@ -8,7 +8,7 @@ import { } from '@nestjs-json-api/typeorm-database'; import { faker } from '@faker-js/faker'; -import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk'; +import { FilterOperand, JsonSdkPromise } from '@yaser2us/json-api-nestjs-sdk'; import { getUser } from '../utils/data-utils'; import { creatSdk, run } from '../utils/run-application'; diff --git a/apps/json-api-server-e2e/src/json-api/json-api-sdk/patch-methode.spec.ts b/apps/json-api-server-e2e/src/json-api/json-api-sdk/patch-methode.spec.ts index e603de0c..8f06a92e 100644 --- a/apps/json-api-server-e2e/src/json-api/json-api-sdk/patch-methode.spec.ts +++ b/apps/json-api-server-e2e/src/json-api/json-api-sdk/patch-methode.spec.ts @@ -6,7 +6,7 @@ import { Users, } from '@nestjs-json-api/typeorm-database'; import { faker } from '@faker-js/faker'; -import { JsonSdkPromise } from '@klerick/json-api-nestjs-sdk'; +import { JsonSdkPromise } from '@yaser2us/json-api-nestjs-sdk'; import { creatSdk, run } from '../utils/run-application'; diff --git a/apps/json-api-server-e2e/src/json-api/json-api-sdk/post-method.spec.ts b/apps/json-api-server-e2e/src/json-api/json-api-sdk/post-method.spec.ts index 78fe67f0..aad9e2bd 100644 --- a/apps/json-api-server-e2e/src/json-api/json-api-sdk/post-method.spec.ts +++ b/apps/json-api-server-e2e/src/json-api/json-api-sdk/post-method.spec.ts @@ -6,7 +6,7 @@ import { Users, } from '@nestjs-json-api/typeorm-database'; import { faker } from '@faker-js/faker'; -import { JsonSdkPromise } from '@klerick/json-api-nestjs-sdk'; +import { JsonSdkPromise } from '@yaser2us/json-api-nestjs-sdk'; import { creatSdk, run } from '../utils/run-application'; import { INestApplication } from '@nestjs/common'; diff --git a/apps/json-api-server-e2e/src/json-api/json-rpc/run-json-rpc.spec.ts b/apps/json-api-server-e2e/src/json-api/json-rpc/run-json-rpc.spec.ts index 3c15ada0..eb77ec77 100644 --- a/apps/json-api-server-e2e/src/json-api/json-rpc/run-json-rpc.spec.ts +++ b/apps/json-api-server-e2e/src/json-api/json-rpc/run-json-rpc.spec.ts @@ -3,7 +3,7 @@ import { ResultRpcFactoryPromise, ErrorCodeType, RpcError, -} from '@klerick/nestjs-json-rpc-sdk'; +} from '@yaser2us/nestjs-json-rpc-sdk'; import { creatRpcSdk, MapperRpc, run } from '../utils/run-application'; diff --git a/apps/json-api-server-e2e/src/json-api/json-rpc/run-ws-json-rpc.spec.ts b/apps/json-api-server-e2e/src/json-api/json-rpc/run-ws-json-rpc.spec.ts index 09803e17..826b7809 100644 --- a/apps/json-api-server-e2e/src/json-api/json-rpc/run-ws-json-rpc.spec.ts +++ b/apps/json-api-server-e2e/src/json-api/json-rpc/run-ws-json-rpc.spec.ts @@ -3,7 +3,7 @@ import { ResultRpcFactoryPromise, ErrorCodeType, RpcError, -} from '@klerick/nestjs-json-rpc-sdk'; +} from '@yaser2us/nestjs-json-rpc-sdk'; import { creatWsRpcSdk, diff --git a/apps/json-api-server-e2e/src/json-api/utils/run-application.ts b/apps/json-api-server-e2e/src/json-api/utils/run-application.ts index ecb15d6d..36aac1e3 100644 --- a/apps/json-api-server-e2e/src/json-api/utils/run-application.ts +++ b/apps/json-api-server-e2e/src/json-api/utils/run-application.ts @@ -1,13 +1,13 @@ import { Test } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; -import { adapterForAxios, JsonApiJs } from '@klerick/json-api-nestjs-sdk'; +import { adapterForAxios, JsonApiJs } from '@yaser2us/json-api-nestjs-sdk'; import { RpcFactory, axiosTransportFactory, RpcConfig, -} from '@klerick/nestjs-json-rpc-sdk'; +} from '@yaser2us/nestjs-json-rpc-sdk'; import { RpcService } from '@nestjs-json-api/type-for-rpc'; -import { TransportType } from '@klerick/nestjs-json-rpc-sdk'; +import { TransportType } from '@yaser2us/nestjs-json-rpc-sdk'; import axios from 'axios'; import { Logger } from 'nestjs-pino'; import { WebSocket } from 'ws'; diff --git a/apps/json-api-server/src/app/resources/micro-orm/controllers/extend-book-list/extend-book-list.controller.ts b/apps/json-api-server/src/app/resources/micro-orm/controllers/extend-book-list/extend-book-list.controller.ts index de163385..7de2e615 100644 --- a/apps/json-api-server/src/app/resources/micro-orm/controllers/extend-book-list/extend-book-list.controller.ts +++ b/apps/json-api-server/src/app/resources/micro-orm/controllers/extend-book-list/extend-book-list.controller.ts @@ -1,5 +1,5 @@ import { ParseUUIDPipe } from '@nestjs/common'; -import { JsonApi, JsonBaseController } from '@klerick/json-api-nestjs'; +import { JsonApi, JsonBaseController } from '@yaser2us/json-api-nestjs'; import { BookList } from '@nestjs-json-api/microorm-database'; @JsonApi(BookList, { diff --git a/apps/json-api-server/src/app/resources/micro-orm/controllers/extend-user/extend-user.controller.ts b/apps/json-api-server/src/app/resources/micro-orm/controllers/extend-user/extend-user.controller.ts index de2bd612..c74e6d25 100644 --- a/apps/json-api-server/src/app/resources/micro-orm/controllers/extend-user/extend-user.controller.ts +++ b/apps/json-api-server/src/app/resources/micro-orm/controllers/extend-user/extend-user.controller.ts @@ -17,12 +17,12 @@ import { QueryOne, PatchRelationshipData, PostData, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { ResourceObjectRelationships, ResourceObject, RelationKeys, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { ExamplePipe } from '../../service/example.pipe'; import { ExampleService } from '../../service/example.service'; import { ControllerInterceptor } from '../../service/controller.interceptor'; diff --git a/apps/json-api-server/src/app/resources/micro-orm/resources-micro.module.ts b/apps/json-api-server/src/app/resources/micro-orm/resources-micro.module.ts index 10b2c045..0ecbcdb6 100644 --- a/apps/json-api-server/src/app/resources/micro-orm/resources-micro.module.ts +++ b/apps/json-api-server/src/app/resources/micro-orm/resources-micro.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { JsonApiModule } from '@klerick/json-api-nestjs'; -import { MicroOrmJsonApiModule } from '@klerick/json-api-nestjs-microorm'; +import { JsonApiModule } from '@yaser2us/json-api-nestjs'; +import { MicroOrmJsonApiModule } from '@yaser2us/json-api-nestjs-microorm'; import { Users, Addresses, diff --git a/apps/json-api-server/src/app/resources/micro-orm/service/example.pipe.ts b/apps/json-api-server/src/app/resources/micro-orm/service/example.pipe.ts index ca0b2aac..5e1118fb 100644 --- a/apps/json-api-server/src/app/resources/micro-orm/service/example.pipe.ts +++ b/apps/json-api-server/src/app/resources/micro-orm/service/example.pipe.ts @@ -4,7 +4,7 @@ import { PipeTransform, } from '@nestjs/common'; -import { Query } from '@klerick/json-api-nestjs'; +import { Query } from '@yaser2us/json-api-nestjs'; import { Users } from '@nestjs-json-api/microorm-database'; export class ExamplePipe diff --git a/apps/json-api-server/src/app/resources/micro-orm/service/guard.service.ts b/apps/json-api-server/src/app/resources/micro-orm/service/guard.service.ts index a8567bc2..0be319c6 100644 --- a/apps/json-api-server/src/app/resources/micro-orm/service/guard.service.ts +++ b/apps/json-api-server/src/app/resources/micro-orm/service/guard.service.ts @@ -6,7 +6,7 @@ import { Injectable, } from '@nestjs/common'; import { Observable } from 'rxjs'; -import { entityForClass } from '@klerick/json-api-nestjs'; +import { entityForClass } from '@yaser2us/json-api-nestjs'; import { Request } from 'express'; import { Reflector } from '@nestjs/core'; diff --git a/apps/json-api-server/src/app/resources/pipe.pipe.ts b/apps/json-api-server/src/app/resources/pipe.pipe.ts new file mode 100644 index 00000000..139ececd --- /dev/null +++ b/apps/json-api-server/src/app/resources/pipe.pipe.ts @@ -0,0 +1,91 @@ +// ============================================ +// STEP 2: ALTERNATIVE APPROACH WITH REQUEST INJECTION +// ============================================ + +// enhanced-user-context.pipe.ts (better approach) + +import { + Injectable, + PipeTransform, + ArgumentMetadata, + Inject, + Scope +} from '@nestjs/common'; +import { REQUEST } from '@nestjs/core'; + +@Injectable({ scope: Scope.REQUEST }) +export class EnhancedUserContextPipe implements PipeTransform { + + constructor( + @Inject(REQUEST) private readonly request: any + ) { } + + transform(query: any, metadata: ArgumentMetadata): any { + console.log('๐Ÿšฐ EnhancedUserContextPipe activated'); + console.log('๐Ÿ“ฅ Original query:', query); + + try { + console.log('๐Ÿ‘ค Request user:', this.request.user); + console.log('๐Ÿ”— Request headers:', this.request.headers); + + // Create enhanced query with user context + const enhancedQuery = { + ...query, + context: { + // User context from JWT + userContext: this.request.user ? { + id: this.request.user.id, + workspaceId: this.request.user.workspaceId, + roles: this.request.user.roles || [], + email: this.request.user.email, + permissions: this.request.user.permissions || [] + } : { + id: 'user-456', + roles: ['manager'], + accessibleIds: ['1', '2', '3', '4', '5', '15', '17', '18', '19', '13', '11', '25', '27'], // Specific records user can access + departmentId: 42 + }, + + // Request metadata + requestId: this.request.headers['x-request-id'] || `req-${Date.now()}`, + timestamp: new Date().toISOString(), + userAgent: this.request.headers['user-agent'], + + // Network info + ipAddress: this.request.ip || this.request.connection?.remoteAddress, + origin: this.request.headers['origin'], + + // Tenant/workspace context + tenantId: this.request.headers['x-tenant-id'] || this.request.user?.workspaceId, + + // API metadata + apiVersion: this.request.headers['api-version'] || '1.0', + endpoint: this.request.route?.path || this.request.url, + method: this.request.method, + + // Security context + sessionId: this.request.sessionID, + csrfToken: this.request.headers['x-csrf-token'], + + // Feature flags (you could add async loading here) + featureFlags: { + // Default flags - you could make this dynamic + enableAdvancedSearch: this.request.user?.roles?.includes('admin') || false, + enableBetaFeatures: this.request.user?.roles?.includes('beta-tester') || false, + enableAuditLogging: true + } + } + }; + + console.log('โœ… Successfully enhanced query with context'); + console.log('๐Ÿ”ง Context keys:', Object.keys(enhancedQuery.context)); + + return enhancedQuery; + + } catch (error) { + console.error('โŒ Error in EnhancedUserContextPipe:', error); + // Return original query on error + return query; + } + } +} \ No newline at end of file diff --git a/apps/json-api-server/src/app/resources/type-orm/controllers/extend-book-list/extend-book-list.controller.ts b/apps/json-api-server/src/app/resources/type-orm/controllers/extend-book-list/extend-book-list.controller.ts index 8870dfcc..abb7c3f1 100644 --- a/apps/json-api-server/src/app/resources/type-orm/controllers/extend-book-list/extend-book-list.controller.ts +++ b/apps/json-api-server/src/app/resources/type-orm/controllers/extend-book-list/extend-book-list.controller.ts @@ -1,5 +1,5 @@ import { ParseUUIDPipe } from '@nestjs/common'; -import { JsonApi, JsonBaseController } from '@klerick/json-api-nestjs'; +import { JsonApi, JsonBaseController } from '@yaser2us/json-api-nestjs'; import { BookList } from '@nestjs-json-api/typeorm-database'; @JsonApi(BookList, { diff --git a/apps/json-api-server/src/app/resources/type-orm/controllers/extend-user/extend-user.controller.ts b/apps/json-api-server/src/app/resources/type-orm/controllers/extend-user/extend-user.controller.ts index faa1ae08..fc8d79cd 100644 --- a/apps/json-api-server/src/app/resources/type-orm/controllers/extend-user/extend-user.controller.ts +++ b/apps/json-api-server/src/app/resources/type-orm/controllers/extend-user/extend-user.controller.ts @@ -17,12 +17,12 @@ import { QueryOne, PatchRelationshipData, PostData, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { ResourceObjectRelationships, ResourceObject, RelationKeys, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { ExamplePipe } from '../../service/example.pipe'; import { ExampleService } from '../../service/example.service'; import { ControllerInterceptor } from '../../service/controller.interceptor'; diff --git a/apps/json-api-server/src/app/resources/type-orm/controllers/testing/real-db-integration-controller.ts b/apps/json-api-server/src/app/resources/type-orm/controllers/testing/real-db-integration-controller.ts new file mode 100644 index 00000000..6881f455 --- /dev/null +++ b/apps/json-api-server/src/app/resources/type-orm/controllers/testing/real-db-integration-controller.ts @@ -0,0 +1,269 @@ +// real-db-integration-controller.ts +// Test access control with actual database queries + +import { Controller, Get, Query, Inject } from '@nestjs/common'; +import { Repository } from 'typeorm'; +import { InjectRepository } from '@nestjs/typeorm'; +import { simpleAccessControlledGetAll } from '@yaser2us/json-api-nestjs-typeorm'; + +// Import your entities +import { + Users, + Addresses, + Comments, + Roles, + BookList, + School, + User, + Workspace, + YasserNasser +} from '@nestjs-json-api/typeorm-database'; + +@Controller('api/real-test') +export class RealDbIntegrationController { + + constructor( + @InjectRepository(School) private usersRepository: Repository + ) { } + + @Get('users-original') + async getOriginalUsers(@Query() query: any) { + console.log('๐Ÿ“Š Testing ORIGINAL database query (no access control)...'); + + const pageSize = parseInt(query.size) || 10; + const pageNumber = parseInt(query.page) || 1; + const skip = (pageNumber - 1) * pageSize; + + // Simple original query + const [data, totalItems] = await this.usersRepository.findAndCount({ + take: pageSize, + skip: skip + }); + + console.log(`๐Ÿ“Š Original query: ${data.length} items returned, ${totalItems} total`); + console.log('๐Ÿ“Š First user:', data[0]); + + return { + meta: { + pageNumber, + totalItems, + pageSize, + }, + data, + message: 'Original query - no access control' + }; + } + + @Get('users-access-controlled') + async getAccessControlledUsers(@Query() query: any) { + console.log('๐Ÿ” Testing ACCESS CONTROLLED database query...'); + + // Mock TypeORM service structure + const mockTypeOrmService = { + repository: this.usersRepository, + typeormUtilsService: { + currentAlias: 'school', + currentPrimaryColumn: 'id' + }, + transformDataService: { + transformData: (data: any, query: any) => ({ + data, + included: null + }) + } + }; + + // Mock user context + const userContext = { + id: 'test-user-123', + workspaceId: 'test-workspace-123', + roles: ['admin'] // Try changing to ['user'] to see different results + }; + + // Mock query structure + const mockQuery = { + page: { + size: parseInt(query.size) || 10, + number: parseInt(query.page) || 1 + } + }; + + try { + // Call our access-controlled function + const result = await simpleAccessControlledGetAll( + mockTypeOrmService, + mockQuery, + userContext + ); + + console.log('๐Ÿ” Access controlled result:', result); + + return { + ...result, + message: 'Access controlled query - only accessible users returned' + }; + + } catch (error) { + console.error('โŒ Error in access controlled query:', error); + return { + error: 'Access controlled query failed', + details: error.message, + data: [] + }; + } + } + + @Get('compare') + async compareResults(@Query() query: any) { + console.log('๐Ÿ” COMPARING original vs access-controlled results...'); + + try { + // Get both results + const original = await this.getOriginalUsers(query); + const accessControlled = await this.getAccessControlledUsers(query); + + console.log('๐Ÿ“Š COMPARISON RESULTS:'); + console.log(`Original: ${original.data?.length || 0} users`); + console.log(`Access Controlled: ${accessControlled.data?.length || 0} users`); + + return { + original: { + count: original.data?.length || 0, + totalItems: original.meta?.totalItems || 0, + data: original.data + }, + accessControlled: { + count: accessControlled.data?.length || 0, + totalItems: accessControlled.meta?.totalItems || 0, + data: accessControlled.data + }, + comparison: { + filtered: (original.data?.length || 0) - (accessControlled.data?.length || 0), + message: 'Access control successfully filtered results' + } + }; + + } catch (error) { + console.error('โŒ Comparison failed:', error); + return { + error: 'Comparison failed', + details: error.message + }; + } + } + + @Get('test-different-users') + async testDifferentUsers() { + console.log('๐Ÿ‘ฅ Testing DIFFERENT USER ROLES...'); + + const mockTypeOrmService = { + repository: this.usersRepository, + typeormUtilsService: { + currentAlias: 'users', + currentPrimaryColumn: 'id' + }, + transformDataService: { + transformData: (data: any, query: any) => ({ data, included: null }) + } + }; + + const mockQuery = { page: { size: 10, number: 1 } }; + + // Test admin user + const adminContext = { + id: 'admin-user', + workspaceId: 'test-workspace-123', + roles: ['admin'] + }; + + // Test regular user + const userContext = { + id: 'regular-user', + workspaceId: 'test-workspace-123', + roles: ['user'] + }; + + try { + const adminResult = await simpleAccessControlledGetAll(mockTypeOrmService, mockQuery, adminContext); + const userResult = await simpleAccessControlledGetAll(mockTypeOrmService, mockQuery, userContext); + + console.log(`๐Ÿ‘จโ€๐Ÿ’ผ Admin sees: ${adminResult.data?.length || 0} users`); + console.log(`๐Ÿ‘ค Regular user sees: ${userResult.data?.length || 0} users`); + + return { + admin: { + accessibleIds: ['1', '2', '3', '4', '5'], // From our mock function + actualResults: adminResult.data?.length || 0, + data: adminResult.data + }, + user: { + accessibleIds: ['1', '2'], // From our mock function + actualResults: userResult.data?.length || 0, + data: userResult.data + }, + message: 'Different users see different results based on access control' + }; + + } catch (error) { + console.error('โŒ Multi-user test failed:', error); + return { + error: 'Multi-user test failed', + details: error.message + }; + } + } +} + +// =================================== +// ADD TO YOUR MODULE +// =================================== + +/* +Add this to your resources-type.module.ts: + +import { RealDbIntegrationController } from './real-db-integration-controller'; + +@Module({ + imports: [ + TypeOrmModule.forFeature([Users]), // Make sure Users entity is available + TypeOrmJsonApiModule.forRoot({ + entities: [Users, Documents], + }) + ], + controllers: [TestController, RealDbIntegrationController], // Add the new controller +}) +export class ResourcesTypeModule {} +*/ + +// =================================== +// TESTING ENDPOINTS +// =================================== + +/* +NOW TEST THESE ENDPOINTS: + +1. GET /api/real-test/users-original + โ†’ Should return ALL users from database (no filtering) + +2. GET /api/real-test/users-access-controlled + โ†’ Should return ONLY users with IDs ['1','2','3','4','5'] (admin) or ['1','2'] (user) + +3. GET /api/real-test/compare + โ†’ Shows side-by-side comparison of original vs access-controlled results + +4. GET /api/real-test/test-different-users + โ†’ Tests admin vs regular user access patterns + +WHAT TO LOOK FOR: + +โœ… Original query returns all users in database +โœ… Access controlled query only returns users with IDs in access list +โœ… Admin user gets more results than regular user +โœ… SQL IN clause is properly generated and executed +โœ… No errors or crashes + +If you see SQL like: +SELECT * FROM users WHERE users.id IN ('1','2','3','4','5') LIMIT 10 + +Then our access control is working perfectly! ๐ŸŽ‰ +*/ \ No newline at end of file diff --git a/apps/json-api-server/src/app/resources/type-orm/controllers/testing/testing.controller.ts b/apps/json-api-server/src/app/resources/type-orm/controllers/testing/testing.controller.ts new file mode 100644 index 00000000..7e40c2e0 --- /dev/null +++ b/apps/json-api-server/src/app/resources/type-orm/controllers/testing/testing.controller.ts @@ -0,0 +1,96 @@ +// resources-type.module.ts - SIMPLIFIED VERSION + +// =================================== +// MANUAL TESTING IN CONTROLLER +// =================================== + +// Create a test controller to verify access control works +// users.controller.ts (create this file) + +import { Controller, Get, Query, Inject } from '@nestjs/common'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; +import { createSimpleAccessControlledService, testSimpleAccessControl } from '@yaser2us/json-api-nestjs-typeorm'; + +@Controller('testing') +export class TestingController { + constructor( + // @Inject(ORM_SERVICE) private readonly ormService: any, + // @Inject('USER_CONTEXT') private readonly userContext: any + ) {} + @Get('access-control') + testAccessControl() { + console.log('๐Ÿงช Testing access control function...'); + + // This just tests our access function logic - no DB needed + testSimpleAccessControl(); + + return { + message: 'Access control test completed - check console for output', + timestamp: new Date().toISOString() + }; + } + +} + +// =================================== +// ADD CONTROLLER TO MODULE +// =================================== + +// Update your resources-type.module.ts: + +// @Module({ +// imports: [ +// TypeOrmJsonApiModule.forRoot({ +// entities: [Users, Documents], +// providers: [ +// { +// provide: 'USER_CONTEXT', +// useValue: { +// id: 'test-user-123', +// workspaceId: 'test-workspace-123', +// roles: ['admin'] +// } +// } +// ] +// }) +// ], +// controllers: [UsersController], // Add this line +// exports: [TypeOrmJsonApiModule] +// }) +// export class ResourcesTypeModule {} + +// =================================== +// TESTING INSTRUCTIONS +// =================================== + +/* +NOW YOU CAN TEST: + +1. Start your server: + nx serve your-app + +2. Test original endpoint: + GET http://localhost:3000/api/users/original + + Should return all users (no access control) + +3. Test access-controlled endpoint: + GET http://localhost:3000/api/users + + Should return only accessible users based on mock access function + +4. Check console output for detailed logs: + ๐Ÿ” Access check: Users for user test-user-123 in workspace test-workspace-123 + ๐Ÿ”‘ Accessible IDs for Users: ['1', '2', '3', '4', '5'] + ๐Ÿ“Š Generated SQL: SELECT ... + โœ… Query executed: 3 items returned, 5 total + +5. Test different user roles by modifying USER_CONTEXT: + - Change roles from ['admin'] to ['user'] + - Should see different accessible IDs in console + +NEXT STEPS: +- Once this works, we can properly integrate the access control +- Then replace mock access function with real database lookups +- Then add access control to other methods (getOne, postOne, etc.) +*/ \ No newline at end of file diff --git a/apps/json-api-server/src/app/resources/type-orm/resources-type.module.ts b/apps/json-api-server/src/app/resources/type-orm/resources-type.module.ts index a0852684..85a7d62f 100644 --- a/apps/json-api-server/src/app/resources/type-orm/resources-type.module.ts +++ b/apps/json-api-server/src/app/resources/type-orm/resources-type.module.ts @@ -1,30 +1,84 @@ import { Module } from '@nestjs/common'; -import { JsonApiModule } from '@klerick/json-api-nestjs'; -import { TypeOrmJsonApiModule } from '@klerick/json-api-nestjs-typeorm'; +import { JsonApiModule, ORM_SERVICE } from '@yaser2us/json-api-nestjs'; +import { TypeOrmJsonApiModule, createSimpleAccessControlledService } from '@yaser2us/json-api-nestjs-typeorm'; + + import { Users, Addresses, Comments, Roles, BookList, + School, + User, + Workspace, + YasserNasser } from '@nestjs-json-api/typeorm-database'; import { ExtendBookListController } from './controllers/extend-book-list/extend-book-list.controller'; import { ExtendUserController } from './controllers/extend-user/extend-user.controller'; import { ExampleService } from './service/example.service'; +import { TestingController } from './controllers/testing/testing.controller'; +import { RealDbIntegrationController } from './controllers/testing/real-db-integration-controller'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { EnhancedUserContextPipe } from '../pipe.pipe'; @Module({ imports: [ + TypeOrmModule.forFeature([ + Users, + Addresses, + Comments, + Roles, + BookList, + School, + User, + Workspace, + YasserNasser + ]), // Add this line - makes repositories available + JsonApiModule.forRoot(TypeOrmJsonApiModule, { - entities: [Users, Addresses, Comments, Roles, BookList], + entities: [ + Users, + Addresses, + Comments, + Roles, + BookList, + School, + User, + Workspace, + YasserNasser + ], controllers: [ExtendBookListController, ExtendUserController], - providers: [ExampleService], + providers: [ + ExampleService, + // Add this provider for user context + { + provide: 'USER_CONTEXT', + useValue: { + id: 'test-user-123', + workspaceId: 'test-workspace-123', + roles: ['admin'] + } + }, + // Override the ORM service with our access-controlled version + // { + // provide: ORM_SERVICE, + // useFactory: (originalService: any, userContext: any) => { + // return createSimpleAccessControlledService(originalService, userContext); + // }, + // inject: [ORM_SERVICE, 'USER_CONTEXT'] + // } + ], options: { debug: true, requiredSelectField: false, operationUrl: 'operation', + pipeForQuery: EnhancedUserContextPipe, // โœจ Use custom pipe + enableContext: true }, }), ], + controllers: [TestingController, RealDbIntegrationController] }) -export class ResourcesTypeModule {} +export class ResourcesTypeModule { } diff --git a/apps/json-api-server/src/app/resources/type-orm/service/example.pipe.ts b/apps/json-api-server/src/app/resources/type-orm/service/example.pipe.ts index 3f4350e5..603a0a0f 100644 --- a/apps/json-api-server/src/app/resources/type-orm/service/example.pipe.ts +++ b/apps/json-api-server/src/app/resources/type-orm/service/example.pipe.ts @@ -4,7 +4,7 @@ import { PipeTransform, } from '@nestjs/common'; -import { Query } from '@klerick/json-api-nestjs'; +import { Query } from '@yaser2us/json-api-nestjs'; import { Users } from '@nestjs-json-api/typeorm-database'; export class ExamplePipe diff --git a/apps/json-api-server/src/app/resources/type-orm/service/guard.service.ts b/apps/json-api-server/src/app/resources/type-orm/service/guard.service.ts index a8567bc2..0be319c6 100644 --- a/apps/json-api-server/src/app/resources/type-orm/service/guard.service.ts +++ b/apps/json-api-server/src/app/resources/type-orm/service/guard.service.ts @@ -6,7 +6,7 @@ import { Injectable, } from '@nestjs/common'; import { Observable } from 'rxjs'; -import { entityForClass } from '@klerick/json-api-nestjs'; +import { entityForClass } from '@yaser2us/json-api-nestjs'; import { Request } from 'express'; import { Reflector } from '@nestjs/core'; diff --git a/apps/json-api-server/src/app/rpc/rpc.module.ts b/apps/json-api-server/src/app/rpc/rpc.module.ts index f3a8a998..c524758f 100644 --- a/apps/json-api-server/src/app/rpc/rpc.module.ts +++ b/apps/json-api-server/src/app/rpc/rpc.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { NestjsJsonRpcModule, TransportType } from '@klerick/nestjs-json-rpc'; +import { NestjsJsonRpcModule, TransportType } from '@yaser2us/nestjs-json-rpc'; import { RpcService } from './service/rpc.service'; @Module({ diff --git a/apps/json-api-server/src/app/rpc/service/rpc.service.ts b/apps/json-api-server/src/app/rpc/service/rpc.service.ts index 0e44c56d..2fd98654 100644 --- a/apps/json-api-server/src/app/rpc/service/rpc.service.ts +++ b/apps/json-api-server/src/app/rpc/service/rpc.service.ts @@ -8,7 +8,7 @@ import { createErrorCustomError, RpcHandler, RpcParamsPipe, -} from '@klerick/nestjs-json-rpc'; +} from '@yaser2us/nestjs-json-rpc'; import { ParseIntPipe } from '@nestjs/common'; @RpcHandler() diff --git a/apps/json-api-server/src/main.ts b/apps/json-api-server/src/main.ts index cfe15691..28d1dfda 100644 --- a/apps/json-api-server/src/main.ts +++ b/apps/json-api-server/src/main.ts @@ -32,7 +32,7 @@ async function bootstrap() { {} ); await app.init(); - const port = process.env.PORT || 3000; + const port = process.env.PORT || 3132; await app.listen(port); Logger.log( diff --git a/libs/json-api/json-api-nestjs-microorm/README.md b/libs/json-api/json-api-nestjs-microorm/README.md index ab6c3127..7486dbf6 100644 --- a/libs/json-api/json-api-nestjs-microorm/README.md +++ b/libs/json-api/json-api-nestjs-microorm/README.md @@ -4,7 +4,7 @@ MocroOrm adapter for **[json-api-nestjs](https://github.com/klerick/nestjs-json- ## Installation ```bash -$ npm install @klerick/json-api-nestjs-microorm +$ npm install @yaser2us/json-api-nestjs-microorm ``` ## Configuration params diff --git a/libs/json-api/json-api-nestjs-microorm/package.json b/libs/json-api/json-api-nestjs-microorm/package.json index 23e2507f..75599438 100644 --- a/libs/json-api/json-api-nestjs-microorm/package.json +++ b/libs/json-api/json-api-nestjs-microorm/package.json @@ -1,5 +1,5 @@ { - "name": "@klerick/json-api-nestjs-microorm", + "name": "@yaser2us/json-api-nestjs-microorm", "version": "0.1.0-beta.6", "type": "commonjs", "main": "./src/index.js", diff --git a/libs/json-api/json-api-nestjs-microorm/project.json b/libs/json-api/json-api-nestjs-microorm/project.json index 61aaaebb..2cb4fbc6 100644 --- a/libs/json-api/json-api-nestjs-microorm/project.json +++ b/libs/json-api/json-api-nestjs-microorm/project.json @@ -49,11 +49,11 @@ "command": "node tools/scripts/prepare-package-json.mjs json-api-nestjs-microorm" }, { - "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@klerick/json-api-nestjs-microorm", + "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@yaser2us/json-api-nestjs-microorm", "forwardAllArgs": false }, { - "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@klerick/json-api-nestjs-microorm", + "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@yaser2us/json-api-nestjs-microorm", "forwardAllArgs": false } ], diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/factory/index.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/factory/index.ts index d7d1b63a..e456f03f 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/factory/index.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/factory/index.ts @@ -21,8 +21,8 @@ import { ENTITY_PARAM_MAP, FIND_ONE_ROW_ENTITY, FindOneRowEntity, -} from '@klerick/json-api-nestjs'; -import { getEntityName } from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs'; +import { getEntityName } from '@yaser2us/json-api-nestjs-shared'; import { getProps, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/micro-orm-json-api.module.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/micro-orm-json-api.module.ts index 2cf56d9b..4a94da8f 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/micro-orm-json-api.module.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/micro-orm-json-api.module.ts @@ -4,7 +4,7 @@ import { PrepareParams, MODULE_OPTIONS_TOKEN, NestProvider, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { MicroOrmParam } from './type'; import { diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/mock-utils/index.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/mock-utils/index.ts index 80dc335d..b31bf3d7 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/mock-utils/index.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/mock-utils/index.ts @@ -1,13 +1,13 @@ import { Test, TestingModule } from '@nestjs/testing'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { EntityManager, MikroORM } from '@mikro-orm/core'; -import { QueryField } from '@klerick/json-api-nestjs-shared'; +import { QueryField } from '@yaser2us/json-api-nestjs-shared'; import { Query, CURRENT_ENTITY, MODULE_OPTIONS_TOKEN, JsonApiTransformerService, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { Addresses, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-helper/index.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-helper/index.spec.ts index c47befd4..db42a97e 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-helper/index.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-helper/index.spec.ts @@ -19,7 +19,7 @@ import { import { DEFAULT_ARRAY_TYPE, ENTITY_METADATA_TOKEN } from '../constants'; -import { TypeField } from '@klerick/json-api-nestjs'; +import { TypeField } from '@yaser2us/json-api-nestjs'; import { getProps, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-helper/index.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-helper/index.ts index 5edcefe3..c2a93c8a 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-helper/index.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-helper/index.ts @@ -3,7 +3,7 @@ import { EntityParam, TypeField, PrepareParams, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { MicroOrmParam } from '../type'; import { DEFAULT_ARRAY_TYPE } from '../constants'; diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-one/delete-one.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-one/delete-one.spec.ts index 46b6676d..f6877b2a 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-one/delete-one.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-one/delete-one.spec.ts @@ -1,5 +1,5 @@ import { EntityManager, MikroORM } from '@mikro-orm/core'; -import { ORM_SERVICE } from '@klerick/json-api-nestjs'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; import { dbRandomName, getModuleForPgLite, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-relationship/delete-relationship.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-relationship/delete-relationship.spec.ts index fb8bd829..892b5c51 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-relationship/delete-relationship.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-relationship/delete-relationship.spec.ts @@ -1,7 +1,7 @@ import { Collection, EntityManager, MikroORM } from '@mikro-orm/core'; import { faker } from '@faker-js/faker'; -import { ORM_SERVICE } from '@klerick/json-api-nestjs'; -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { Addresses, dbRandomName, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-relationship/delete-relationship.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-relationship/delete-relationship.ts index a61f54c4..4d44d56d 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-relationship/delete-relationship.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/delete-relationship/delete-relationship.ts @@ -1,9 +1,9 @@ import { NotFoundException } from '@nestjs/common'; -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { ValidateQueryError, PostRelationshipData, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { MicroOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-all.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-all.spec.ts index 7d7b6289..fbd5a3fa 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-all.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-all.spec.ts @@ -1,6 +1,6 @@ import { EntityManager, MikroORM } from '@mikro-orm/core'; import { faker } from '@faker-js/faker'; -import { ORM_SERVICE } from '@klerick/json-api-nestjs'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; import { Addresses, dbRandomName, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-all.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-all.ts index 4afa946b..7f0fe898 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-all.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-all.ts @@ -1,5 +1,5 @@ import { QueryFlag, wrap } from '@mikro-orm/core'; -import { Query } from '@klerick/json-api-nestjs'; +import { Query } from '@yaser2us/json-api-nestjs'; import { MicroOrmService } from '../../service'; import { getQueryForCount, getSortObject } from './get-query-for-count'; diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-query-for-count.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-query-for-count.spec.ts index 5fd1e311..9e06d0b0 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-query-for-count.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-query-for-count.spec.ts @@ -1,6 +1,6 @@ import { EntityManager, MikroORM } from '@mikro-orm/core'; -import { FilterOperand } from '@klerick/json-api-nestjs-shared'; -import { ORM_SERVICE } from '@klerick/json-api-nestjs'; +import { FilterOperand } from '@yaser2us/json-api-nestjs-shared'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; import { UserGroups, Users, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-query-for-count.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-query-for-count.ts index fca707a5..4c06103d 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-query-for-count.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-all/get-query-for-count.ts @@ -1,5 +1,5 @@ -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; -import { Query } from '@klerick/json-api-nestjs'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; +import { Query } from '@yaser2us/json-api-nestjs'; import type { QBQueryOrderMap, EntityKey } from '@mikro-orm/core'; import { MicroOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-one/get-one.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-one/get-one.spec.ts index 7aa063b9..c7b1b5c1 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-one/get-one.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-one/get-one.spec.ts @@ -1,5 +1,5 @@ import { EntityManager, MikroORM } from '@mikro-orm/core'; -import { ORM_SERVICE } from '@klerick/json-api-nestjs'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; import { dbRandomName, getDefaultQuery, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-one/get-one.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-one/get-one.ts index ec117a03..6d8e7928 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-one/get-one.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-one/get-one.ts @@ -1,5 +1,5 @@ import { NotFoundException } from '@nestjs/common'; -import { QueryOne, ValidateQueryError } from '@klerick/json-api-nestjs'; +import { QueryOne, ValidateQueryError } from '@yaser2us/json-api-nestjs'; import { wrap } from '@mikro-orm/core'; import { MicroOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-relationship/get-relationship.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-relationship/get-relationship.spec.ts index 8cfb373f..1fa7afe3 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-relationship/get-relationship.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-relationship/get-relationship.spec.ts @@ -1,8 +1,8 @@ import { Collection, EntityManager, MikroORM } from '@mikro-orm/core'; import { faker } from '@faker-js/faker'; import { NotFoundException } from '@nestjs/common'; -import { ORM_SERVICE } from '@klerick/json-api-nestjs'; -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { Addresses, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-relationship/get-relationship.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-relationship/get-relationship.ts index 3f965b70..ee16c7fe 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-relationship/get-relationship.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/get-relationship/get-relationship.ts @@ -1,6 +1,6 @@ -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { NotFoundException } from '@nestjs/common'; -import { ValidateQueryError } from '@klerick/json-api-nestjs'; +import { ValidateQueryError } from '@yaser2us/json-api-nestjs'; import { serialize } from '@mikro-orm/core'; import { MicroOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-one/patch-one.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-one/patch-one.spec.ts index 539545d6..857df05e 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-one/patch-one.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-one/patch-one.spec.ts @@ -1,6 +1,6 @@ import { Collection, EntityManager, MikroORM } from '@mikro-orm/core'; import { faker } from '@faker-js/faker'; -import { ORM_SERVICE, PatchData } from '@klerick/json-api-nestjs'; +import { ORM_SERVICE, PatchData } from '@yaser2us/json-api-nestjs'; import { Addresses, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-one/patch-one.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-one/patch-one.ts index ec92a9a3..d2897ce2 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-one/patch-one.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-one/patch-one.ts @@ -2,8 +2,8 @@ import { NotFoundException, UnprocessableEntityException, } from '@nestjs/common'; -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; -import { PatchData, ValidateQueryError } from '@klerick/json-api-nestjs'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; +import { PatchData, ValidateQueryError } from '@yaser2us/json-api-nestjs'; import { MicroOrmService } from '../../service'; export async function patchOne( diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-relationship/patch-relationship.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-relationship/patch-relationship.spec.ts index 32caa80c..815e3d5f 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-relationship/patch-relationship.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-relationship/patch-relationship.spec.ts @@ -1,7 +1,7 @@ import { Collection, EntityManager, MikroORM } from '@mikro-orm/core'; import { faker } from '@faker-js/faker'; -import { ORM_SERVICE } from '@klerick/json-api-nestjs'; -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { Addresses, dbRandomName, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-relationship/patch-relationship.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-relationship/patch-relationship.ts index b207350c..057d2df6 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-relationship/patch-relationship.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/patch-relationship/patch-relationship.ts @@ -1,5 +1,5 @@ -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; -import { PatchRelationshipData } from '@klerick/json-api-nestjs'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; +import { PatchRelationshipData } from '@yaser2us/json-api-nestjs'; import { getRelationship } from '../get-relationship/get-relationship'; import { MicroOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-one/post-one.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-one/post-one.spec.ts index 77c158c1..54581121 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-one/post-one.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-one/post-one.spec.ts @@ -1,7 +1,7 @@ import { Collection, EntityManager, MikroORM } from '@mikro-orm/core'; import { faker } from '@faker-js/faker'; import { BadRequestException } from '@nestjs/common'; -import { ORM_SERVICE, PostData } from '@klerick/json-api-nestjs'; +import { ORM_SERVICE, PostData } from '@yaser2us/json-api-nestjs'; import { Addresses, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-one/post-one.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-one/post-one.ts index 8f593510..e58cae8b 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-one/post-one.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-one/post-one.ts @@ -1,4 +1,4 @@ -import { PostData } from '@klerick/json-api-nestjs'; +import { PostData } from '@yaser2us/json-api-nestjs'; import { MicroOrmService } from '../../service'; export async function postOne( diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-relationship/post-relationship.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-relationship/post-relationship.spec.ts index b97fbfc6..e8935540 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-relationship/post-relationship.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-relationship/post-relationship.spec.ts @@ -1,7 +1,7 @@ import { Collection, EntityManager, MikroORM } from '@mikro-orm/core'; import { faker } from '@faker-js/faker'; -import { ORM_SERVICE } from '@klerick/json-api-nestjs'; -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { Addresses, dbRandomName, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-relationship/post-relationship.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-relationship/post-relationship.ts index 6bc62197..3af12a31 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-relationship/post-relationship.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/orm-methods/post-relationship/post-relationship.ts @@ -1,5 +1,5 @@ -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; -import { PostRelationshipData } from '@klerick/json-api-nestjs'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; +import { PostRelationshipData } from '@yaser2us/json-api-nestjs'; import { getRelationship } from '../get-relationship/get-relationship'; import { MicroOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/service/micro-orm-util.service.spec.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/service/micro-orm-util.service.spec.ts index 4c146c32..0f119f13 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/service/micro-orm-util.service.spec.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/service/micro-orm-util.service.spec.ts @@ -1,5 +1,5 @@ import { MikroORM, RawQueryFragment } from '@mikro-orm/core'; -import { FilterOperand } from '@klerick/json-api-nestjs-shared'; +import { FilterOperand } from '@yaser2us/json-api-nestjs-shared'; import { TestingModule } from '@nestjs/testing/testing-module'; import { MicroOrmUtilService } from './micro-orm-util.service'; diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/service/micro-orm-util.service.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/service/micro-orm-util.service.ts index 20a9a0ea..27f57a8a 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/service/micro-orm-util.service.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/service/micro-orm-util.service.ts @@ -30,12 +30,12 @@ import { Query, QueryOne, Relationships, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { RelationKeys, FilterOperand, ObjectTyped, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { kebabCase } from 'change-case-commonjs'; import { CURRENT_ENTITY_MANAGER_TOKEN, diff --git a/libs/json-api/json-api-nestjs-microorm/src/lib/service/microorm-service.ts b/libs/json-api/json-api-nestjs-microorm/src/lib/service/microorm-service.ts index 37e1ee96..790646c0 100644 --- a/libs/json-api/json-api-nestjs-microorm/src/lib/service/microorm-service.ts +++ b/libs/json-api/json-api-nestjs-microorm/src/lib/service/microorm-service.ts @@ -3,7 +3,7 @@ import { QueryField, ResourceObject, ResourceObjectRelationships, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { JsonApiTransformerService, OrmService, @@ -13,7 +13,7 @@ import { PostRelationshipData, Query, QueryOne, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { getAll, @@ -27,7 +27,7 @@ import { postRelationship, } from '../orm-methods'; import { MicroOrmUtilService } from './micro-orm-util.service'; -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; export class MicroOrmService implements OrmService diff --git a/libs/json-api/json-api-nestjs-microorm/tsconfig.spec.json b/libs/json-api/json-api-nestjs-microorm/tsconfig.spec.json index 0e95750a..6733c8e3 100644 --- a/libs/json-api/json-api-nestjs-microorm/tsconfig.spec.json +++ b/libs/json-api/json-api-nestjs-microorm/tsconfig.spec.json @@ -9,10 +9,10 @@ "node" ], "paths": { - "@klerick/json-api-nestjs-shared": [ + "@yaser2us/json-api-nestjs-shared": [ "libs/json-api/json-api-nestjs-shared/src/index.ts" ], - "@klerick/json-api-nestjs": [ + "@yaser2us/json-api-nestjs": [ "libs/json-api/json-api-nestjs/src/index.ts" ] }, diff --git a/libs/json-api/json-api-nestjs-sdk/README.md b/libs/json-api/json-api-nestjs-sdk/README.md index 51cc5bf0..b9ac0717 100644 --- a/libs/json-api/json-api-nestjs-sdk/README.md +++ b/libs/json-api/json-api-nestjs-sdk/README.md @@ -14,7 +14,7 @@ The plugin of client for help work with JSON API over [json-api-nestjs](https:// ## Installation ```bash $ -npm install @klerick/json-api-nestjs-sdk +npm install @yaser2us/json-api-nestjs-sdk ``` ## Example @@ -27,7 +27,7 @@ import { FilterOperand, JsonApiJs, JsonSdkPromise, -} from '@klerick/json-api-nestjs-sdk'; +} from '@yaser2us/json-api-nestjs-sdk'; import { faker } from '@faker-js/faker'; import axios from 'axios'; @@ -97,7 +97,7 @@ import { provideJsonApi, AtomicFactory, JsonApiSdkService -} from '@klerick/json-api-nestjs-sdk/ngModule'; +} from '@yaser2us/json-api-nestjs-sdk/ngModule'; import { provideHttpClient, withFetch, diff --git a/libs/json-api/json-api-nestjs-sdk/package.json b/libs/json-api/json-api-nestjs-sdk/package.json index aadbd519..db26994a 100644 --- a/libs/json-api/json-api-nestjs-sdk/package.json +++ b/libs/json-api/json-api-nestjs-sdk/package.json @@ -1,5 +1,5 @@ { - "name": "@klerick/json-api-nestjs-sdk", + "name": "@yaser2us/json-api-nestjs-sdk", "version": "10.0.0-beta.3", "description": "Helper for client JsonAPi Plugin for NestJs", "keywords": [ diff --git a/libs/json-api/json-api-nestjs-sdk/project.json b/libs/json-api/json-api-nestjs-sdk/project.json index d2f005f0..b05ad578 100644 --- a/libs/json-api/json-api-nestjs-sdk/project.json +++ b/libs/json-api/json-api-nestjs-sdk/project.json @@ -80,11 +80,11 @@ "command": "node tools/scripts/prepare-package-json.mjs json-api-nestjs-sdk" }, { - "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@klerick/json-api-nestjs-sdk", + "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@yaser2us/json-api-nestjs-sdk", "forwardAllArgs": false }, { - "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@klerick/json-api-nestjs-sdk", + "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@yaser2us/json-api-nestjs-sdk", "forwardAllArgs": false } ], diff --git a/libs/json-api/json-api-nestjs-sdk/src/index.ts b/libs/json-api/json-api-nestjs-sdk/src/index.ts index 7713ed70..963d4052 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/index.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/index.ts @@ -2,7 +2,7 @@ export { FilterOperand, ResourceObject, QueryField, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; export { JsonApiUtilsService, JsonApiSdkService } from './lib/service'; export * from './lib/json-api-js'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/service/atomic-operations.service.spec.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/service/atomic-operations.service.spec.ts index bc995b71..1b2b5b2d 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/service/atomic-operations.service.spec.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/service/atomic-operations.service.spec.ts @@ -1,5 +1,5 @@ import { lastValueFrom, of } from 'rxjs'; -import { KEY_MAIN_OUTPUT_SCHEMA } from '@klerick/json-api-nestjs-shared'; +import { KEY_MAIN_OUTPUT_SCHEMA } from '@yaser2us/json-api-nestjs-shared'; import { AtomicOperationsService } from './atomic-operations.service'; import { JsonApiUtilsService } from './index'; import { HttpInnerClient, JsonApiSdkConfig } from '../types'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/service/atomic-operations.service.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/service/atomic-operations.service.ts index 43250aff..0a40de42 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/service/atomic-operations.service.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/service/atomic-operations.service.ts @@ -3,7 +3,7 @@ import { KEY_MAIN_INPUT_SCHEMA, KEY_MAIN_OUTPUT_SCHEMA, RelationKeys, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { map } from 'rxjs/operators'; import { GenerateAtomicBody } from '../utils'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/service/fetch-inner-client.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/service/fetch-inner-client.ts index 3ec374f4..7b6f1cba 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/service/fetch-inner-client.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/service/fetch-inner-client.ts @@ -4,7 +4,7 @@ import { ResourceObject, RelationKeys, ResourceObjectRelationships, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { ParamObject, HttpParams } from '../utils'; import { diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/service/json-api-sdk.service.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/service/json-api-sdk.service.ts index 063e38c2..e65a7039 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/service/json-api-sdk.service.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/service/json-api-sdk.service.ts @@ -2,7 +2,7 @@ import { RelationKeys, ResourceObject, EntityClass, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { EMPTY, expand, Observable, reduce, throwError } from 'rxjs'; import { map } from 'rxjs/operators'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/service/json-api-utils.service.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/service/json-api-utils.service.ts index 13a4cc82..fb3ce326 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/service/json-api-utils.service.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/service/json-api-utils.service.ts @@ -8,7 +8,7 @@ import { ResourceObject, ResourceObjectRelationships, Include, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { kebabCase } from 'change-case-commonjs'; import { JsonApiSdkConfig, diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/types/atomic-operation.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/types/atomic-operation.ts index 6457e4b2..e3eff927 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/types/atomic-operation.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/types/atomic-operation.ts @@ -1,4 +1,4 @@ -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { Observable } from 'rxjs'; import { ReturnIfArray } from './utils'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/types/atomic-type.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/types/atomic-type.ts index 8db6b354..f0e97a70 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/types/atomic-type.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/types/atomic-type.ts @@ -3,7 +3,7 @@ import { KEY_MAIN_OUTPUT_SCHEMA, Operation, ResourceObject, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { AtomicMainOperations } from './atomic-operation'; export type BodyType = { diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/types/filter-operand.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/types/filter-operand.ts index ce2afdff..dbaabb13 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/types/filter-operand.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/types/filter-operand.ts @@ -1,4 +1,4 @@ -import { FilterOperand } from '@klerick/json-api-nestjs-shared'; +import { FilterOperand } from '@yaser2us/json-api-nestjs-shared'; export type FilterOperandForString = Exclude< FilterOperand, diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/types/http-inner-client.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/types/http-inner-client.ts index 9ad912ad..3aba715b 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/types/http-inner-client.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/types/http-inner-client.ts @@ -3,7 +3,7 @@ import { RelationKeys, ResourceObject, ResourceObjectRelationships, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { ParamObject } from '../utils'; import { PostData, PatchData, RelationBodyData } from './http-request-params'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/types/http-request-params.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/types/http-request-params.ts index 78f4e766..b25276a0 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/types/http-request-params.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/types/http-request-params.ts @@ -3,7 +3,7 @@ import { BaseAttribute, RelationKeys, BaseMainData, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; export type Relationships< Entity extends object, diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/types/promise-json-api-sdk.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/types/promise-json-api-sdk.ts index 7b4bc141..19f926ca 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/types/promise-json-api-sdk.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/types/promise-json-api-sdk.ts @@ -1,4 +1,4 @@ -import { EntityClass, RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { EntityClass, RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { QueryParams, QueryParamsForOneItem } from './query-params'; import { EntityArray } from '../utils'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/types/query-params.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/types/query-params.ts index 66a4aa8c..5404d86b 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/types/query-params.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/types/query-params.ts @@ -3,7 +3,7 @@ import { RelationKeys, PropertyKeys, TypeOfArray, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { Operands, OperandsRelation } from './filter-operand'; export type SortType = 'ASC' | 'DESC'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/utils/adapter-for-axios.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/utils/adapter-for-axios.ts index 27340bab..e8226a83 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/utils/adapter-for-axios.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/utils/adapter-for-axios.ts @@ -2,7 +2,7 @@ import { RelationKeys, ResourceObject, ResourceObjectRelationships, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { Axios, AxiosResponse, Method } from 'axios'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/utils/entity-array.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/utils/entity-array.ts index a2bedb40..a6344222 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/utils/entity-array.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/utils/entity-array.ts @@ -1,4 +1,4 @@ -import { PageProps } from '@klerick/json-api-nestjs-shared'; +import { PageProps } from '@yaser2us/json-api-nestjs-shared'; export class EntityArray extends Array { constructor(items: T[], private pageProps: PageProps) { diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/utils/generate-atomic-body.spec.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/utils/generate-atomic-body.spec.ts index ad28e07e..86017ff8 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/utils/generate-atomic-body.spec.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/utils/generate-atomic-body.spec.ts @@ -1,4 +1,4 @@ -import { Operation } from '@klerick/json-api-nestjs-shared'; +import { Operation } from '@yaser2us/json-api-nestjs-shared'; import { GenerateAtomicBody } from './generate-atomic-body'; import { JsonApiUtilsService } from '../service'; import { JsonApiSdkConfig } from '../types'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/lib/utils/generate-atomic-body.ts b/libs/json-api/json-api-nestjs-sdk/src/lib/utils/generate-atomic-body.ts index 6ad80cef..c227bba4 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/lib/utils/generate-atomic-body.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/lib/utils/generate-atomic-body.ts @@ -1,4 +1,4 @@ -import { Operation, RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { Operation, RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { AtomicMainOperations, JsonApiSdkConfig, BodyType } from '../types'; import { getTypeForReq } from './utils'; diff --git a/libs/json-api/json-api-nestjs-sdk/src/ngModule.ts b/libs/json-api/json-api-nestjs-sdk/src/ngModule.ts index 57d8942c..108c6a14 100644 --- a/libs/json-api/json-api-nestjs-sdk/src/ngModule.ts +++ b/libs/json-api/json-api-nestjs-sdk/src/ngModule.ts @@ -1,4 +1,4 @@ -export { FilterOperand, ResourceObject } from '@klerick/json-api-nestjs-shared'; +export { FilterOperand, ResourceObject } from '@yaser2us/json-api-nestjs-shared'; export { AtomicFactory, diff --git a/libs/json-api/json-api-nestjs-sdk/tsconfig.spec.json b/libs/json-api/json-api-nestjs-sdk/tsconfig.spec.json index 237bf4b5..9fd3b068 100644 --- a/libs/json-api/json-api-nestjs-sdk/tsconfig.spec.json +++ b/libs/json-api/json-api-nestjs-sdk/tsconfig.spec.json @@ -6,7 +6,7 @@ "moduleResolution": "node10", "types": ["jest", "node"], "paths": { - "@klerick/json-api-nestjs-shared": [ + "@yaser2us/json-api-nestjs-shared": [ "libs/json-api/json-api-nestjs-shared/src/index.ts" ] }, diff --git a/libs/json-api/json-api-nestjs-shared/README.md b/libs/json-api/json-api-nestjs-shared/README.md index 45bd9c0f..0ec5d671 100644 --- a/libs/json-api/json-api-nestjs-shared/README.md +++ b/libs/json-api/json-api-nestjs-shared/README.md @@ -5,5 +5,5 @@ Helper module for **[json-api-nestjs](https://github.com/klerick/nestjs-json-api ## Installation ```bash -$ npm install @klerick/json-api-nestjs-shared +$ npm install @yaser2us/json-api-nestjs-shared ``` diff --git a/libs/json-api/json-api-nestjs-shared/package.json b/libs/json-api/json-api-nestjs-shared/package.json index b23fc3b3..0de94a42 100644 --- a/libs/json-api/json-api-nestjs-shared/package.json +++ b/libs/json-api/json-api-nestjs-shared/package.json @@ -1,5 +1,5 @@ { - "name": "@klerick/json-api-nestjs-shared", + "name": "@yaser2us/json-api-nestjs-shared", "version": "1.0.0-beta.3", "description": "Shared Helper for JsonApi Plugin for NestJs", "keywords": [ diff --git a/libs/json-api/json-api-nestjs-shared/project.json b/libs/json-api/json-api-nestjs-shared/project.json index cdbecdab..d19f031f 100644 --- a/libs/json-api/json-api-nestjs-shared/project.json +++ b/libs/json-api/json-api-nestjs-shared/project.json @@ -62,11 +62,11 @@ "command": "node tools/scripts/prepare-package-json.mjs json-api-nestjs-shared" }, { - "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@klerick/json-api-nestjs-shared", + "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@yaser2us/json-api-nestjs-shared", "forwardAllArgs": false }, { - "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@klerick/json-api-nestjs-shared", + "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@yaser2us/json-api-nestjs-shared", "forwardAllArgs": false } ], diff --git a/libs/json-api/json-api-nestjs-shared/src/lib/types/query-type.ts b/libs/json-api/json-api-nestjs-shared/src/lib/types/query-type.ts index f7dc00c1..f7834381 100644 --- a/libs/json-api/json-api-nestjs-shared/src/lib/types/query-type.ts +++ b/libs/json-api/json-api-nestjs-shared/src/lib/types/query-type.ts @@ -4,6 +4,7 @@ export enum QueryField { include = 'include', page = 'page', fields = 'fields', + context = 'context', } export enum FilterOperand { diff --git a/libs/json-api/json-api-nestjs-typeorm/README.md b/libs/json-api/json-api-nestjs-typeorm/README.md index 8121b63b..620e6960 100644 --- a/libs/json-api/json-api-nestjs-typeorm/README.md +++ b/libs/json-api/json-api-nestjs-typeorm/README.md @@ -5,7 +5,7 @@ TypeOrm adapter for **[json-api-nestjs](https://github.com/klerick/nestjs-json-a ## Installation ```bash -$ npm install @klerick/json-api-nestjs-typeorm +$ npm install @yaser2us/json-api-nestjs-typeorm ``` diff --git a/libs/json-api/json-api-nestjs-typeorm/package.json b/libs/json-api/json-api-nestjs-typeorm/package.json index 59184297..7ebd20d9 100644 --- a/libs/json-api/json-api-nestjs-typeorm/package.json +++ b/libs/json-api/json-api-nestjs-typeorm/package.json @@ -1,5 +1,5 @@ { - "name": "@klerick/json-api-nestjs-typeorm", + "name": "@yaser2us/json-api-nestjs-typeorm", "version": "0.1.0-beta.3", "dependencies": { "tslib": ">2.3.0", diff --git a/libs/json-api/json-api-nestjs-typeorm/project.json b/libs/json-api/json-api-nestjs-typeorm/project.json index b5922627..ea157533 100644 --- a/libs/json-api/json-api-nestjs-typeorm/project.json +++ b/libs/json-api/json-api-nestjs-typeorm/project.json @@ -31,11 +31,11 @@ "command": "node tools/scripts/prepare-package-json.mjs json-api-nestjs-typeorm" }, { - "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@klerick/json-api-nestjs-typeorm", + "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@yaser2us/json-api-nestjs-typeorm", "forwardAllArgs": false }, { - "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@klerick/json-api-nestjs-typeorm", + "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@yaser2us/json-api-nestjs-typeorm", "forwardAllArgs": false } ], diff --git a/libs/json-api/json-api-nestjs-typeorm/src/index.ts b/libs/json-api/json-api-nestjs-typeorm/src/index.ts index 9d0183f3..ebc9928c 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/index.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/index.ts @@ -1 +1,2 @@ export * from './lib/type-orm-json-api.module'; +export * from './lib/orm-methods/get-all/access-controlled-get-all'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/factory/index.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/factory/index.ts index 8d2e48ff..2b535c61 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/factory/index.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/factory/index.ts @@ -12,8 +12,8 @@ import { ORM_SERVICE, MODULE_OPTIONS_TOKEN, ENTITY_PARAM_MAP, -} from '@klerick/json-api-nestjs'; -import { getEntityName } from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs'; +import { getEntityName } from '@yaser2us/json-api-nestjs-shared'; import { kebabCase } from 'change-case-commonjs'; import { DataSource, EntityManager, EntityTarget, Repository } from 'typeorm'; @@ -180,4 +180,4 @@ export function OrmServiceFactory() { provide: ORM_SERVICE, useClass: TypeOrmService, }; -} +} \ No newline at end of file diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/index.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/index.ts index fd6d6101..2acde97f 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/index.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/index.ts @@ -1,2 +1,2 @@ export * from './type-orm-json-api.module'; -export * from './type'; +export * from './type'; \ No newline at end of file diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/mock-utils/index.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/mock-utils/index.ts index ef80c3df..81cefe8d 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/mock-utils/index.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/mock-utils/index.ts @@ -12,8 +12,8 @@ import { DEFAULT_QUERY_PAGE, JsonApiTransformerService, Query, -} from '@klerick/json-api-nestjs'; -import { QueryField } from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs'; +import { QueryField } from '@yaser2us/json-api-nestjs-shared'; import { PGliteDriver, getPGliteInstance } from 'typeorm-pglite'; import { DataSource, Repository } from 'typeorm'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-helper/index.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-helper/index.spec.ts index 3afa116f..d40914c2 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-helper/index.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-helper/index.spec.ts @@ -1,5 +1,5 @@ import { Repository } from 'typeorm'; -import { TypeField } from '@klerick/json-api-nestjs'; +import { TypeField } from '@yaser2us/json-api-nestjs'; import { getRepository, Users, diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-helper/index.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-helper/index.ts index 65506d34..4e3148f3 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-helper/index.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-helper/index.ts @@ -1,4 +1,4 @@ -import { EntityParam, TypeField } from '@klerick/json-api-nestjs'; +import { EntityParam, TypeField } from '@yaser2us/json-api-nestjs'; import { Repository } from 'typeorm'; export const getRelation = (repository: Repository) => diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-one/delete-one.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-one/delete-one.spec.ts index 574d98fc..eada37ef 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-one/delete-one.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-one/delete-one.spec.ts @@ -1,5 +1,5 @@ import { TestingModule } from '@nestjs/testing'; -import { ORM_SERVICE } from '@klerick/json-api-nestjs'; +import { ORM_SERVICE } from '@yaser2us/json-api-nestjs'; import { OrmServiceFactory } from '../../factory'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-relationship/delete-relationship.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-relationship/delete-relationship.spec.ts index c23c3430..57a0904b 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-relationship/delete-relationship.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-relationship/delete-relationship.spec.ts @@ -2,7 +2,7 @@ import { TestingModule } from '@nestjs/testing'; import { JsonApiTransformerService, ORM_SERVICE, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { Repository } from 'typeorm'; import { TypeOrmService, TypeormUtilsService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-relationship/delete-relationship.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-relationship/delete-relationship.ts index bff17b7a..55508d4f 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-relationship/delete-relationship.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/delete-relationship/delete-relationship.ts @@ -1,5 +1,5 @@ -import { PostRelationshipData } from '@klerick/json-api-nestjs'; -import { RelationKeys } from '@klerick/json-api-nestjs-shared'; +import { PostRelationshipData } from '@yaser2us/json-api-nestjs'; +import { RelationKeys } from '@yaser2us/json-api-nestjs-shared'; import { TypeOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/access-controlled-get-all.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/access-controlled-get-all.spec.ts new file mode 100644 index 00000000..ad006e59 --- /dev/null +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/access-controlled-get-all.spec.ts @@ -0,0 +1,8 @@ +import { testSimpleAccessControl } from './access-controlled-get-all'; + +describe('Access Controlled getAll', () => { + it('should test mock access function', () => { + testSimpleAccessControl(); + // Check console output for now + }); +}); \ No newline at end of file diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/access-controlled-get-all.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/access-controlled-get-all.ts new file mode 100644 index 00000000..a3e00a6d --- /dev/null +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/access-controlled-get-all.ts @@ -0,0 +1,215 @@ +// simple-access-controlled-get-all.ts +// Simplified POC - Avoids complex TypeScript generic issues + +import { Query } from '@yaser2us/json-api-nestjs'; +import { ResourceObject } from '@yaser2us/json-api-nestjs-shared'; +import { TypeOrmService } from '../../service'; + +// ====================== +// SIMPLE MOCK ACCESS FUNCTION +// ====================== + +interface UserContext { + id: string; + workspaceId: string; + roles: string[]; +} + +const mockAccessFunction = (entityType: string, user: UserContext): string[] => { + console.log(`๐Ÿ” Access check: ${entityType} for user ${user.id} in workspace ${user.workspaceId}`); + + // Mock logic based on entity type and user + switch (entityType) { + case 'Users': + if (user.roles.includes('admin')) { + return ['1', '2', '3', '4', '5', '15', '17', '18', '19', '13', '11', '25', '27']; // Admin sees all users + } else { + return ['1', '2']; // Regular user sees limited users + } + + case 'School': + if (user.roles.includes('admin')) { + return ['1', '2', '3', '4', '5', '15', '17', '18', '19', '13', '11', '25', '27']; // Admin sees all users + } else { + return ['1', '2']; // Regular user sees limited users + } + + case 'Documents': + if (user.workspaceId === 'workspace-123') { + return ['10', '11', '12']; // User has access to these documents + } else { + return []; // No access to documents in other workspaces + } + + case 'Projects': + return ['100', '101']; // User has access to these projects + + default: + console.warn(`โŒ Unknown entity type: ${entityType}`); + return []; // No access by default + } +}; + +// ====================== +// SIMPLE ACCESS CONTROLLED getAll +// ====================== + +export async function simpleAccessControlledGetAll( + service: any, // Using any to avoid generic complexity + query: any, + userContext: UserContext +): Promise { + + console.log('๐Ÿš€ Starting simple access-controlled getAll...'); + + // Step 1: Get entity type from repository metadata + const entityType = service.repository.metadata.name; + console.log(`๐Ÿ“‹ Entity type: ${entityType}`); + + // Step 2: Get accessible IDs using simple access function + const accessibleIds = mockAccessFunction(entityType, userContext); + console.log(`๐Ÿ”‘ Accessible IDs for ${entityType}:`, accessibleIds); + + // Step 3: If no access, return empty result immediately + if (accessibleIds.length === 0) { + console.log('โŒ No accessible IDs - returning empty result'); + return { + meta: { + pageNumber: query.page?.number || 1, + totalItems: 0, + pageSize: query.page?.size || 10, + }, + data: [], + }; + } + + // Step 4: Build a simple query with access control + const primaryColumn = service.typeormUtilsService.currentPrimaryColumn; + const currentAlias = service.typeormUtilsService.currentAlias; + + console.log(`๐Ÿ”ง Primary column: ${String(primaryColumn)}, Alias: ${currentAlias}`); + + // Step 5: Create a simple query builder with access control + const queryBuilder = service.repository + .createQueryBuilder(currentAlias) + .where(`${currentAlias}.${String(primaryColumn)} IN (:...accessibleIds)`, { + accessibleIds + }); + + // Step 6: Apply pagination if provided + const pageSize = query.page?.size || 10; + const pageNumber = query.page?.number || 1; + const skip = (pageNumber - 1) * pageSize; + + queryBuilder.offset(skip).limit(pageSize); + + console.log('๐Ÿ“Š Generated SQL:', queryBuilder.getQuery()); + console.log('๐Ÿ“Š Parameters:', queryBuilder.getParameters()); + + // Step 7: Execute the query + const totalItems = await queryBuilder.getCount(); + const resultData = await queryBuilder.getMany(); + + console.log(`โœ… Query executed: ${resultData.length} items returned, ${totalItems} total`); + + // Step 8: Return in JSON API format (simplified) + return { + meta: { + pageNumber, + totalItems, + pageSize, + }, + data: resultData, + }; +} + +// ====================== +// SIMPLE FACTORY INTEGRATION +// ====================== + +export function createSimpleAccessControlledService( + originalService: any, + userContext: UserContext +): any { + + console.log('๐Ÿญ Creating simple access-controlled service...'); + + // Create a wrapper object + const wrapper = { + ...originalService, + getAll: async function (query: any) { + return simpleAccessControlledGetAll(originalService, query, userContext); + } + }; + + console.log('โœ… Simple access-controlled service created'); + return wrapper; +} + +// ====================== +// SIMPLE TEST FUNCTION +// ====================== + +export function testSimpleAccessControl() { + console.log('๐Ÿงช Testing simple access control...'); + + // Test different user scenarios + const adminUser: UserContext = { + id: 'user-123', + workspaceId: 'workspace-123', + roles: ['admin'] + }; + + const regularUser: UserContext = { + id: 'user-456', + workspaceId: 'workspace-123', + roles: ['user'] + }; + + console.log('๐Ÿ‘จโ€๐Ÿ’ผ Admin user access to Users:'); + const adminUserAccess = mockAccessFunction('Users', adminUser); + console.log('Result:', adminUserAccess); + + console.log('๐Ÿ‘ค Regular user access to Users:'); + const regularUserAccess = mockAccessFunction('Users', regularUser); + console.log('Result:', regularUserAccess); + + console.log('๐Ÿ“„ Admin user access to Documents:'); + const adminDocAccess = mockAccessFunction('Documents', adminUser); + console.log('Result:', adminDocAccess); + + console.log('โŒ Regular user access to unknown entity:'); + const unknownAccess = mockAccessFunction('UnknownEntity', regularUser); + console.log('Result:', unknownAccess); +} + +// ====================== +// USAGE NOTES +// ====================== + +/* +USAGE: + +1. In your controller or service: + +const userContext = { + id: 'user-123', + workspaceId: 'workspace-123', + roles: ['admin'] +}; + +const accessService = createSimpleAccessControlledService(originalTypeOrmService, userContext); + +const result = await accessService.getAll({ + page: { number: 1, size: 10 } +}); + +2. To test the access function: + +testSimpleAccessControl(); + +3. Check console for detailed logging of access decisions and SQL generation. + +This version avoids all the complex TypeScript generic issues and focuses on +proving the concept works! +*/ \ No newline at end of file diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/get-all.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/get-all.spec.ts index c736c1e9..bb7cccf4 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/get-all.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/get-all.spec.ts @@ -2,7 +2,7 @@ import { TestingModule } from '@nestjs/testing'; import { JsonApiTransformerService, ORM_SERVICE, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { Equal, Repository } from 'typeorm'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/get-all.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/get-all.ts index a010259f..64c1764a 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/get-all.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-all/get-all.ts @@ -1,5 +1,5 @@ -import { Query, ASC, DESC } from '@klerick/json-api-nestjs'; -import { ObjectTyped, ResourceObject } from '@klerick/json-api-nestjs-shared'; +import { Query, ASC, DESC } from '@yaser2us/json-api-nestjs'; +import { ObjectTyped, ResourceObject } from '@yaser2us/json-api-nestjs-shared'; import { TypeOrmService } from '../../service'; @@ -23,10 +23,11 @@ export async function getAll( ): Promise> { const { fields, include, sort, page } = query; + console.log('๐Ÿ‘ค getAll:', query.context, JSON.stringify(query,null,2)); + let defaultSortObject: OrderByCondition = { - [`${ - this.typeormUtilsService.currentAlias - }.${this.typeormUtilsService.currentPrimaryColumn.toString()}`]: ASC, + [`${this.typeormUtilsService.currentAlias + }.${this.typeormUtilsService.currentPrimaryColumn.toString()}`]: ASC, }; const includeForCountQuery = new Set(); diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-one/get-one.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-one/get-one.spec.ts index a6b296e1..89ea4344 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-one/get-one.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-one/get-one.spec.ts @@ -3,7 +3,7 @@ import { NotFoundException } from '@nestjs/common'; import { JsonApiTransformerService, ORM_SERVICE, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { Equal, Repository } from 'typeorm'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-one/get-one.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-one/get-one.ts index b39eccc0..0eb498c8 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-one/get-one.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-one/get-one.ts @@ -1,6 +1,6 @@ import { NotFoundException } from '@nestjs/common'; -import { ValidateQueryError, QueryOne } from '@klerick/json-api-nestjs'; -import { ObjectTyped, ResourceObject } from '@klerick/json-api-nestjs-shared'; +import { ValidateQueryError, QueryOne } from '@yaser2us/json-api-nestjs'; +import { ObjectTyped, ResourceObject } from '@yaser2us/json-api-nestjs-shared'; import { TypeOrmService } from '../../service'; export async function getOne( diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-relationship/get-relationship.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-relationship/get-relationship.spec.ts index 2d6bac98..51ea8c84 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-relationship/get-relationship.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-relationship/get-relationship.spec.ts @@ -1,7 +1,7 @@ import { JsonApiTransformerService, ORM_SERVICE, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { TestingModule } from '@nestjs/testing'; import { NotFoundException } from '@nestjs/common'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-relationship/get-relationship.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-relationship/get-relationship.ts index 76ace4cd..9ab01fb0 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-relationship/get-relationship.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/get-relationship/get-relationship.ts @@ -2,8 +2,8 @@ import { NotFoundException } from '@nestjs/common'; import { RelationKeys, ResourceObjectRelationships, -} from '@klerick/json-api-nestjs-shared'; -import { ValidateQueryError } from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs-shared'; +import { ValidateQueryError } from '@yaser2us/json-api-nestjs'; import { TypeOrmService } from '../../service'; export async function getRelationship< diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/index.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/index.ts index 92f7bb57..23ebca09 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/index.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/index.ts @@ -7,3 +7,4 @@ export { getRelationship } from './get-relationship/get-relationship'; export { postRelationship } from './post-relationship/post-relationship'; export { deleteRelationship } from './delete-relationship/delete-relationship'; export { patchRelationship } from './patch-relationship/patch-relationship'; +export { simpleAccessControlledGetAll, createSimpleAccessControlledService } from './get-all/access-controlled-get-all'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-one/patch-one.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-one/patch-one.spec.ts index 94e7183e..85257a2a 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-one/patch-one.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-one/patch-one.spec.ts @@ -4,7 +4,7 @@ import { ORM_SERVICE, PatchData, PostData, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { Repository } from 'typeorm'; import { TypeOrmService, TypeormUtilsService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-one/patch-one.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-one/patch-one.ts index aec5e470..709a4474 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-one/patch-one.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-one/patch-one.ts @@ -6,8 +6,8 @@ import { ResourceObject, ObjectTyped, QueryField, -} from '@klerick/json-api-nestjs-shared'; -import { PatchData, Query, ValidateQueryError } from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs-shared'; +import { PatchData, Query, ValidateQueryError } from '@yaser2us/json-api-nestjs'; import { DeepPartial } from 'typeorm'; import { TypeOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-relationship/patch-relationship.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-relationship/patch-relationship.spec.ts index 27256569..a2df8025 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-relationship/patch-relationship.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-relationship/patch-relationship.spec.ts @@ -2,7 +2,7 @@ import { TestingModule } from '@nestjs/testing'; import { JsonApiTransformerService, ORM_SERVICE, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { Repository } from 'typeorm'; import { TypeOrmService, TypeormUtilsService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-relationship/patch-relationship.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-relationship/patch-relationship.ts index 4061d5d0..3586e51f 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-relationship/patch-relationship.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/patch-relationship/patch-relationship.ts @@ -1,8 +1,8 @@ -import { PatchRelationshipData } from '@klerick/json-api-nestjs'; +import { PatchRelationshipData } from '@yaser2us/json-api-nestjs'; import { RelationKeys, ResourceObjectRelationships, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { getRelationship } from '../get-relationship/get-relationship'; import { TypeOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-one/post-one.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-one/post-one.spec.ts index d5b4a27d..494b9a4d 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-one/post-one.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-one/post-one.spec.ts @@ -3,7 +3,7 @@ import { JsonApiTransformerService, ORM_SERVICE, PostData, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { Repository } from 'typeorm'; import { TypeOrmService, TypeormUtilsService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-one/post-one.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-one/post-one.ts index 41ed1634..203e4f04 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-one/post-one.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-one/post-one.ts @@ -1,5 +1,5 @@ -import { PostData, Query } from '@klerick/json-api-nestjs'; -import { QueryField, ResourceObject } from '@klerick/json-api-nestjs-shared'; +import { PostData, Query } from '@yaser2us/json-api-nestjs'; +import { QueryField, ResourceObject } from '@yaser2us/json-api-nestjs-shared'; import { DeepPartial } from 'typeorm'; import { TypeOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-relationship/post-relationship.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-relationship/post-relationship.spec.ts index 980b99fb..7ee808ec 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-relationship/post-relationship.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-relationship/post-relationship.spec.ts @@ -2,7 +2,7 @@ import { TestingModule } from '@nestjs/testing'; import { JsonApiTransformerService, ORM_SERVICE, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { Repository } from 'typeorm'; import { TypeOrmService, TypeormUtilsService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-relationship/post-relationship.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-relationship/post-relationship.ts index 93bbcce5..061d440e 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-relationship/post-relationship.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/orm-methods/post-relationship/post-relationship.ts @@ -1,8 +1,8 @@ import { RelationKeys, ResourceObjectRelationships, -} from '@klerick/json-api-nestjs-shared'; -import { PostRelationshipData } from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs-shared'; +import { PostRelationshipData } from '@yaser2us/json-api-nestjs'; import { getRelationship } from '../get-relationship/get-relationship'; import { TypeOrmService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/index.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/index.ts index e474ef06..cc51fd00 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/index.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/index.ts @@ -1,3 +1,3 @@ export * from './type-orm.service'; export * from './typeorm-utils.service'; -export * from './type-orm-format.error.service'; +export * from './type-orm-format.error.service'; \ No newline at end of file diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm-format.error.service.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm-format.error.service.spec.ts index 834bc14c..b2ef9b56 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm-format.error.service.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm-format.error.service.spec.ts @@ -3,7 +3,7 @@ import { ORM_SERVICE, PostData, ENTITY_PARAM_MAP, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { Repository } from 'typeorm'; import { TypeOrmService } from './type-orm.service'; diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm-format.error.service.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm-format.error.service.ts index e66dc644..a31b81bd 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm-format.error.service.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm-format.error.service.ts @@ -3,7 +3,7 @@ import { EntityParam, ValidateQueryError, ENTITY_PARAM_MAP, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { BadRequestException, ConflictException, diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm.service.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm.service.ts index 529b0859..0e8f84b4 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm.service.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/type-orm.service.ts @@ -1,4 +1,6 @@ -import { Inject } from '@nestjs/common'; +// File: src/service/context-aware-typeorm.service.ts + +import { Inject, Injectable, Logger } from '@nestjs/common'; import { OrmService, PatchData, @@ -10,12 +12,14 @@ import { EntityControllerParam, JsonApiTransformerService, CONTROLLER_OPTIONS_TOKEN, -} from '@klerick/json-api-nestjs'; + MODULE_OPTIONS_TOKEN, + PrepareParams, +} from '@yaser2us/json-api-nestjs'; import { ResourceObject, RelationKeys, ResourceObjectRelationships, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { Repository } from 'typeorm'; @@ -35,62 +39,328 @@ import { TypeormUtilsService } from './typeorm-utils.service'; import { CURRENT_ENTITY_REPOSITORY } from '../constants'; import { TypeOrmParam } from '../type'; +@Injectable() export class TypeOrmService implements OrmService { + private readonly logger = new Logger(TypeOrmService.name); + private enableContext: boolean = false; + private enableAuditLogging: boolean = false; + + // Use same injection pattern as original TypeOrmService @Inject(TypeormUtilsService) public typeormUtilsService!: TypeormUtilsService; + @Inject(JsonApiTransformerService) public transformDataService!: JsonApiTransformerService; + @Inject(CONTROLLER_OPTIONS_TOKEN) public config!: EntityControllerParam; - @Inject(CURRENT_ENTITY_REPOSITORY) public repository!: Repository; + + @Inject(CURRENT_ENTITY_REPOSITORY) + public repository!: Repository; - getAll( - query: Query - ): Promise> { + constructor( + @Inject(MODULE_OPTIONS_TOKEN) + private readonly moduleOptions: PrepareParams + ) { + // Initialize context settings after injection + setTimeout(() => this.initializeContextSettings(), 0); + } + + private initializeContextSettings(): void { + if (!this.moduleOptions) { + this.logger.warn('โš ๏ธ Module options not available'); + return; + } + + this.enableContext = !!this.moduleOptions?.options?.enableContext || + !!this.moduleOptions?.options?.pipeForQuery; + this.enableAuditLogging = !!this.moduleOptions?.options?.enableAuditLogging; + + if (this.enableContext) { + this.logger.log('๐Ÿ”’ Context-aware ORM service initialized'); + } + } + + // ============================================ + // METHODS WITH EXACT SAME PATTERN AS ORIGINAL + // ============================================ + + getAll(query: Query): Promise> { + this.logger.debug('๐Ÿ” getAll called with context support'); + + if (!this.enableContext) { + return getAll.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, query); + } + + const enhancedQuery = this.applyAccessControl(query, 'getAll'); + this.logAccess(query, 'getAll'); + + // DEBUG: Log what we're about to send to the ORM + this.logger.debug('๐Ÿ” Enhanced query being sent to ORM:', JSON.stringify(enhancedQuery, null, 2)); + + // If we have ID-based access control, we might need to handle it differently + const context = query?.context; + const accessibleIds = (context as { userContext?: { accessibleIds?: any[] } })?.userContext?.accessibleIds; + + if (accessibleIds && Array.isArray(accessibleIds) && accessibleIds.length > 0) { + // Override the method to apply direct TypeORM filtering + return this.getallWithDirectFiltering(enhancedQuery, accessibleIds); + } + return getAll.call< TypeOrmService, Parameters>, ReturnType> - >(this, query); + >(this, enhancedQuery); } - deleteOne(id: number | string): Promise { - return deleteOne.call< - TypeOrmService, - Parameters>, - ReturnType> - >(this, id); - } - - deleteRelationship>( - id: number | string, - rel: Rel, - input: PostRelationshipData - ): Promise { - return deleteRelationship.call< - TypeOrmService, - Parameters>, - ReturnType> - >(this, id, rel, input); + private async getallWithDirectFiltering( + query: Query, + accessibleIds: any[] + ): Promise> { + this.logger.debug('๐Ÿ”ง Applying direct TypeORM filtering for ID access control'); + + try { + // Get the base query builder through the utils service + const queryBuilder = this.repository.createQueryBuilder('entity'); + + // Apply ID filtering directly at TypeORM level + const idField = this.getEntityIdField(); + queryBuilder.whereInIds(accessibleIds); + + // Apply other filters from the query, but exclude JSON API specific properties + if (query.filter) { + const jsonApiProperties = ['target', 'relation', 'id']; // Properties to exclude + + Object.entries(query.filter).forEach(([key, value]) => { + // Skip JSON API specific properties and the ID field (handled separately) + if (!jsonApiProperties.includes(key) && value !== null && value !== undefined) { + + // Check if this field actually exists in the entity + const hasField = this.repository.metadata.columns.some(col => col.propertyName === key); + if (!hasField) { + this.logger.warn(`โš ๏ธ Skipping filter for non-existent field: ${key}`); + return; + } + + if (typeof value === 'object' && value !== null) { + // Handle complex filters + Object.entries(value).forEach(([operator, operandValue]) => { + switch (operator) { + case '$eq': + queryBuilder.andWhere(`entity.${key} = :${key}`, { [key]: operandValue }); + break; + case '$ne': + queryBuilder.andWhere(`entity.${key} != :${key}`, { [key]: operandValue }); + break; + case '$in': + queryBuilder.andWhere(`entity.${key} IN (:...${key})`, { [key]: operandValue }); + break; + case '$gt': + queryBuilder.andWhere(`entity.${key} > :${key}`, { [key]: operandValue }); + break; + case '$lt': + queryBuilder.andWhere(`entity.${key} < :${key}`, { [key]: operandValue }); + break; + case '$gte': + queryBuilder.andWhere(`entity.${key} >= :${key}`, { [key]: operandValue }); + break; + case '$lte': + queryBuilder.andWhere(`entity.${key} <= :${key}`, { [key]: operandValue }); + break; + case '$like': + queryBuilder.andWhere(`entity.${key} LIKE :${key}`, { [key]: `%${operandValue}%` }); + break; + default: + this.logger.warn(`โš ๏ธ Unknown operator: ${operator}`); + break; + } + }); + } else { + // Simple equality filter + queryBuilder.andWhere(`entity.${key} = :${key}`, { [key]: value }); + } + } + }); + } + + // Apply pagination if specified + if (query.page) { + const { number, size } = query.page; + if (size) queryBuilder.take(size); + if (number && size) queryBuilder.skip((number - 1) * size); + } + + // Apply sorting if specified + if (query.sort) { + Array.isArray(query.sort) && query.sort.forEach((sortField: string) => { + const direction = sortField.startsWith('-') ? 'DESC' : 'ASC'; + const field = sortField.replace(/^-/, ''); + + // Check if sort field exists + const hasField = this.repository.metadata.columns.some(col => col.propertyName === field); + if (hasField) { + queryBuilder.addOrderBy(`entity.${field}`, direction); + } else { + this.logger.warn(`โš ๏ธ Skipping sort for non-existent field: ${field}`); + } + }); + } + + // Execute the query + const [entities, total] = await queryBuilder.getManyAndCount(); + + this.logger.debug(`๐Ÿ” Direct filtering returned ${entities.length} entities out of ${total} total`); + + // Transform the results back to JSON API format using the transformer service + const transformedData = this.transformDataService.transformData(entities, query); + + // Construct the proper ResourceObject with all required properties + const result: ResourceObject = { + data: transformedData.data, + included: transformedData.included || [], + meta: { + totalItems: total, + // pageSize: query.page?.size ? Math.ceil(total / query.page.size) : 1, + pageNumber : query.page?.number || 1, + pageSize: query.page?.size || total + }, + // links: { + // self: query.meta?.currentUrl || '', + // first: query.meta?.currentUrl || '', + // last: query.meta?.currentUrl || '', + // prev: null, + // next: null + // } + }; + + return result; + + } catch (error) { + this.logger.error('โŒ Error in direct TypeORM filtering:', error); + // Fallback to original method + return getAll.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, query); + } } getOne( id: number | string, query: QueryOne ): Promise> { + this.logger.debug('๐Ÿ” getOne called with context support'); + + if (!this.enableContext) { + return getOne.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, id, query); + } + + const enhancedQuery = this.applyAccessControl(query, 'getOne'); + this.logAccess(query, 'getOne', { id }); + return getOne.call< TypeOrmService, Parameters>, ReturnType> - >(this, id, query); + >(this, id, enhancedQuery); + } + + postOne( + inputData: PostData + ): Promise> { + this.logger.debug('โœ๏ธ postOne called with context support'); + + if (!this.enableContext) { + return postOne.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, inputData); + } + + const enhancedData = this.applyContextToData(inputData, 'create'); + this.logAccess(null, 'postOne', { data: inputData }); + + return postOne.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, enhancedData); + } + + patchOne( + id: number | string, + inputData: PatchData + ): Promise> { + this.logger.debug('โœ๏ธ patchOne called with context support'); + + if (!this.enableContext) { + return patchOne.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, id, inputData); + } + + const enhancedData = this.applyContextToData(inputData, 'update'); + this.logAccess(null, 'patchOne', { id, data: inputData }); + + return patchOne.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, id, enhancedData); + } + + deleteOne(id: number | string): Promise { + this.logger.debug('๐Ÿ—‘๏ธ deleteOne called with context support'); + + if (!this.enableContext) { + return deleteOne.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, id); + } + + this.checkDeletePermissions(); + this.logAccess(null, 'deleteOne', { id }); + + return deleteOne.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, id); } getRelationship>( id: number | string, rel: Rel ): Promise> { + this.logger.debug(`๐Ÿ”— getRelationship(${String(rel)}) called with context support`); + + if (!this.enableContext) { + return getRelationship.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, id, rel); + } + + this.logAccess(null, 'getRelationship', { id, relationship: String(rel) }); + return getRelationship.call< TypeOrmService, Parameters>, @@ -98,15 +368,28 @@ export class TypeOrmService >(this, id, rel); } - patchOne( + postRelationship>( id: number | string, - inputData: PatchData - ): Promise> { - return patchOne.call< + rel: Rel, + input: PostRelationshipData + ): Promise> { + this.logger.debug(`๐Ÿ”— postRelationship(${String(rel)}) called with context support`); + + if (!this.enableContext) { + return postRelationship.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, id, rel, input); + } + + this.logAccess(null, 'postRelationship', { id, relationship: String(rel), data: input }); + + return postRelationship.call< TypeOrmService, - Parameters>, - ReturnType> - >(this, id, inputData); + Parameters>, + ReturnType> + >(this, id, rel, input); } patchRelationship>( @@ -114,6 +397,18 @@ export class TypeOrmService rel: Rel, input: PatchRelationshipData ): Promise> { + this.logger.debug(`๐Ÿ”— patchRelationship(${String(rel)}) called with context support`); + + if (!this.enableContext) { + return patchRelationship.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, id, rel, input); + } + + this.logAccess(null, 'patchRelationship', { id, relationship: String(rel), data: input }); + return patchRelationship.call< TypeOrmService, Parameters>, @@ -121,25 +416,284 @@ export class TypeOrmService >(this, id, rel, input); } - postOne( - inputData: PostData - ): Promise> { - return postOne.call< - TypeOrmService, - Parameters>, - ReturnType> - >(this, inputData); - } - - postRelationship>( + deleteRelationship>( id: number | string, rel: Rel, input: PostRelationshipData - ): Promise> { - return postRelationship.call< + ): Promise { + this.logger.debug(`๐Ÿ”— deleteRelationship(${String(rel)}) called with context support`); + + if (!this.enableContext) { + return deleteRelationship.call< + TypeOrmService, + Parameters>, + ReturnType> + >(this, id, rel, input); + } + + this.checkDeletePermissions(); + this.logAccess(null, 'deleteRelationship', { id, relationship: String(rel), data: input }); + + return deleteRelationship.call< TypeOrmService, - Parameters>, - ReturnType> + Parameters>, + ReturnType> >(this, id, rel, input); } -} + + // ============================================ + // CONTEXT ACCESS CONTROL LOGIC + // ============================================ + + private applyAccessControl(query: any, operation: string): any { + const context = query?.context; + if (!context) { + this.logger.warn('โš ๏ธ No context found in query - skipping access control'); + return query; + } + + this.logger.debug(`๐Ÿ”’ Applying access control for ${operation}`, { + userId: context.userContext?.id, + tenantId: context.tenantId, + operation + }); + + const enhancedQuery = { ...query }; + + // 1. TENANT ISOLATION - Force tenant filtering + if (context.tenantId && this.hasWorkspaceField()) { + enhancedQuery.filter = { + ...enhancedQuery.filter, + workspaceId: context.tenantId + }; + this.logger.debug(`๐Ÿข Applied tenant filter: ${context.tenantId}`); + } + + if (context.userContext) { + const { roles, id: userId, accessibleIds } = context.userContext; + + // 2. ADMIN ACCESS - Full access within tenant + if (roles?.includes('admin')) { + this.logger.debug('๐Ÿ‘‘ Admin access granted - no additional filtering'); + return enhancedQuery; + } + + // 3. ID-BASED ACCESS CONTROL - Filter by accessible IDs + if (accessibleIds && Array.isArray(accessibleIds) && accessibleIds.length > 0) { + const entityIdField = this.getEntityIdField(); + + // Try different filter formats that the JSON API library might support + const idFilter = this.createIdFilter(accessibleIds, entityIdField); + enhancedQuery.filter = { + ...enhancedQuery.filter, + ...idFilter + }; + + this.logger.debug(`๐Ÿ” Applied ID-based filter: ${accessibleIds.length} accessible IDs`, { + filter: idFilter, + accessibleIds + }); + } + + // 4. USER OWNERSHIP - Filter by user ownership + else if (this.hasUserField() && !this.isReadOnlyEntity()) { + enhancedQuery.filter = { + ...enhancedQuery.filter, + userId: userId + }; + this.logger.debug(`๐Ÿ‘ค Applied user ownership filter: ${userId}`); + } + + // 5. ROLE-BASED ACCESS - Apply role-specific filtering + if (context.roleBasedAccess) { + const roleFilters = this.applyRoleBasedFilters(roles, context.roleBasedAccess); + if (roleFilters) { + enhancedQuery.filter = { + ...enhancedQuery.filter, + ...roleFilters + }; + this.logger.debug(`๐Ÿ‘ฅ Applied role-based filters for roles: ${roles?.join(', ')}`); + } + } + + // 6. DEPARTMENT/TEAM-BASED ACCESS + if (context.userContext.departmentId && this.hasDepartmentField()) { + enhancedQuery.filter = { + ...enhancedQuery.filter, + departmentId: context.userContext.departmentId + }; + this.logger.debug(`๐Ÿข Applied department filter: ${context.userContext.departmentId}`); + } + + // 7. TIME-BASED ACCESS (if specified) + if (context.timeBasedAccess) { + const timeFilters = this.applyTimeBasedFilters(context.timeBasedAccess); + if (timeFilters) { + enhancedQuery.filter = { + ...enhancedQuery.filter, + ...timeFilters + }; + this.logger.debug('โฐ Applied time-based access filters'); + } + } + } + + this.logger.debug('๐Ÿ” Final enhanced query:', JSON.stringify(enhancedQuery, null, 2)); + return enhancedQuery; + } + + private createIdFilter(accessibleIds: any[], entityIdField: string): any { + // Let's try the JSON API standard filter format + // Based on your log showing { "id": { "$in": [...] } }, let's try simpler formats + + this.logger.debug(`๐Ÿงช Creating ID filter for field: ${entityIdField}, IDs: ${accessibleIds}`); + + // Since you saw it create { "id": { "$in": [...] } } but it returned everything, + // the issue might be that the library doesn't process the filter correctly. + // Let's try a different approach - OR conditions + + if (accessibleIds.length === 1) { + // Single ID - simple equality + return { + [entityIdField]: accessibleIds[0] + }; + } + + // Multiple IDs - try OR format that JSON API might understand better + return { + $or: accessibleIds.map(id => ({ + [entityIdField]: id + })) + }; + } + + private applyContextToData(data: any, operation: 'create' | 'update'): any { + this.logger.debug(`๐Ÿ”ง Applying context to ${operation} data`); + return data; + } + + private checkDeletePermissions(): void { + this.logger.debug('๐Ÿ”’ Checking delete permissions'); + } + + private logAccess(query: any, operation: string, additionalData?: any): void { + if (!this.enableAuditLogging) return; + + const context = query?.context; + const auditLog = { + userId: context?.userContext?.id || 'anonymous', + operation, + entity: this.getEntityName(), + timestamp: new Date().toISOString(), + requestId: context?.requestId, + ipAddress: context?.ipAddress, + userAgent: context?.userAgent, + tenantId: context?.tenantId, + additionalData, + }; + + this.logger.log('๐Ÿ“Š Audit Log:', auditLog); + } + + private hasWorkspaceField(): boolean { + try { + const metadata = this.repository?.metadata; + return metadata?.columns?.some(col => col.propertyName === 'workspaceId') || false; + } catch { + return false; + } + } + + private hasUserField(): boolean { + try { + const metadata = this.repository?.metadata; + return metadata?.columns?.some(col => col.propertyName === 'userId') || false; + } catch { + return false; + } + } + + private hasDepartmentField(): boolean { + try { + const metadata = this.repository?.metadata; + return metadata?.columns?.some(col => col.propertyName === 'departmentId') || false; + } catch { + return false; + } + } + + private getEntityIdField(): string { + try { + const metadata = this.repository?.metadata; + const primaryColumn = metadata?.primaryColumns?.[0]; + return primaryColumn?.propertyName || 'id'; + } catch { + return 'id'; + } + } + + private applyRoleBasedFilters(roles: string[] = [], roleBasedAccess: any): any { + if (!roles.length || !roleBasedAccess) return null; + + const filters: any = {}; + + // Example: Different roles get different access patterns + if (roles.includes('manager')) { + // Managers can see their team's data + if (roleBasedAccess.teamIds) { + filters.teamId = { $in: roleBasedAccess.teamIds }; + } + } + + if (roles.includes('supervisor')) { + // Supervisors can see their direct reports + if (roleBasedAccess.directReportIds) { + filters.createdBy = { $in: roleBasedAccess.directReportIds }; + } + } + + if (roles.includes('viewer')) { + // Viewers can only see published/public content + filters.status = 'published'; + filters.isPublic = true; + } + + return Object.keys(filters).length > 0 ? filters : null; + } + + private applyTimeBasedFilters(timeBasedAccess: any): any { + const filters: any = {}; + + if (timeBasedAccess.startDate) { + filters.createdAt = { $gte: new Date(timeBasedAccess.startDate) }; + } + + if (timeBasedAccess.endDate) { + filters.createdAt = { + ...filters.createdAt, + $lte: new Date(timeBasedAccess.endDate) + }; + } + + // Only allow access to active records + if (timeBasedAccess.onlyActive) { + filters.isActive = true; + filters.deletedAt = null; + } + + return Object.keys(filters).length > 0 ? filters : null; + } + + private isReadOnlyEntity(): boolean { + const readOnlyEntities = ['role', 'permission', 'resourcetype']; + return readOnlyEntities.includes(this.getEntityName().toLowerCase()); + } + + private getEntityName(): string { + try { + return this.repository?.metadata?.name || 'unknown'; + } catch { + return 'unknown'; + } + } +} \ No newline at end of file diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/typeorm-utils.service.spec.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/typeorm-utils.service.spec.ts index 09a08cdd..23aaef51 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/typeorm-utils.service.spec.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/typeorm-utils.service.spec.ts @@ -1,6 +1,6 @@ import { TestingModule } from '@nestjs/testing'; -import { PostRelationshipData, Query } from '@klerick/json-api-nestjs'; -import { QueryField, FilterOperand } from '@klerick/json-api-nestjs-shared'; +import { PostRelationshipData, Query } from '@yaser2us/json-api-nestjs'; +import { QueryField, FilterOperand } from '@yaser2us/json-api-nestjs-shared'; import { BadRequestException, NotFoundException, diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/typeorm-utils.service.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/typeorm-utils.service.ts index 1d1597ff..64499093 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/service/typeorm-utils.service.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/service/typeorm-utils.service.ts @@ -19,7 +19,7 @@ import { FilterOperand, getEntityName, RelationKeys, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { ValidateQueryError, @@ -27,7 +27,7 @@ import { PostData, Query, UnionToTuple, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { kebabCase, camelCase, pascalCase } from 'change-case-commonjs'; import { titleCase } from 'typeorm/util/StringUtils'; import { diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/type-orm-json-api.module.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/type-orm-json-api.module.ts index 495829cf..ea51da3e 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/type-orm-json-api.module.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/type-orm-json-api.module.ts @@ -6,7 +6,7 @@ import { NestProvider, MODULE_OPTIONS_TOKEN, ErrorFormatService, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { CurrentEntityManager, diff --git a/libs/json-api/json-api-nestjs-typeorm/src/lib/type.ts b/libs/json-api/json-api-nestjs-typeorm/src/lib/type.ts index 356bb26e..24125f22 100644 --- a/libs/json-api/json-api-nestjs-typeorm/src/lib/type.ts +++ b/libs/json-api/json-api-nestjs-typeorm/src/lib/type.ts @@ -1,4 +1,4 @@ -import { FilterOperand } from '@klerick/json-api-nestjs-shared'; +import { FilterOperand } from '@yaser2us/json-api-nestjs-shared'; import { IsolationLevel } from 'typeorm/driver/types/IsolationLevel'; export type TypeOrmParam = { diff --git a/libs/json-api/json-api-nestjs-typeorm/tsconfig.spec.json b/libs/json-api/json-api-nestjs-typeorm/tsconfig.spec.json index 07100034..6abda57b 100644 --- a/libs/json-api/json-api-nestjs-typeorm/tsconfig.spec.json +++ b/libs/json-api/json-api-nestjs-typeorm/tsconfig.spec.json @@ -6,10 +6,10 @@ "moduleResolution": "node10", "types": ["jest", "node"], "paths": { - "@klerick/json-api-nestjs-shared": [ + "@yaser2us/json-api-nestjs-shared": [ "libs/json-api/json-api-nestjs-shared/src/index.ts" ], - "@klerick/json-api-nestjs": [ + "@yaser2us/json-api-nestjs": [ "libs/json-api/json-api-nestjs/src/index.ts" ] }, diff --git a/libs/json-api/json-api-nestjs/README.md b/libs/json-api/json-api-nestjs/README.md index 1bf33659..2f3e1031 100644 --- a/libs/json-api/json-api-nestjs/README.md +++ b/libs/json-api/json-api-nestjs/README.md @@ -18,7 +18,7 @@ need to write any code. ## Installation ```bash -$ npm install @klerick/json-api-nestjs +$ npm install @yaser2us/json-api-nestjs ``` ## Example @@ -27,8 +27,8 @@ Once the installation process is complete, we can import the **JsonApiModule** i ### TypeOrm ```typescript import {Module} from '@nestjs/common'; -import {JsonApiModule} from '@klerick/json-api-nestjs'; -import {TypeOrmJsonApiModule} from '@klerick/json-api-nestjs-typeorm'; +import {JsonApiModule} from '@yaser2us/json-api-nestjs'; +import {TypeOrmJsonApiModule} from '@yaser2us/json-api-nestjs-typeorm'; import {Users} from 'type-orm/database'; @Module({ @@ -45,8 +45,8 @@ export class AppModule { ### MicroOrm ```typescript import {Module} from '@nestjs/common'; -import {JsonApiModule} from '@klerick/json-api-nestjs'; -import {MicroOrmJsonApiModule} from '@klerick/json-api-nestjs-microorm'; +import {JsonApiModule} from '@yaser2us/json-api-nestjs'; +import {MicroOrmJsonApiModule} from '@yaser2us/json-api-nestjs-microorm'; import {Users} from 'micro-orm/database'; @Module({ @@ -106,10 +106,10 @@ import { InjectService, JsonApiService, Query, -} from '@klerick/json-api-nestjs'; +} from '@yaser2us/json-api-nestjs'; import { ResourceObjectRelationships, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import {ExampleService} from '../../service/example/example.service'; @JsonApi(Users, { diff --git a/libs/json-api/json-api-nestjs/package.json b/libs/json-api/json-api-nestjs/package.json index 71a1407a..a9615627 100644 --- a/libs/json-api/json-api-nestjs/package.json +++ b/libs/json-api/json-api-nestjs/package.json @@ -1,5 +1,5 @@ { - "name": "@klerick/json-api-nestjs", + "name": "@yaser2us/json-api-nestjs", "version": "10.0.0-beta.5", "type": "commonjs", "description": "JsonApi Plugin for NestJs", @@ -16,6 +16,6 @@ "tslib": ">2.3.0", "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0", - "@klerick/json-api-nestjs-shared": "0.0.0" + "@yaser2us/json-api-nestjs-shared": "0.0.0" } } diff --git a/libs/json-api/json-api-nestjs/project.json b/libs/json-api/json-api-nestjs/project.json index daecf487..9fd76d44 100644 --- a/libs/json-api/json-api-nestjs/project.json +++ b/libs/json-api/json-api-nestjs/project.json @@ -35,11 +35,11 @@ "command": "node tools/scripts/prepare-package-json.mjs json-api-nestjs" }, { - "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@klerick/json-api-nestjs", + "command": "mkdir -p node_modules/@klerick && rm -rf node_modules/@yaser2us/json-api-nestjs", "forwardAllArgs": false }, { - "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@klerick/json-api-nestjs", + "command": "ln -s $(pwd)/dist/{projectRoot} node_modules/@yaser2us/json-api-nestjs", "forwardAllArgs": false } ], diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/atomic-operation.module.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/atomic-operation.module.ts index f8c75fcc..15bc6ea9 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/atomic-operation.module.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/atomic-operation.module.ts @@ -7,7 +7,7 @@ import { NestModule, } from '@nestjs/common'; import { DiscoveryModule, RouterModule } from '@nestjs/core'; -import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { AnyEntity, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { OperationController } from './controllers'; import { ExplorerService, ExecuteService, SwaggerService } from './service'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/controllers/operation.controller.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/controllers/operation.controller.spec.ts index 164ea78d..40c1dd40 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/controllers/operation.controller.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/controllers/operation.controller.spec.ts @@ -5,7 +5,7 @@ import { Module } from '@nestjs/core/injector/module'; import { KEY_MAIN_OUTPUT_SCHEMA, Operation, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { OperationController } from './operation.controller'; import { ExecuteService, ExplorerService } from '../service'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/controllers/operation.controller.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/controllers/operation.controller.ts index f5377b78..2a7bc3c6 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/controllers/operation.controller.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/controllers/operation.controller.ts @@ -11,7 +11,7 @@ import { Module } from '@nestjs/core/injector/module'; import { KEY_MAIN_INPUT_SCHEMA, KEY_MAIN_OUTPUT_SCHEMA, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { InputArray } from '../utils'; import { InputOperationPipe } from '../pipes/input-operation.pipe'; import { ExecuteService, ExplorerService } from '../service'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-controller-entity.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-controller-entity.ts index 7e149c4a..8ee8bf64 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-controller-entity.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-controller-entity.ts @@ -1,6 +1,6 @@ import { DynamicModule, ValueProvider } from '@nestjs/common'; import { Type } from '@nestjs/common/interfaces/type.interface'; -import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { AnyEntity, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { MapController } from '../types'; import { MAP_CONTROLLER_ENTITY } from '../constants'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-entity-name-to-entity.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-entity-name-to-entity.ts index 302fcf9f..ac2d04b8 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-entity-name-to-entity.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-entity-name-to-entity.ts @@ -3,7 +3,7 @@ import { getEntityName, AnyEntity, EntityClass, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { kebabCase } from 'change-case-commonjs'; import { MapEntity } from '../types'; import { MAP_ENTITY } from '../constants'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/zod-input-operation.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/zod-input-operation.ts index 77687d94..fc519b2c 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/zod-input-operation.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/zod-input-operation.ts @@ -1,5 +1,5 @@ import { FactoryProvider } from '@nestjs/common'; -import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { AnyEntity, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { MAP_CONTROLLER_ENTITY, ZOD_INPUT_OPERATION } from '../constants'; import { MapController } from '../types'; import { zodInputOperation, ZodInputOperation } from '../utils'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/pipes/input-operation.pipe.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/pipes/input-operation.pipe.spec.ts index d2b55af2..70c56fa1 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/pipes/input-operation.pipe.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/pipes/input-operation.pipe.spec.ts @@ -1,5 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { KEY_MAIN_INPUT_SCHEMA } from '@klerick/json-api-nestjs-shared'; +import { KEY_MAIN_INPUT_SCHEMA } from '@yaser2us/json-api-nestjs-shared'; import { ZodError } from 'zod'; import { InternalServerErrorException, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/pipes/input-operation.pipe.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/pipes/input-operation.pipe.ts index a63c294e..4a840ed9 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/pipes/input-operation.pipe.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/pipes/input-operation.pipe.ts @@ -4,7 +4,7 @@ import { Inject, PipeTransform, } from '@nestjs/common'; -import { KEY_MAIN_INPUT_SCHEMA } from '@klerick/json-api-nestjs-shared'; +import { KEY_MAIN_INPUT_SCHEMA } from '@yaser2us/json-api-nestjs-shared'; import { errorMap } from 'zod-validation-error'; import { ZodError } from 'zod'; import { JSONValue } from '../../mixin/types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/execute.service.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/execute.service.spec.ts index 361bd497..d0411840 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/execute.service.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/execute.service.spec.ts @@ -1,7 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { ModuleRef } from '@nestjs/core'; import { ROUTE_ARGS_METADATA } from '@nestjs/common/constants'; -import { KEY_MAIN_INPUT_SCHEMA } from '@klerick/json-api-nestjs-shared'; +import { KEY_MAIN_INPUT_SCHEMA } from '@yaser2us/json-api-nestjs-shared'; import { ExecuteService, isZodError } from './execute.service'; import { IterateFactory } from '../factory'; import { diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/execute.service.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/execute.service.ts index b477b5ee..f294d41d 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/execute.service.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/execute.service.ts @@ -18,7 +18,7 @@ import { ResourceObject, ResourceObjectRelationships, KEY_MAIN_INPUT_SCHEMA, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { InterceptorsConsumer, InterceptorsContextCreator, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/explorer.service.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/explorer.service.spec.ts index 51fe575d..0e8e2456 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/explorer.service.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/explorer.service.spec.ts @@ -1,6 +1,6 @@ import { Test } from '@nestjs/testing'; import { ModulesContainer } from '@nestjs/core'; -import { Operation } from '@klerick/json-api-nestjs-shared'; +import { Operation } from '@yaser2us/json-api-nestjs-shared'; import { MAP_ENTITY, MAP_CONTROLLER_ENTITY, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/explorer.service.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/explorer.service.ts index be3e680a..a5d7ca75 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/explorer.service.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/service/explorer.service.ts @@ -1,7 +1,7 @@ import { Inject, Injectable, Type } from '@nestjs/common'; import { Module } from '@nestjs/core/injector/module'; import { ModulesContainer } from '@nestjs/core'; -import { RelationKeys, Operation } from '@klerick/json-api-nestjs-shared'; +import { RelationKeys, Operation } from '@yaser2us/json-api-nestjs-shared'; import { MAP_CONTROLLER_ENTITY, MAP_ENTITY } from '../constants'; import { MapController, MapEntity, OperationMethode } from '../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/types/index.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/types/index.ts index 26ec14f3..1e618323 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/types/index.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/types/index.ts @@ -1,7 +1,7 @@ import { NestInterceptor, Type } from '@nestjs/common'; import { Module } from '@nestjs/core/injector/module'; import { Controller } from '@nestjs/common/interfaces'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { JsonBaseController } from '../../mixin/controllers'; export type MapControllerInterceptor = Map< diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/utils/zod/zod-helper.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/utils/zod/zod-helper.spec.ts index 32660915..bce3e720 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/utils/zod/zod-helper.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/utils/zod/zod-helper.spec.ts @@ -5,7 +5,7 @@ import { Operation, AnyEntity, EntityClass, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { z, ZodError } from 'zod'; import { ZodAdd, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/utils/zod/zod-helper.ts b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/utils/zod/zod-helper.ts index a44e05ed..61192bac 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/utils/zod/zod-helper.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/utils/zod/zod-helper.ts @@ -5,7 +5,7 @@ import { Operation, AnyEntity, EntityClass, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { z, ZodArray, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/config/bindings.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/config/bindings.ts index bfe6c55d..92a3d71d 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/config/bindings.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/config/bindings.ts @@ -16,7 +16,39 @@ import { parseRelationshipNamePipeMixin, postRelationshipPipeMixin, patchRelationshipPipeMixin, + contextMixin, } from '../pipe'; +import { DefaultContextPipe } from '../pipe/context/context.pipe'; + +// Create a mixin for the context pipe +export function createContextPipeMixin(PipeClass: any) { + return function contextPipeMixin(target: any, propertyKey: string, parameterIndex: number) { + // Apply the pipe to the parameter + const existingPipes = Reflect.getMetadata('pipes', target, propertyKey) || []; + existingPipes.push(PipeClass); + Reflect.defineMetadata('pipes', existingPipes, target, propertyKey); + }; +} + +// Add a function to create dynamic mixins based on config +export function createQueryMixins(): any[] { + const baseMixins = [ + queryInputMixin, + queryMixin, + queryFiledInIncludeMixin, + queryCheckSelectFieldMixin, + contextMixin + ]; + + // โœจ Add context pipe if enabled + // if (options.enableContext || options.pipeForQuery) { + // const contextPipe = options.pipeForQuery || DefaultContextPipe; + // baseMixins.push(createContextPipeMixin(contextPipe)); + // } + + return baseMixins; +} + const Bindings: BindingsConfig = { getAll: { @@ -27,12 +59,14 @@ const Bindings: BindingsConfig = { parameters: [ { decorator: Query, - mixins: [ - queryInputMixin, - queryMixin, - queryFiledInIncludeMixin, - queryCheckSelectFieldMixin, - ], + mixins: createQueryMixins(), // โœจ Dynamic mixins + + // mixins: [ + // queryInputMixin, + // queryMixin, + // queryFiledInIncludeMixin, + // queryCheckSelectFieldMixin, + // ], }, ], }, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/controllers/json-base.controller.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/controllers/json-base.controller.ts index f4b33ad5..c2fe3c18 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/controllers/json-base.controller.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/controllers/json-base.controller.ts @@ -2,7 +2,7 @@ import { ResourceObject, ResourceObjectRelationships, RelationKeys, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { PatchData, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/decorators/json-api/json-api.decorator.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/decorators/json-api/json-api.decorator.ts index fdd77b93..90231cb0 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/decorators/json-api/json-api.decorator.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/decorators/json-api/json-api.decorator.ts @@ -1,4 +1,4 @@ -import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { AnyEntity, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { JSON_API_DECORATOR_ENTITY, JSON_API_DECORATOR_OPTIONS, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/bind-controller.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/bind-controller.spec.ts index 94ed83c4..bf53559b 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/bind-controller.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/bind-controller.spec.ts @@ -3,7 +3,7 @@ import { PATH_METADATA, ROUTE_ARGS_METADATA, } from '@nestjs/common/constants'; -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; import { RouteParamtypes } from '@nestjs/common/enums/route-paramtypes.enum'; import { bindController } from './bind-controller'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/create-controller.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/create-controller.ts index ed7558f2..a47528af 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/create-controller.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/create-controller.ts @@ -11,7 +11,7 @@ import { JSON_API_CONTROLLER_POSTFIX, } from '../../../constants'; import { ErrorInterceptors, LogTimeInterceptors } from '../interceptors'; -import { getEntityName } from '@klerick/json-api-nestjs-shared'; +import { getEntityName } from '@yaser2us/json-api-nestjs-shared'; export function createController( entity: ModuleMixinOptions['entity'], diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/utils.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/utils.spec.ts index d7a5e1eb..71256399 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/utils.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/utils.spec.ts @@ -1,4 +1,4 @@ -import { getEntityName } from '@klerick/json-api-nestjs-shared'; +import { getEntityName } from '@yaser2us/json-api-nestjs-shared'; import { nameIt, excludeMethod, getProviderName } from './utils'; import { Bindings } from '../config/bindings'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/utils.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/utils.ts index ef93a2b8..ebf0691b 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/utils.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/helpers/utils.ts @@ -3,7 +3,7 @@ import { ObjectTyped, EntityClass, AnyEntity, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { pascalCase } from 'change-case-commonjs'; import { MethodName } from '../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/interceptors/error.interceptors.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/interceptors/error.interceptors.ts index e7803276..dad335fa 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/interceptors/error.interceptors.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/interceptors/error.interceptors.ts @@ -5,7 +5,7 @@ import { Injectable, NestInterceptor, } from '@nestjs/common'; -import { ResourceObject } from '@klerick/json-api-nestjs-shared'; +import { ResourceObject } from '@yaser2us/json-api-nestjs-shared'; import { ErrorFormatService } from '../service'; import { catchError, Observable, throwError } from 'rxjs'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/interceptors/log-time.interceptors.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/interceptors/log-time.interceptors.ts index 48ace2bc..dc441490 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/interceptors/log-time.interceptors.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/interceptors/log-time.interceptors.ts @@ -4,7 +4,7 @@ import { Injectable, NestInterceptor, } from '@nestjs/common'; -import { ResourceObject } from '@klerick/json-api-nestjs-shared'; +import { ResourceObject } from '@yaser2us/json-api-nestjs-shared'; import { map, Observable } from 'rxjs'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/check-item-entity/check-item-entity.pipe.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/check-item-entity/check-item-entity.pipe.spec.ts index 64de13f0..34146dac 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/check-item-entity/check-item-entity.pipe.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/check-item-entity/check-item-entity.pipe.spec.ts @@ -1,6 +1,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { NotFoundException } from '@nestjs/common'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { CheckItemEntityPipe } from './check-item-entity.pipe'; import { CURRENT_ENTITY, FIND_ONE_ROW_ENTITY } from '../../../../constants'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/check-item-entity/check-item-entity.pipe.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/check-item-entity/check-item-entity.pipe.ts index 63287909..20820531 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/check-item-entity/check-item-entity.pipe.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/check-item-entity/check-item-entity.pipe.ts @@ -1,5 +1,5 @@ import { Inject, NotFoundException, PipeTransform } from '@nestjs/common'; -import { EntityClass, getEntityName } from '@klerick/json-api-nestjs-shared'; +import { EntityClass, getEntityName } from '@yaser2us/json-api-nestjs-shared'; import { ValidateQueryError } from '../../../../types'; import { CURRENT_ENTITY, FIND_ONE_ROW_ENTITY } from '../../../../constants'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/context/context.pipe.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/context/context.pipe.ts new file mode 100644 index 00000000..24bc1a47 --- /dev/null +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/context/context.pipe.ts @@ -0,0 +1,84 @@ +// ============================================ +// STEP 4: CREATE DEFAULT CONTEXT PIPE +// ============================================ + +// File: src/lib/pipes/context.pipe.ts +// Create a default context extraction pipe + +import { + Injectable, + PipeTransform, + ArgumentMetadata, + Inject, + Scope, + Optional +} from '@nestjs/common'; +import { REQUEST } from '@nestjs/core'; + +export interface ContextExtractor { + (request: any): any; +} + +@Injectable({ scope: Scope.REQUEST }) +export class DefaultContextPipe implements PipeTransform { + + constructor( + @Inject(REQUEST) private readonly request: any, + @Optional() @Inject('CONTEXT_EXTRACTOR') private readonly contextExtractor?: ContextExtractor + ) { } + + transform(query: any, metadata: ArgumentMetadata): any { + try { + // If custom context extractor is provided, use it + if (this.contextExtractor) { + const customContext = this.contextExtractor(this.request); + return { + ...query, + context: customContext + }; + } + + // Default context extraction + const context = this.extractDefaultContext(this.request); + + return { + ...query, + context + }; + + } catch (error) { + console.error('โŒ Error in DefaultContextPipe:', error); + return query; + } + } + + private extractDefaultContext(request: any): any { + return { + userContext: request.user ? { + id: request.user.id, + workspaceId: request.user.workspaceId, + roles: request.user.roles || [], + permissions: request.user.permissions || [], + email: request.user.email, + } : null, + + requestId: request.headers['x-request-id'] || `req-${Date.now()}`, + timestamp: new Date().toISOString(), + userAgent: request.headers['user-agent'], + ipAddress: request.ip || request.connection?.remoteAddress, + origin: request.headers['origin'], + tenantId: request.headers['x-tenant-id'] || request.user?.workspaceId, + apiVersion: request.headers['api-version'] || '1.0', + endpoint: request.route?.path || request.url, + method: request.method, + sessionId: request.sessionID, + csrfToken: request.headers['x-csrf-token'], + + featureFlags: { + enableAdvancedSearch: request.user?.roles?.includes('admin') || false, + enableBetaFeatures: request.user?.roles?.includes('beta-tester') || false, + enableAuditLogging: true + } + }; + } +} \ No newline at end of file diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/index.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/index.ts index 87448f10..5f34a053 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/index.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/index.ts @@ -61,6 +61,13 @@ export function idPipeMixin( return config && config.pipeForId ? config.pipeForId : (ParseIntPipe as any); } +export function contextMixin( + entity: ModuleMixinOptions['entity'], + config?: EntityControllerParam +): PipeMixin { + return config && config.pipeForQuery ? config.pipeForQuery : (ParseIntPipe as any); +} + export function checkItemEntityPipeMixin( entity: ModuleMixinOptions['entity'] ): PipeMixin { diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/parse-relationship-name/parse-relationship-name.pipe.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/parse-relationship-name/parse-relationship-name.pipe.spec.ts index 247fb82c..48072e97 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/parse-relationship-name/parse-relationship-name.pipe.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/parse-relationship-name/parse-relationship-name.pipe.spec.ts @@ -1,6 +1,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { UnprocessableEntityException } from '@nestjs/common'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { ParseRelationshipNamePipe } from './parse-relationship-name.pipe'; import { CURRENT_ENTITY, CHECK_RELATION_NAME } from '../../../../constants'; import { EntityParam } from '../../../../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/parse-relationship-name/parse-relationship-name.pipe.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/parse-relationship-name/parse-relationship-name.pipe.ts index d0d85ba9..94781e0a 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/parse-relationship-name/parse-relationship-name.pipe.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/parse-relationship-name/parse-relationship-name.pipe.ts @@ -3,7 +3,7 @@ import { UnprocessableEntityException, Inject, } from '@nestjs/common'; -import { EntityClass, getEntityName } from '@klerick/json-api-nestjs-shared'; +import { EntityClass, getEntityName } from '@yaser2us/json-api-nestjs-shared'; import { EntityParam, ValidateQueryError } from '../../../../types'; import { CHECK_RELATION_NAME, CURRENT_ENTITY } from '../../../../constants'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-check-select-field/query-check-select-field.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-check-select-field/query-check-select-field.spec.ts index f877b959..dd6bfa7b 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-check-select-field/query-check-select-field.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-check-select-field/query-check-select-field.spec.ts @@ -1,6 +1,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { BadRequestException } from '@nestjs/common'; -import { QueryField } from '@klerick/json-api-nestjs-shared'; +import { QueryField } from '@yaser2us/json-api-nestjs-shared'; import { QueryCheckSelectField } from './query-check-select-field'; import { Users } from '../../../../utils/___test___/test-classes.helper'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.spec.ts index 0a226d8d..dae2fcb1 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.spec.ts @@ -1,5 +1,5 @@ import { BadRequestException } from '@nestjs/common'; -import { QueryField } from '@klerick/json-api-nestjs-shared'; +import { QueryField } from '@yaser2us/json-api-nestjs-shared'; import { QueryFiledInIncludePipe } from './query-filed-in-include.pipe'; import { Users } from '../../../../utils/___test___/test-classes.helper'; import { Query } from '../../zod'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.ts index ba621c0c..6e7bce81 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query-filed-on-include/query-filed-in-include.pipe.ts @@ -1,5 +1,5 @@ import { BadRequestException, PipeTransform } from '@nestjs/common'; -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; import { ValidateQueryError } from '../../../../types'; import { Query } from '../../zod'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query/query.pipe.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query/query.pipe.spec.ts index f2d69856..3a011963 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query/query.pipe.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/pipe/query/query.pipe.spec.ts @@ -3,7 +3,7 @@ import { InternalServerErrorException, } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; -import { FilterOperand, QueryField } from '@klerick/json-api-nestjs-shared'; +import { FilterOperand, QueryField } from '@yaser2us/json-api-nestjs-shared'; import { ZodError } from 'zod'; import { QueryPipe } from './query.pipe'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/entity-param-map.service.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/entity-param-map.service.ts index 0bd484b8..31564071 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/entity-param-map.service.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/entity-param-map.service.ts @@ -1,5 +1,5 @@ import { Inject, Injectable } from '@nestjs/common'; -import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { AnyEntity, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { ENTITY_PARAM_MAP, CURRENT_ENTITY } from '../../../constants'; import { EntityParamMap } from '../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/json-api-transformer.service.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/json-api-transformer.service.spec.ts index 74b11cf4..37d0e75f 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/json-api-transformer.service.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/json-api-transformer.service.spec.ts @@ -1,7 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { ApplicationConfig } from '@nestjs/core'; import { faker } from '@faker-js/faker'; -import { PropertyKeys } from '@klerick/json-api-nestjs-shared'; +import { PropertyKeys } from '@yaser2us/json-api-nestjs-shared'; import { JsonApiTransformerService } from './json-api-transformer.service'; import { EntityParamMapService } from './entity-param-map.service'; import { usersEntityParamMapMockData } from '../../../utils/___test___/test.helper'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/json-api-transformer.service.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/json-api-transformer.service.ts index 82a20627..9a6a3937 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/json-api-transformer.service.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/service/json-api-transformer.service.ts @@ -11,7 +11,7 @@ import { BaseMainData, RelationKeys, EntityClass, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { RoutePathFactory } from '@nestjs/core/router/route-path-factory'; import { EntityParam } from '../../../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/filter-operand-model.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/filter-operand-model.ts index a71b36ee..7ede74d0 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/filter-operand-model.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/filter-operand-model.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { FilterOperand as FilterOperandType } from '@klerick/json-api-nestjs-shared'; +import { FilterOperand as FilterOperandType } from '@yaser2us/json-api-nestjs-shared'; const title = 'is equal to the conditional of query'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/delete-one.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/delete-one.ts index 0674f646..a076fe56 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/delete-one.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/delete-one.ts @@ -1,6 +1,6 @@ import { Type } from '@nestjs/common'; import { ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { TypeField } from '../../../../types'; import { errorSchema } from '../utils'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/delete-relationship.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/delete-relationship.ts index 7b236c2e..c7b363ea 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/delete-relationship.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/delete-relationship.ts @@ -1,7 +1,7 @@ import { ApiBody, ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger'; import { generateSchema } from '@anatine/zod-openapi'; import { Type } from '@nestjs/common'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { TypeField } from '../../../../types'; import { zodPatchRelationship } from '../../zod'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-all.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-all.ts index 555d0dc4..39c67f71 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-all.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-all.ts @@ -4,7 +4,7 @@ import { ObjectTyped, EntityClass, FilterOperand, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { assertIsKeysOfObject, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-one.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-one.ts index b3b1b303..6cdb3d85 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-one.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-one.ts @@ -1,5 +1,5 @@ import { ApiOperation, ApiParam, ApiQuery, ApiResponse } from '@nestjs/swagger'; -import { ObjectTyped, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { Type } from '@nestjs/common'; import { errorSchema, jsonSchemaResponse } from '../utils'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-relationship.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-relationship.ts index 2ed9b4ff..5fe73f84 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-relationship.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/get-relationship.ts @@ -1,6 +1,6 @@ import { Type } from '@nestjs/common'; import { ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { TypeField } from '../../../../types'; import { errorSchema, schemaTypeForRelation } from '../utils'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/patch-one.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/patch-one.ts index 49bde0b6..18557d5f 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/patch-one.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/patch-one.ts @@ -5,7 +5,7 @@ import { } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface'; import { ApiBody, ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger'; import { generateSchema } from '@anatine/zod-openapi'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { TypeField } from '../../../../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/patch-relationship.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/patch-relationship.ts index ef3d1a0a..650c27b9 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/patch-relationship.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/patch-relationship.ts @@ -5,7 +5,7 @@ import { } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface'; import { generateSchema } from '@anatine/zod-openapi'; import { Type } from '@nestjs/common'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { TypeField } from '../../../../types'; import { errorSchema, schemaTypeForRelation } from '../utils'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/post-one.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/post-one.ts index 8c30a776..4c6d3cf9 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/post-one.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/post-one.ts @@ -5,7 +5,7 @@ import { SchemaObject, } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface'; import { Type } from '@nestjs/common'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { errorSchema, jsonSchemaResponse } from '../utils'; import { zodPost } from '../../zod'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/post-relationship.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/post-relationship.ts index 58e6967b..1982d9e8 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/post-relationship.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/method/post-relationship.ts @@ -5,7 +5,7 @@ import { SchemaObject, } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface'; import { ApiBody, ApiOperation, ApiParam, ApiResponse } from '@nestjs/swagger'; -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { errorSchema, schemaTypeForRelation } from '../utils'; import { zodPatchRelationship } from '../../zod'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/swagger-bind.service.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/swagger-bind.service.ts index 78691e5e..8bd8dc7d 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/swagger-bind.service.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/swagger-bind.service.ts @@ -2,7 +2,7 @@ import { Injectable, OnModuleInit, Inject } from '@nestjs/common'; import { DECORATORS } from '@nestjs/swagger/dist/constants'; import { ApiExtraModels, ApiTags } from '@nestjs/swagger'; import { DiscoveryService } from '@nestjs/core'; -import { ObjectTyped, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { PARAMTYPES_METADATA } from '@nestjs/common/constants'; import { diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/utils.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/utils.ts index 2e5e0c06..350ec1ef 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/utils.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/swagger/utils.ts @@ -5,7 +5,7 @@ import { AnyEntity, EntityClass, PropertyKeys, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { kebabCase } from 'change-case-commonjs'; import { EntityParam, RelationProperty, TypeField } from '../../../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/binding.type.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/binding.type.ts index d3deadfa..af609e9a 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/binding.type.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/binding.type.ts @@ -1,6 +1,6 @@ import { Type } from '@nestjs/common/interfaces'; import { PipeTransform, RequestMethod } from '@nestjs/common'; -import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { AnyEntity, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { JsonBaseController } from '../controllers'; import { PipeMixin } from '../../../types'; import { EntityControllerParam } from './decorator-options.type'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/module.type.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/module.type.ts index e4f60eda..4ce0efdb 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/module.type.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/module.type.ts @@ -1,4 +1,4 @@ -import { EntityClass } from '@klerick/json-api-nestjs-shared'; +import { EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { EntityParam } from '../../../types'; export type EntityParamMap = Map>; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/orm-service.type.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/orm-service.type.ts index 21ee0f36..7fa39812 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/orm-service.type.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/types/orm-service.type.ts @@ -2,7 +2,7 @@ import { ResourceObject, ResourceObjectRelationships, RelationKeys, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { PatchData, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/fields.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/fields.ts index 25b672c6..07af9b10 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/fields.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/fields.ts @@ -1,4 +1,4 @@ -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; import { z } from 'zod'; import { EntityParam } from '../../../../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/filter.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/filter.ts index 8e651cfb..b8a6e4e9 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/filter.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/filter.ts @@ -2,7 +2,7 @@ import { FilterOperand, isString, ObjectTyped, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { z, ZodType } from 'zod'; import { EntityParamMapService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/include.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/include.ts index dd5e8448..24684dea 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/include.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/include.ts @@ -1,4 +1,4 @@ -import { isString } from '@klerick/json-api-nestjs-shared'; +import { isString } from '@yaser2us/json-api-nestjs-shared'; import { z } from 'zod'; export function zodIncludeInputQuery() { diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/index.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/index.spec.ts index 9a89e07d..832b040a 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/index.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/index.spec.ts @@ -1,4 +1,4 @@ -import { QueryField } from '@klerick/json-api-nestjs-shared'; +import { QueryField } from '@yaser2us/json-api-nestjs-shared'; import { usersEntityParamMapMockData } from '../../../../utils/___test___/test.helper'; import { zodInputQuery } from './index'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/index.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/index.ts index 00e4f0e6..152f6cf5 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/index.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-input-query-schema/index.ts @@ -1,4 +1,4 @@ -import { QueryField } from '@klerick/json-api-nestjs-shared'; +import { QueryField } from '@yaser2us/json-api-nestjs-shared'; import { z } from 'zod'; import { EntityParamMapService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/fields.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/fields.ts index ea8eb6d4..bf131716 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/fields.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/fields.ts @@ -1,4 +1,4 @@ -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; import { z, ZodObject } from 'zod'; import { getRelationProps, nonEmptyObject, uniqueArray } from '../zod-utils'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/filter.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/filter.ts index 26648edd..913dd1e0 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/filter.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/filter.ts @@ -3,7 +3,7 @@ import { FilterOperandOnlyInNin, FilterOperandOnlySimple, ObjectTyped, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { z, ZodOptional } from 'zod'; import { EntityParamMapService } from '../../service'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/index.spec.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/index.spec.ts index 2ff1b314..ddfd74c2 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/index.spec.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/index.spec.ts @@ -1,4 +1,4 @@ -import { FilterOperand, QueryField } from '@klerick/json-api-nestjs-shared'; +import { FilterOperand, QueryField } from '@yaser2us/json-api-nestjs-shared'; import { ASC } from '../../../../constants'; import { usersEntityParamMapMockData } from '../../../../utils/___test___/test.helper'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/index.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/index.ts index a881d7ad..3f639d03 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/index.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/index.ts @@ -1,5 +1,5 @@ import { z, ZodObject } from 'zod'; -import { QueryField } from '@klerick/json-api-nestjs-shared'; +import { QueryField } from '@yaser2us/json-api-nestjs-shared'; import { zodFieldsQuery, ZodFieldsQuery } from './fields'; import { zodFilterQuery, ZodFilterQuery } from './filter'; @@ -17,6 +17,7 @@ type Shape = { [QueryField.include]: ZodIncludeQuery; [QueryField.sort]: ZodSortQuery; [QueryField.page]: ZodPageInputQuery; + [QueryField.context]?: z.ZodTypeAny; }; function getShape( diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/sort.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/sort.ts index 7dab6a80..2fb96376 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/sort.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/sort.ts @@ -1,4 +1,4 @@ -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; import { z, ZodObject } from 'zod'; import { EntityParam, EntityRelationProps } from '../../../../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-share/attributes.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-share/attributes.ts index 32db14ba..7ae98dbc 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-share/attributes.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-share/attributes.ts @@ -1,4 +1,4 @@ -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; import { z, ZodArray, ZodType } from 'zod'; import { EntityParam, TypeField } from '../../../../types'; diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-share/relationships.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-share/relationships.ts index 3204bfeb..ba7e29d8 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-share/relationships.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-share/relationships.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; import { EntityParam, diff --git a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-utils.ts b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-utils.ts index 9c6e48fe..5ef41bba 100644 --- a/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-utils.ts +++ b/libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-utils.ts @@ -1,4 +1,4 @@ -import { ObjectTyped } from '@klerick/json-api-nestjs-shared'; +import { ObjectTyped } from '@yaser2us/json-api-nestjs-shared'; import { ZodType } from 'zod'; diff --git a/libs/json-api/json-api-nestjs/src/lib/types/common-type.ts b/libs/json-api/json-api-nestjs/src/lib/types/common-type.ts index 2f6cb5e1..6f783eb9 100644 --- a/libs/json-api/json-api-nestjs/src/lib/types/common-type.ts +++ b/libs/json-api/json-api-nestjs/src/lib/types/common-type.ts @@ -3,4 +3,4 @@ import { ModuleMetadata, PipeTransform, Type } from '@nestjs/common'; export type NestController = NonNullable; export type NestProvider = NonNullable; export type NestImport = NonNullable; -export type PipeMixin = Type; +export type PipeMixin = Type; \ No newline at end of file diff --git a/libs/json-api/json-api-nestjs/src/lib/types/entity-param.type.ts b/libs/json-api/json-api-nestjs/src/lib/types/entity-param.type.ts index 6fc52b32..12af4d2a 100644 --- a/libs/json-api/json-api-nestjs/src/lib/types/entity-param.type.ts +++ b/libs/json-api/json-api-nestjs/src/lib/types/entity-param.type.ts @@ -4,7 +4,7 @@ import { RelationKeys, IsIterator, Constructor, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { CastIteratorType, UnionToTuple, diff --git a/libs/json-api/json-api-nestjs/src/lib/types/module-options.types.ts b/libs/json-api/json-api-nestjs/src/lib/types/module-options.types.ts index c9e5e448..a688790a 100644 --- a/libs/json-api/json-api-nestjs/src/lib/types/module-options.types.ts +++ b/libs/json-api/json-api-nestjs/src/lib/types/module-options.types.ts @@ -1,6 +1,6 @@ import { DynamicModule } from '@nestjs/common'; import { NonEmptyArray } from 'zod-validation-error'; -import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { AnyEntity, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { NestController, NestImport, @@ -22,6 +22,12 @@ type ModuleCommonOptions = { debug?: boolean; pipeForId?: PipeMixin; operationUrl?: string; + // โœจ Add pipe for query support + pipeForQuery?: PipeMixin; + // โœจ Add context configuration + enableAuditLogging?: boolean; + enableContext?: boolean; + contextExtractor?: (request: any) => any; }; type ModuleOptionsParams> = IfEquals< diff --git a/libs/json-api/json-api-nestjs/src/lib/types/utils-type.ts b/libs/json-api/json-api-nestjs/src/lib/types/utils-type.ts index 4a853979..71f852df 100644 --- a/libs/json-api/json-api-nestjs/src/lib/types/utils-type.ts +++ b/libs/json-api/json-api-nestjs/src/lib/types/utils-type.ts @@ -2,7 +2,7 @@ import { CastIteratorType, HasId, Constructor, -} from '@klerick/json-api-nestjs-shared'; +} from '@yaser2us/json-api-nestjs-shared'; import { Any, Tuple, Union } from 'ts-toolbelt'; import { Type } from '@nestjs/common/interfaces'; diff --git a/libs/json-api/json-api-nestjs/src/lib/utils/___test___/test.helper.ts b/libs/json-api/json-api-nestjs/src/lib/utils/___test___/test.helper.ts index d83894fc..efdfb6cd 100644 --- a/libs/json-api/json-api-nestjs/src/lib/utils/___test___/test.helper.ts +++ b/libs/json-api/json-api-nestjs/src/lib/utils/___test___/test.helper.ts @@ -1,4 +1,4 @@ -import { EntityClass, Constructor } from '@klerick/json-api-nestjs-shared'; +import { EntityClass, Constructor } from '@yaser2us/json-api-nestjs-shared'; import { kebabCase } from 'change-case-commonjs'; import { EntityParamMapService } from '../../modules/mixin/service'; diff --git a/libs/json-api/json-api-nestjs/src/lib/utils/module-helper.ts b/libs/json-api/json-api-nestjs/src/lib/utils/module-helper.ts index 6649d37e..b48fab1c 100644 --- a/libs/json-api/json-api-nestjs/src/lib/utils/module-helper.ts +++ b/libs/json-api/json-api-nestjs/src/lib/utils/module-helper.ts @@ -1,5 +1,5 @@ import { ParseIntPipe } from '@nestjs/common'; -import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared'; +import { AnyEntity, EntityClass } from '@yaser2us/json-api-nestjs-shared'; import { NestController, @@ -29,6 +29,11 @@ export function prepareConfig( requiredSelectField: !!options['requiredSelectField'], debug: !!options['debug'], pipeForId: options['pipeForId'] || ParseIntPipe, + // โœจ Add new options + pipeForQuery: options['pipeForQuery'] || '', + enableContext: !!options['enableContext'], + contextExtractor: options['contextExtractor'] || '', + enableAuditLogging: options['enableAuditLogging'] || true, }, }; } diff --git a/libs/json-api/json-api-nestjs/tsconfig.spec.json b/libs/json-api/json-api-nestjs/tsconfig.spec.json index 807e943f..7ea41474 100644 --- a/libs/json-api/json-api-nestjs/tsconfig.spec.json +++ b/libs/json-api/json-api-nestjs/tsconfig.spec.json @@ -6,7 +6,7 @@ "moduleResolution": "node16", "types": ["jest", "node"], "paths": { - "@klerick/json-api-nestjs-shared": [ + "@yaser2us/json-api-nestjs-shared": [ "libs/json-api/json-api-nestjs-shared/src/index.ts" ] }, diff --git a/libs/json-rpc/nestjs-json-rpc-sdk/README.md b/libs/json-rpc/nestjs-json-rpc-sdk/README.md index e26ed3df..98f80733 100644 --- a/libs/json-rpc/nestjs-json-rpc-sdk/README.md +++ b/libs/json-rpc/nestjs-json-rpc-sdk/README.md @@ -1,20 +1,20 @@

- NPM Version - Package License - NPM Downloads + NPM Version + Package License + NPM Downloads Commitizen friendly Coverage Badge

# nestjs-json-rpc-sdk -The plugin of client for help work with JSON-ROC over [nestjs-json-rpc](https://www.npmjs.com/package/@klerick/nestjs-json-rpc) +The plugin of client for help work with JSON-ROC over [nestjs-json-rpc](https://www.npmjs.com/package/@yaser2us/nestjs-json-rpc) Work with RPC look like call function ## Installation ```bash $ -npm install @klerick/nestjs-json-rpc-sdk +npm install @yaser2us/nestjs-json-rpc-sdk ``` ## Example @@ -43,7 +43,7 @@ export interface RpcService { ```typescript import { RpcFactory, -} from '@klerick/nestjs-json-rpc-sdk'; +} from '@yaser2us/nestjs-json-rpc-sdk'; const { rpc, rpcBatch } = RpcFactory( { rpcHost: `http://localhost:${port}`, @@ -70,7 +70,7 @@ You can use typescript for type checking: ```typescript import { RpcFactory, -} from '@klerick/nestjs-json-rpc-sdk'; +} from '@yaser2us/nestjs-json-rpc-sdk'; @@ -103,7 +103,7 @@ import axios from 'axios'; import { RpcFactory, axiosTransportFactory, -} from '@klerick/nestjs-json-rpc-sdk'; +} from '@yaser2us/nestjs-json-rpc-sdk'; const { rpc, rpcBatch } = RpcFactory( { @@ -140,7 +140,7 @@ import axios from 'axios'; import { RpcFactory, axiosTransportFactory, -} from '@klerick/nestjs-json-rpc-sdk'; +} from '@yaser2us/nestjs-json-rpc-sdk'; const { rpc, rpcBatch, rpcForBatch } = RpcFactory( { @@ -166,7 +166,7 @@ For use **WebSocket** ```typescript import { RpcFactory, -} from '@klerick/nestjs-json-rpc-sdk'; +} from '@yaser2us/nestjs-json-rpc-sdk'; import { WebSocket as ws } from 'ws'; import { webSocket } from 'rxjs/webSocket'; @@ -191,7 +191,7 @@ You can use **socket.io** ```typescript import { RpcFactory, -} from '@klerick/nestjs-json-rpc-sdk'; +} from '@yaser2us/nestjs-json-rpc-sdk'; import { io } from 'socket.io-client'; @@ -217,7 +217,7 @@ import { provideJsonRpc, JsonRpcAngularConfig, TransportType, -} from '@klerick/nestjs-json-rpc-sdk/ngModule' +} from '@yaser2us/nestjs-json-rpc-sdk/ngModule' import { provideHttpClient, withFetch, @@ -228,7 +228,7 @@ import { JSON_RPC, RPC_BATCH, Rpc, -} from '@klerick/nestjs-json-rpc-sdk/json-rpc-sdk.module'; +} from '@yaser2us/nestjs-json-rpc-sdk/json-rpc-sdk.module'; @Component({ standalone: true, diff --git a/libs/json-rpc/nestjs-json-rpc-sdk/package.json b/libs/json-rpc/nestjs-json-rpc-sdk/package.json index 2cf88cbb..3909457e 100644 --- a/libs/json-rpc/nestjs-json-rpc-sdk/package.json +++ b/libs/json-rpc/nestjs-json-rpc-sdk/package.json @@ -1,10 +1,10 @@ { - "name": "@klerick/nestjs-json-rpc-sdk", + "name": "@yaser2us/nestjs-json-rpc-sdk", "version": "2.0.0", "engines": { "node": ">= 16.0.0" }, - "description": "Client for RPS server, which use @klerick/nestjs-json-rpc", + "description": "Client for RPS server, which use @yaser2us/nestjs-json-rpc", "contributors": [ { "email": "klerick666@gmain.com", diff --git a/libs/json-rpc/nestjs-json-rpc/README.md b/libs/json-rpc/nestjs-json-rpc/README.md index 1da12fa3..7738c578 100644 --- a/libs/json-rpc/nestjs-json-rpc/README.md +++ b/libs/json-rpc/nestjs-json-rpc/README.md @@ -1,7 +1,7 @@

- NPM Version - Package License - NPM Downloads + NPM Version + Package License + NPM Downloads Commitizen friendly Coverage Badge

@@ -14,7 +14,7 @@ Now, You can use HTTP or WebSocket as transport protocol. ## Installation ```bash -$ npm install @klerick/nestjs-json-rpc +$ npm install @yaser2us/nestjs-json-rpc ``` ## Example @@ -22,7 +22,7 @@ Once the installation process is complete, we can import the **NestjsJsonRpcModu ```typescript import {Module} from '@nestjs/common'; -import { NestjsJsonRpcModule, TransportType } from '@klerick/nestjs-json-rpc'; +import { NestjsJsonRpcModule, TransportType } from '@yaser2us/nestjs-json-rpc'; @Module({ imports: [ @@ -42,7 +42,7 @@ so, now you have rpc server which allow: ```typescript import {Module} from '@nestjs/common'; -import { NestjsJsonRpcModule, TransportType } from '@klerick/nestjs-json-rpc'; +import { NestjsJsonRpcModule, TransportType } from '@yaser2us/nestjs-json-rpc'; @Module({ imports: [ @@ -83,7 +83,7 @@ import { RpcHandler, RpcParamsPipe, createErrorCustomError, -} from '@klerick/nestjs-json-rpc'; +} from '@yaser2us/nestjs-json-rpc'; @RpcHandler() export class RpcService { diff --git a/libs/json-rpc/nestjs-json-rpc/package.json b/libs/json-rpc/nestjs-json-rpc/package.json index 072c0708..d7c0d2bb 100644 --- a/libs/json-rpc/nestjs-json-rpc/package.json +++ b/libs/json-rpc/nestjs-json-rpc/package.json @@ -1,5 +1,5 @@ { - "name": "@klerick/nestjs-json-rpc", + "name": "@yaser2us/nestjs-json-rpc", "version": "1.0.0", "engines": { "node": ">= 16.0.0" diff --git a/libs/typeorm-database/src/lib/config-cli.ts b/libs/typeorm-database/src/lib/config-cli.ts index 9ca9bd1b..ba85b018 100644 --- a/libs/typeorm-database/src/lib/config-cli.ts +++ b/libs/typeorm-database/src/lib/config-cli.ts @@ -3,13 +3,23 @@ import { join } from 'path'; import * as process from 'process'; const configPg: DataSourceOptions = { - type: process.env['DB_TYPE'] as 'mysql' | 'postgres', - host: process.env['DB_HOST'], - port: parseInt(`${process.env['DB_PORT']}`, 10), - username: process.env['DB_USERNAME'], - password: process.env['DB_PASSWORD'], - database: process.env['DB_NAME'], - logging: process.env['DB_LOGGING'] === '1', + // type: process.env['DB_TYPE'] as 'mysql' | 'postgres', + // host: process.env['DB_HOST'], + // port: parseInt(`${process.env['DB_PORT']}`, 10), + + type: 'postgres', //process.env['DB_TYPE'] as 'postgres' | 'postgres', + host: "localhost", // process.env['DB_HOST'], + port: 5432, //parseInt(`${process.env['DB_PORT']}`, 5432), + username: "postgres", //process.env['DB_USERNAME'], + password: "new_password", //process.env['DB_PASSWORD'], + database: "yasser", //process.env['DB_NAME'], + // logging: 'all', //process.env['DB_LOGGING'] === '1', + logging: ['query', 'error'], + + // username: process.env['DB_USERNAME'], + // password: process.env['DB_PASSWORD'], + // database: process.env['DB_NAME'], + // logging: process.env['DB_LOGGING'] === '1', migrations: [join(__dirname, '/migrations/**/*{.ts,.js}')], entities: [join(__dirname, '/entities/**/*{.ts,.js}')], ...(process.env['DB_TYPE'] === 'mysql' ? { connectorPackage: 'mysql2' } : {}), diff --git a/libs/typeorm-database/src/lib/entities/book-list.ts b/libs/typeorm-database/src/lib/entities/book-list.ts index 31131e63..d46b406d 100644 --- a/libs/typeorm-database/src/lib/entities/book-list.ts +++ b/libs/typeorm-database/src/lib/entities/book-list.ts @@ -6,7 +6,7 @@ import { UpdateDateColumn, } from 'typeorm'; -import { IUsers, Users } from './users'; +import { IUsers, Users } from './usersL'; export type IBookList = BookList; diff --git a/libs/typeorm-database/src/lib/entities/index.ts b/libs/typeorm-database/src/lib/entities/index.ts index 35a21523..dc853158 100644 --- a/libs/typeorm-database/src/lib/entities/index.ts +++ b/libs/typeorm-database/src/lib/entities/index.ts @@ -1,6 +1,11 @@ export * from './addresses'; export * from './roles'; -export * from './users'; +export * from './usersL'; export * from './comments'; export * from './users-have-roles'; export * from './book-list'; +export * from './user'; +export * from './workspace'; +export * from './school'; +export * from './yasser'; + diff --git a/libs/typeorm-database/src/lib/entities/school.ts b/libs/typeorm-database/src/lib/entities/school.ts new file mode 100644 index 00000000..8ecdc0f3 --- /dev/null +++ b/libs/typeorm-database/src/lib/entities/school.ts @@ -0,0 +1,15 @@ +import { Entity, PrimaryGeneratedColumn, Column, OneToMany, PrimaryColumn, BeforeInsert } from 'typeorm'; +// import { nanoid } from 'nanoid'; +import { YasserNasser } from "./yasser" + +@Entity('school') +export class School { + @PrimaryGeneratedColumn() // ๐Ÿ‘ˆ This allows you to assign the ID manually + id!: string; + + @Column() + name!: string; + + @OneToMany(() => YasserNasser, yasser => yasser.school) + YasserNasser!: YasserNasser[]; +} diff --git a/libs/typeorm-database/src/lib/entities/user.ts b/libs/typeorm-database/src/lib/entities/user.ts new file mode 100644 index 00000000..e8ccdc4d --- /dev/null +++ b/libs/typeorm-database/src/lib/entities/user.ts @@ -0,0 +1,24 @@ +import { Entity, PrimaryGeneratedColumn, Column, OneToMany, ManyToOne } from 'typeorm'; +import { Workspace } from './workspace'; + +@Entity('user') +export class User { + @PrimaryGeneratedColumn('uuid') + id!: string; + + @Column({ unique: true }) + email!: string; + + @Column() + name!: string; + + @Column() + domain!: string; + + @Column({ type: 'jsonb', nullable: true }) + metadata!: Record; + + @ManyToOne(() => Workspace, workspace => workspace.users, { eager: true }) + workspace!: Workspace; +} + diff --git a/libs/typeorm-database/src/lib/entities/users.ts b/libs/typeorm-database/src/lib/entities/usersL.ts similarity index 100% rename from libs/typeorm-database/src/lib/entities/users.ts rename to libs/typeorm-database/src/lib/entities/usersL.ts diff --git a/libs/typeorm-database/src/lib/entities/workspace.ts b/libs/typeorm-database/src/lib/entities/workspace.ts new file mode 100644 index 00000000..894b3f1d --- /dev/null +++ b/libs/typeorm-database/src/lib/entities/workspace.ts @@ -0,0 +1,17 @@ +import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm'; +import { User } from './user'; + +@Entity('workspaces') +export class Workspace { + @PrimaryGeneratedColumn('uuid') + id!: string; + + @Column() + name!: string; + + @Column({ type: 'jsonb', nullable: true }) + metadata!: Record; + + @OneToMany(() => User, user => user.workspace) + users!: User[]; +} diff --git a/libs/typeorm-database/src/lib/entities/yasser.ts b/libs/typeorm-database/src/lib/entities/yasser.ts new file mode 100644 index 00000000..7b9a0230 --- /dev/null +++ b/libs/typeorm-database/src/lib/entities/yasser.ts @@ -0,0 +1,22 @@ +import { Entity, ManyToOne, Column, PrimaryColumn, BeforeInsert } from 'typeorm'; +// import { nanoid } from 'nanoid'; +import { School } from './school'; +@Entity('yassernasser') +export class YasserNasser { + @PrimaryColumn() // ๐Ÿ‘ˆ This allows you to assign the ID manually + id!: string; + + @Column() + name!: string; + + @Column({ type: 'jsonb', nullable: true }) + metadata!: Record; + + @ManyToOne(() => School, school => school.YasserNasser, { eager: true }) + school!: School; + // @BeforeInsert() + // generateId() { + // this.id = "2" // this.id || `ws_${nanoid()}`; + // } +} +// \ No newline at end of file diff --git a/package.json b/package.json index 6e38623e..fc5845c2 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,20 @@ { - "name": "@nestjs-json-api/source", - "version": "0.0.0", + "name": "@yaser2us/nestjs-json-api-source", + "version": "0.0.1", "license": "MIT", "contributors": [ { "email": "klerick666@gmain.com", "name": "Aleksandr Kharkovey" + }, + { + "email": "yaser2us@gmail.com", + "name": "Yasser Batoie" } ], "repository": { "type": "git", - "url": "https://github.com/klerick/nestjs-json-api.git" + "url": "https://github.com/yaser2us/nestjs-json-api.git" }, "engines": { "node": ">= 20.0.0" @@ -143,5 +147,6 @@ }, "publishConfig": { "access": "public" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/tsconfig.base.json b/tsconfig.base.json index 5afe9edd..b438ada7 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -15,19 +15,19 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - "@klerick/json-api-nestjs-microorm": [ + "@yaser2us/json-api-nestjs-microorm": [ "dist/libs/json-api/json-api-nestjs-microorm" ], - "@klerick/json-api-nestjs-typeorm": [ + "@yaser2us/json-api-nestjs-typeorm": [ "dist/libs/json-api/json-api-nestjs-typeorm" ], - "@klerick/nestjs-json-rpc": [ + "@yaser2us/nestjs-json-rpc": [ "libs/json-rpc/nestjs-json-rpc/src/index.ts" ], - "@klerick/nestjs-json-rpc-sdk": [ + "@yaser2us/nestjs-json-rpc-sdk": [ "libs/json-rpc/nestjs-json-rpc-sdk/src/index.ts" ], - "@klerick/nestjs-json-rpc-sdk/ngModule": [ + "@yaser2us/nestjs-json-rpc-sdk/ngModule": [ "libs/json-rpc/nestjs-json-rpc-sdk/src/ngModule.ts" ], "@nestjs-json-api/microorm-database": [