@drax/identity-back 0.0.21 → 0.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/factory/RoleServiceFactory.js +0 -1
  2. package/dist/factory/TenantServiceFactory.js +0 -1
  3. package/dist/factory/UserServiceFactory.js +0 -1
  4. package/dist/graphql/resolvers/role.resolvers.js +2 -2
  5. package/dist/graphql/resolvers/tenant.resolvers.js +2 -2
  6. package/dist/graphql/resolvers/user.resolvers.js +8 -2
  7. package/dist/graphql/types/role.graphql +1 -1
  8. package/dist/graphql/types/tenant.graphql +1 -1
  9. package/dist/graphql/types/user.graphql +1 -1
  10. package/dist/models/UserModel.js +8 -16
  11. package/dist/repository/mongo/RoleMongoRepository.js +1 -1
  12. package/dist/repository/mongo/TenantMongoRepository.js +1 -1
  13. package/dist/repository/mongo/UserMongoRepository.js +1 -1
  14. package/dist/repository/sqlite/RoleSqliteRepository.js +33 -33
  15. package/dist/repository/sqlite/TenantSqliteRepository.js +3 -14
  16. package/dist/repository/sqlite/UserSqliteRepository.js +1 -1
  17. package/dist/routes/RoleRoutes.js +3 -1
  18. package/dist/routes/TenantRoutes.js +3 -1
  19. package/dist/routes/UserRoutes.js +9 -1
  20. package/dist/services/RoleService.js +2 -2
  21. package/dist/services/TenantService.js +2 -2
  22. package/dist/services/UserService.js +4 -2
  23. package/package.json +5 -2
  24. package/src/factory/RoleServiceFactory.ts +0 -1
  25. package/src/factory/TenantServiceFactory.ts +0 -1
  26. package/src/factory/UserServiceFactory.ts +0 -1
  27. package/src/graphql/resolvers/role.resolvers.ts +2 -2
  28. package/src/graphql/resolvers/tenant.resolvers.ts +2 -2
  29. package/src/graphql/resolvers/user.resolvers.ts +8 -2
  30. package/src/graphql/types/role.graphql +1 -1
  31. package/src/graphql/types/tenant.graphql +1 -1
  32. package/src/graphql/types/user.graphql +1 -1
  33. package/src/index.ts +6 -9
  34. package/src/interfaces/IRoleRepository.ts +5 -10
  35. package/src/interfaces/ITenantRepository.ts +4 -10
  36. package/src/interfaces/IUserRepository.ts +6 -12
  37. package/src/middleware/jwtMiddleware.ts +1 -1
  38. package/src/middleware/rbacMiddleware.ts +1 -2
  39. package/src/models/RoleModel.ts +1 -1
  40. package/src/models/TenantModel.ts +1 -1
  41. package/src/models/UserGroupModel.ts +1 -1
  42. package/src/models/UserModel.ts +9 -17
  43. package/src/rbac/Rbac.ts +1 -2
  44. package/src/repository/mongo/RoleMongoRepository.ts +14 -8
  45. package/src/repository/mongo/TenantMongoRepository.ts +14 -7
  46. package/src/repository/mongo/UserMongoRepository.ts +14 -9
  47. package/src/repository/sqlite/RoleSqliteRepository.ts +53 -44
  48. package/src/repository/sqlite/TenantSqliteRepository.ts +15 -23
  49. package/src/repository/sqlite/UserSqliteRepository.ts +15 -10
  50. package/src/routes/RoleRoutes.ts +7 -4
  51. package/src/routes/TenantRoutes.ts +7 -5
  52. package/src/routes/UserRoutes.ts +13 -4
  53. package/src/services/RoleService.ts +15 -8
  54. package/src/services/TenantService.ts +15 -9
  55. package/src/services/UserService.ts +15 -7
  56. package/src/setup/CreateOrUpdateRole.ts +2 -2
  57. package/src/setup/CreateUserIfNotExist.ts +1 -1
  58. package/test/data-obj/roles/admin-mongo-role.ts +1 -1
  59. package/test/initializers/RoleMongoInitializer.ts +1 -1
  60. package/test/initializers/RoleSqliteInitializer.ts +1 -1
  61. package/test/repository/mongo/role-mongo-repository.test.ts +1 -1
  62. package/test/repository/mongo/user-mongo-repository.test.ts +1 -1
  63. package/test/repository/sqlite/role-sqlite-repository.test.ts +1 -1
  64. package/test/repository/sqlite/user-sqlite-repository.test.ts +2 -2
  65. package/test/service/mock-service.test.ts +2 -2
  66. package/test/service/role-service.test.ts +2 -2
  67. package/test/service/user-service.test.ts +3 -3
  68. package/tsconfig.tsbuildinfo +1 -1
  69. package/types/factory/RoleServiceFactory.d.ts.map +1 -1
  70. package/types/factory/TenantServiceFactory.d.ts.map +1 -1
  71. package/types/factory/UserServiceFactory.d.ts.map +1 -1
  72. package/types/graphql/resolvers/role.resolvers.d.ts +10 -8
  73. package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
  74. package/types/graphql/resolvers/tenant.resolvers.d.ts +10 -8
  75. package/types/graphql/resolvers/tenant.resolvers.d.ts.map +1 -1
  76. package/types/graphql/resolvers/user.resolvers.d.ts +8 -6
  77. package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
  78. package/types/index.d.ts +3 -5
  79. package/types/index.d.ts.map +1 -1
  80. package/types/interfaces/IRoleRepository.d.ts +4 -10
  81. package/types/interfaces/IRoleRepository.d.ts.map +1 -1
  82. package/types/interfaces/ITenantRepository.d.ts +4 -10
  83. package/types/interfaces/ITenantRepository.d.ts.map +1 -1
  84. package/types/interfaces/IUserRepository.d.ts +5 -11
  85. package/types/interfaces/IUserRepository.d.ts.map +1 -1
  86. package/types/middleware/rbacMiddleware.d.ts.map +1 -1
  87. package/types/models/RoleModel.d.ts +1 -1
  88. package/types/models/RoleModel.d.ts.map +1 -1
  89. package/types/models/TenantModel.d.ts +1 -1
  90. package/types/models/TenantModel.d.ts.map +1 -1
  91. package/types/models/UserGroupModel.d.ts +1 -1
  92. package/types/models/UserGroupModel.d.ts.map +1 -1
  93. package/types/models/UserModel.d.ts +1 -1
  94. package/types/models/UserModel.d.ts.map +1 -1
  95. package/types/rbac/Rbac.d.ts +1 -2
  96. package/types/rbac/Rbac.d.ts.map +1 -1
  97. package/types/repository/mongo/RoleMongoRepository.d.ts +7 -8
  98. package/types/repository/mongo/RoleMongoRepository.d.ts.map +1 -1
  99. package/types/repository/mongo/TenantMongoRepository.d.ts +7 -8
  100. package/types/repository/mongo/TenantMongoRepository.d.ts.map +1 -1
  101. package/types/repository/mongo/UserMongoRepository.d.ts +7 -9
  102. package/types/repository/mongo/UserMongoRepository.d.ts.map +1 -1
  103. package/types/repository/sqlite/RoleSqliteRepository.d.ts +10 -11
  104. package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +1 -1
  105. package/types/repository/sqlite/TenantSqliteRepository.d.ts +7 -8
  106. package/types/repository/sqlite/TenantSqliteRepository.d.ts.map +1 -1
  107. package/types/repository/sqlite/UserSqliteRepository.d.ts +9 -12
  108. package/types/repository/sqlite/UserSqliteRepository.d.ts.map +1 -1
  109. package/types/routes/RoleRoutes.d.ts.map +1 -1
  110. package/types/routes/TenantRoutes.d.ts.map +1 -1
  111. package/types/routes/UserRoutes.d.ts.map +1 -1
  112. package/types/services/RoleService.d.ts +7 -7
  113. package/types/services/RoleService.d.ts.map +1 -1
  114. package/types/services/TenantService.d.ts +7 -7
  115. package/types/services/TenantService.d.ts.map +1 -1
  116. package/types/services/UserService.d.ts +6 -6
  117. package/types/services/UserService.d.ts.map +1 -1
  118. package/types/setup/CreateOrUpdateRole.d.ts +2 -2
  119. package/types/setup/CreateOrUpdateRole.d.ts.map +1 -1
  120. package/types/setup/CreateUserIfNotExist.d.ts +1 -1
  121. package/types/setup/CreateUserIfNotExist.d.ts.map +1 -1
  122. package/src/interfaces/IID.ts +0 -5
  123. package/src/interfaces/IJwtUser.ts +0 -7
  124. package/src/interfaces/IRole.ts +0 -21
  125. package/src/interfaces/ITenant.ts +0 -9
  126. package/src/interfaces/IUser.ts +0 -48
  127. package/src/interfaces/IUserGroup.ts +0 -11
package/src/index.ts CHANGED
@@ -25,23 +25,20 @@ import LoadPermissions from "./setup/LoadPermissions.js";
25
25
  import LoadIdentityConfigFromEnv from "./setup/LoadIdentityConfigFromEnv.js";
26
26
  import RecoveryUserPassword from "./setup/RecoveryUserPassword.js";
27
27
 
28
- import type {IJwtUser} from "./interfaces/IJwtUser";
29
- import type {IRole, IRoleBase} from "./interfaces/IRole";
30
- import type {IUser, IUserCreate, IUserUpdate} from "./interfaces/IUser";
31
- import type {IUserRepository} from "./interfaces/IUserRepository";
32
28
  import type {IRoleRepository} from "./interfaces/IRoleRepository";
29
+ import type {ITenantRepository} from "./interfaces/ITenantRepository";
30
+ import type {IUserRepository} from "./interfaces/IUserRepository";
31
+
33
32
 
34
33
  const graphqlMergeResult = await GraphqlMerge()
35
34
  const identityTypeDefs = await graphqlMergeResult.typeDefs;
36
35
  const identityResolvers = await graphqlMergeResult.resolvers;
37
36
 
37
+
38
38
  export type {
39
- IJwtUser,
40
- IRole,
41
- IRoleBase,
42
39
  IRoleRepository,
43
- IUser, IUserCreate, IUserUpdate,
44
- IUserRepository
40
+ ITenantRepository,
41
+ IUserRepository,
45
42
  }
46
43
 
47
44
  export {
@@ -1,15 +1,10 @@
1
- import {IRole} from './IRole'
2
- import {IPaginateFilter, IPaginateResult} from "@drax/common-back";
3
- import {IID} from "./IID";
4
- interface IRoleRepository{
5
- create(role: IRole): Promise<IRole>;
6
- update(id: IID, updatedRole: IRole): Promise<IRole | null>;
7
- delete(id: IID): Promise<boolean>;
8
- findById(id: IID): Promise<IRole | null>;
1
+ import {IRole, IRoleBase} from "@drax/identity-share";
2
+ import {IDraxCrud} from "@drax/common-share";
3
+
4
+ interface IRoleRepository extends IDraxCrud<IRole, IRoleBase, IRoleBase> {
5
+ findById(id: string): Promise<IRole | null>;
9
6
  findByName(name: string): Promise<IRole | null>;
10
7
  fetchAll(): Promise<IRole[]>;
11
- paginate(page?: number, limit?: number, search?:string, filters?: IPaginateFilter[]): Promise<IPaginateResult>;
12
- table?():void
13
8
  }
14
9
 
15
10
  export {IRoleRepository}
@@ -1,15 +1,9 @@
1
- import {ITenant} from './ITenant'
2
- import {IPaginateFilter, IPaginateResult} from "@drax/common-back";
3
- import {IID} from "./IID";
4
- interface ITenantRepository{
5
- create(role: ITenant): Promise<ITenant>;
6
- update(id: IID, updatedRole: ITenant): Promise<ITenant | null>;
7
- delete(id: IID): Promise<boolean>;
8
- findById(id: IID): Promise<ITenant | null>;
1
+ import {ITenant, ITenantBase} from '@drax/identity-share'
2
+ import {IDraxCrud} from "@drax/common-share";
3
+ interface ITenantRepository extends IDraxCrud<ITenant,ITenantBase,ITenantBase>{
4
+ findById(id: string): Promise<ITenant | null>;
9
5
  findByName(name: string): Promise<ITenant | null>;
10
6
  fetchAll(): Promise<ITenant[]>;
11
- paginate(page?: number, limit?: number, search?:string, filters?: IPaginateFilter[]): Promise<IPaginateResult>;
12
- table?():void
13
7
  }
14
8
 
15
9
  export {ITenantRepository}
@@ -1,16 +1,10 @@
1
- import {IUser, IUserCreate, IUserUpdate} from './IUser'
2
- import {IPaginateFilter, IPaginateResult} from "@drax/common-back";
3
- import {IID} from "./IID";
4
- interface IUserRepository{
5
- create(role: IUserCreate): Promise<IUser>;
6
- update(id: IID, updatedRole: IUserUpdate): Promise<IUser | null>;
7
- delete(id: IID): Promise<boolean>;
8
- findById(id: IID): Promise<IUser | null>;
9
- findByUsername(username: string): Promise<IUser | null>;
10
- paginate(page?: number, limit?: number, search?: string, filters?: IPaginateFilter[]): Promise<IPaginateResult>;
11
- changePassword(id: IID, password:string):Promise<Boolean>;
12
- table?():void
1
+ import {IUser, IUserCreate, IUserUpdate} from '@drax/identity-share'
2
+ import {IDraxCrud} from "@drax/common-share";
13
3
 
4
+ interface IUserRepository extends IDraxCrud<IUser, IUserCreate, IUserUpdate>{
5
+ findById(id: string): Promise<IUser | null>;
6
+ findByUsername(username: string): Promise<IUser | null>;
7
+ changePassword(id: string, password:string):Promise<Boolean>;
14
8
  }
15
9
 
16
10
  export {IUserRepository}
@@ -1,5 +1,5 @@
1
1
  import AuthUtils from "../utils/AuthUtils.js";
2
- import {IJwtUser} from "../interfaces/IJwtUser";
2
+ import {IJwtUser} from "@drax/identity-share";
3
3
 
4
4
  function jwtMiddleware (request, reply, done) {
5
5
  try{
@@ -1,5 +1,4 @@
1
- import type {IJwtUser} from "../interfaces/IJwtUser";
2
- import type {IRole} from "../interfaces/IRole";
1
+ import {IJwtUser, IRole} from "@drax/identity-share";
3
2
  import {DraxCache, DraxConfig} from "@drax/common-back";
4
3
  import RoleServiceFactory from "../factory/RoleServiceFactory.js";
5
4
  import Rbac from "../rbac/Rbac.js";
@@ -1,7 +1,7 @@
1
1
  import {mongoose, MongooseSoftDelete} from '@drax/common-back';
2
2
  import uniqueValidator from 'mongoose-unique-validator';
3
3
  import mongoosePaginate from 'mongoose-paginate-v2'
4
- import {IRole} from '../interfaces/IRole'
4
+ import {IRole} from '@drax/identity-share'
5
5
  const Schema = mongoose.Schema
6
6
  import {PaginateModel} from "mongoose";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import {mongoose, MongooseSoftDelete} from '@drax/common-back';
2
2
  import uniqueValidator from 'mongoose-unique-validator';
3
3
  import mongoosePaginate from 'mongoose-paginate-v2'
4
- import {ITenant} from '../interfaces/ITenant'
4
+ import {ITenant} from '@drax/identity-share'
5
5
  const Schema = mongoose.Schema
6
6
  import {PaginateModel} from "mongoose";
7
7
 
@@ -1,5 +1,5 @@
1
1
  import {mongoose, MongooseSoftDelete} from '@drax/common-back';
2
- import {IUserGroup} from "../interfaces/IUserGroup";
2
+ import {IUserGroup} from "@drax/identity-share";
3
3
  import uniqueValidator from 'mongoose-unique-validator';
4
4
  import mongoosePaginate from 'mongoose-paginate-v2'
5
5
  import {PaginateModel} from "mongoose";
@@ -1,5 +1,5 @@
1
1
  import {mongoose, MongooseSoftDelete} from '@drax/common-back';
2
- import {IUser} from "../interfaces/IUser";
2
+ import {IUser} from "@drax/identity-share";
3
3
  import uniqueValidator from 'mongoose-unique-validator';
4
4
  import mongoosePaginate from 'mongoose-paginate-v2'
5
5
  import {PaginateModel} from "mongoose";
@@ -33,13 +33,13 @@ const UserSchema = new mongoose.Schema<IUser>({
33
33
  message: "Invalid email format"
34
34
  }
35
35
  },
36
- password: {type: String, required: true},
37
- code: {type: String, required: false},
38
- name: {type: String, required: false},
39
- active: {type: Boolean, required: true, default: false},
36
+ password: {type: String, required: true, index: false},
37
+ name: {type: String, required: false, index: false},
38
+ active: {type: Boolean, required: true, default: false, index: false},
40
39
  phone: {
41
40
  type: String,
42
41
  required: false,
42
+ index: false,
43
43
  validate: {
44
44
  validator: function (value: string) {
45
45
  let r = /[0-9]+/;
@@ -48,33 +48,25 @@ const UserSchema = new mongoose.Schema<IUser>({
48
48
  message: "Invalid Phone format"
49
49
  }
50
50
  },
51
- avatar: {type: String, required: false},
51
+ avatar: {type: String, required: false, index:false},
52
52
  role: {
53
53
  type: mongoose.Schema.Types.ObjectId,
54
54
  ref: 'Role',
55
55
  required: true,
56
+ index: false
56
57
  },
57
58
  tenant: {
58
59
  type: mongoose.Schema.Types.ObjectId,
59
60
  ref: 'Tenant',
60
61
  required: false,
62
+ index: false
61
63
  },
62
64
  groups: [{
63
65
  type: mongoose.Schema.Types.ObjectId,
64
66
  ref: 'Group',
65
67
  required: false,
68
+ index: false
66
69
  }],
67
- /* refreshToken: {
68
- type: [
69
- {
70
- id: {type: String},
71
- expiryDate: {type: Date},
72
- sessionId: {type: String},
73
- }
74
- ],
75
- default: [],
76
- id: false
77
- }*/
78
70
  }, {timestamps: true});
79
71
 
80
72
  UserSchema.set('toJSON', {getters: true});
package/src/rbac/Rbac.ts CHANGED
@@ -1,5 +1,4 @@
1
- import {IRole} from "../interfaces/IRole";
2
- import {IJwtUser} from "../interfaces/IJwtUser";
1
+ import {IJwtUser, IRole} from "@drax/identity-share";
3
2
  import UnauthorizedError from "../errors/UnauthorizedError.js";
4
3
 
5
4
  class Rbac{
@@ -1,30 +1,31 @@
1
1
  import {RoleModel} from "../../models/RoleModel.js";
2
- import {IRole} from '../../interfaces/IRole'
3
2
  import {IRoleRepository} from '../../interfaces/IRoleRepository'
4
- import {IPaginateFilter, IPaginateResult, mongoose} from "@drax/common-back";
3
+ import { mongoose} from "@drax/common-back";
5
4
  import {FilterQuery, PaginateOptions, PaginateResult} from "mongoose";
6
5
  import {DeleteResult} from "mongodb";
6
+ import {IDraxPaginateOptions, IDraxPaginateResult} from "@drax/common-share";
7
+ import {IRoleBase, IRole} from "@drax/identity-share";
7
8
 
8
9
  class RoleMongoRepository implements IRoleRepository{
9
10
 
10
- async create(roleData: IRole): Promise<IRole> {
11
+ async create(roleData: IRoleBase): Promise<IRole> {
11
12
  const role : mongoose.HydratedDocument<IRole> = new RoleModel(roleData)
12
13
  await role.save()
13
14
  await role.populate('childRoles')
14
15
  return role
15
16
  }
16
17
 
17
- async update(id: mongoose.Types.ObjectId | string, roleData: IRole): Promise<IRole> {
18
+ async update(id: string, roleData: IRoleBase): Promise<IRole> {
18
19
  const role : mongoose.HydratedDocument<IRole> = await RoleModel.findOneAndUpdate({_id: id}, roleData, {new: true}).populate('childRoles').exec()
19
20
  return role
20
21
  }
21
22
 
22
- async delete(id: mongoose.Types.ObjectId): Promise<boolean> {
23
+ async delete(id: string): Promise<boolean> {
23
24
  const result : DeleteResult = await RoleModel.deleteOne({_id: id}).exec()
24
25
  return result.deletedCount == 1
25
26
  }
26
27
 
27
- async findById(id: mongoose.Types.ObjectId): Promise<IRole | null>{
28
+ async findById(id: string): Promise<IRole | null>{
28
29
  const role: mongoose.HydratedDocument<IRole> | null = await RoleModel.findById(id).populate('childRoles').exec()
29
30
  return role
30
31
  }
@@ -39,8 +40,13 @@ class RoleMongoRepository implements IRoleRepository{
39
40
  return roles
40
41
  }
41
42
 
42
- async paginate(page:number = 1, limit:number = 5, search:string): Promise<IPaginateResult>{
43
-
43
+ async paginate({
44
+ page= 1,
45
+ limit= 5,
46
+ orderBy= '',
47
+ orderDesc= false,
48
+ search= '',
49
+ filters= []} : IDraxPaginateOptions): Promise<IDraxPaginateResult<IRole>> {
44
50
  const query = {}
45
51
 
46
52
  if(search){
@@ -1,29 +1,30 @@
1
1
  import {TenantModel} from "../../models/TenantModel.js";
2
- import {ITenant} from '../../interfaces/ITenant'
3
2
  import {ITenantRepository} from '../../interfaces/ITenantRepository'
4
- import {IPaginateFilter, IPaginateResult, mongoose} from "@drax/common-back";
3
+ import { mongoose} from "@drax/common-back";
5
4
  import {FilterQuery, PaginateOptions, PaginateResult} from "mongoose";
6
5
  import {DeleteResult} from "mongodb";
6
+ import {IDraxPaginateOptions, IDraxPaginateResult} from "@drax/common-share";
7
+ import {ITenant, ITenantBase} from "@drax/identity-share";
7
8
 
8
9
  class TenantMongoRepository implements ITenantRepository{
9
10
 
10
- async create(tenantData: ITenant): Promise<ITenant> {
11
+ async create(tenantData: ITenantBase): Promise<ITenant> {
11
12
  const tenant : mongoose.HydratedDocument<ITenant> = new TenantModel(tenantData)
12
13
  await tenant.save()
13
14
  return tenant
14
15
  }
15
16
 
16
- async update(id: mongoose.Types.ObjectId | string, tenantData: ITenant): Promise<ITenant> {
17
+ async update(id: string, tenantData: ITenantBase): Promise<ITenant> {
17
18
  const tenant : mongoose.HydratedDocument<ITenant> = await TenantModel.findOneAndUpdate({_id: id}, tenantData, {new: true}).exec()
18
19
  return tenant
19
20
  }
20
21
 
21
- async delete(id: mongoose.Types.ObjectId): Promise<boolean> {
22
+ async delete(id: string): Promise<boolean> {
22
23
  const result : DeleteResult = await TenantModel.deleteOne({_id:id}).exec()
23
24
  return result.deletedCount == 1
24
25
  }
25
26
 
26
- async findById(id: mongoose.Types.ObjectId): Promise<ITenant | null>{
27
+ async findById(id: string): Promise<ITenant | null>{
27
28
  const tenant: mongoose.HydratedDocument<ITenant> | null = await TenantModel.findById(id).exec()
28
29
  return tenant
29
30
  }
@@ -38,7 +39,13 @@ class TenantMongoRepository implements ITenantRepository{
38
39
  return tenants
39
40
  }
40
41
 
41
- async paginate(page:number = 1, limit:number = 5, search:string): Promise<IPaginateResult>{
42
+ async paginate({
43
+ page= 1,
44
+ limit= 5,
45
+ orderBy= '',
46
+ orderDesc= false,
47
+ search= '',
48
+ filters= []} : IDraxPaginateOptions): Promise<IDraxPaginateResult<ITenant>> {
42
49
 
43
50
  const query = {}
44
51
 
@@ -1,11 +1,11 @@
1
1
  import {UserModel} from "../../models/UserModel.js";
2
2
  import {mongoose, MongooseErrorToValidationError, MongoServerErrorToValidationError, ValidationError} from "@drax/common-back"
3
- import type {IPaginateFilter, IPaginateResult} from "@drax/common-back"
4
- import type {IUser, IUserCreate, IUserUpdate} from "../../interfaces/IUser";
3
+ import type {IUser, IUserCreate, IUserUpdate} from "@drax/identity-share";
5
4
  import {DeleteResult, MongoServerError} from "mongodb";
6
5
  import type {IUserRepository} from "../../interfaces/IUserRepository";
7
6
  import {PaginateResult} from "mongoose";
8
7
  import RoleMongoRepository from "./RoleMongoRepository.js";
8
+ import {IDraxPaginateOptions, IDraxPaginateResult} from "@drax/common-share";
9
9
 
10
10
  class UserMongoRepository implements IUserRepository {
11
11
  private roleRepository: RoleMongoRepository;
@@ -18,7 +18,7 @@ class UserMongoRepository implements IUserRepository {
18
18
  async create(userData: IUserCreate): Promise<IUser> {
19
19
  try{
20
20
 
21
- if(!await this.roleRepository.findById(userData.role as mongoose.Types.ObjectId)){
21
+ if(!await this.roleRepository.findById(userData.role)){
22
22
  throw new ValidationError([{field: 'role', reason: 'validation.notfound', value: userData.role}])
23
23
  }
24
24
 
@@ -35,7 +35,7 @@ class UserMongoRepository implements IUserRepository {
35
35
 
36
36
  }
37
37
 
38
- async update(id: mongoose.Types.ObjectId, userData: IUserUpdate): Promise<IUser> {
38
+ async update(id: string, userData: IUserUpdate): Promise<IUser> {
39
39
  try{
40
40
  const user: mongoose.HydratedDocument<IUser> = await UserModel.findOneAndUpdate({_id: id}, userData, {new: true}).populate(['role','tenant']).exec()
41
41
  return user
@@ -50,13 +50,13 @@ class UserMongoRepository implements IUserRepository {
50
50
  }
51
51
  }
52
52
 
53
- async delete(id: mongoose.Types.ObjectId): Promise<boolean> {
53
+ async delete(id: string): Promise<boolean> {
54
54
  const result: DeleteResult = await UserModel.deleteOne({_id: id}).exec()
55
55
  return result.deletedCount == 1
56
56
  }
57
57
 
58
58
 
59
- async findById(id: mongoose.Types.ObjectId): Promise<IUser> {
59
+ async findById(id:string): Promise<IUser> {
60
60
  const user: mongoose.HydratedDocument<IUser> = await UserModel.findById(id).populate(['role','tenant']).exec()
61
61
  return user
62
62
  }
@@ -66,8 +66,13 @@ class UserMongoRepository implements IUserRepository {
66
66
  return user
67
67
  }
68
68
 
69
- async paginate(page: number = 1, limit: number = 5, search?:string, filters?:IPaginateFilter[]): Promise<IPaginateResult> {
70
-
69
+ async paginate({
70
+ page= 1,
71
+ limit= 5,
72
+ orderBy= '',
73
+ orderDesc= false,
74
+ search= '',
75
+ filters= []} : IDraxPaginateOptions): Promise<IDraxPaginateResult<IUser>> {
71
76
 
72
77
  const query = {}
73
78
 
@@ -104,7 +109,7 @@ class UserMongoRepository implements IUserRepository {
104
109
  }
105
110
  }
106
111
 
107
- async changePassword(id: mongoose.Types.ObjectId, password: string):Promise<boolean> {
112
+ async changePassword(id: string, password: string):Promise<boolean> {
108
113
  try{
109
114
  await UserModel.findOneAndUpdate({_id: id}, {password}).exec()
110
115
  return true
@@ -1,11 +1,10 @@
1
- import {IRole} from '../../interfaces/IRole'
2
1
  import {IRoleRepository} from '../../interfaces/IRoleRepository'
3
2
  import {UUID} from "crypto";
4
3
  import sqlite from "better-sqlite3";
5
4
  import {randomUUID} from "node:crypto";
6
- import {IPaginateFilter, IPaginateResult, ValidationError} from "@drax/common-back";
5
+ import {IDraxPaginateResult, IDraxPaginateOptions} from "@drax/common-share";
6
+ import {IRole, IRoleBase} from "@drax/identity-share";
7
7
  import {SqliteErrorToValidationError} from "@drax/common-back";
8
- import {IID} from "../../interfaces/IID";
9
8
 
10
9
  const roleTableSQL: string = `
11
10
  CREATE TABLE IF NOT EXISTS roles
@@ -32,7 +31,7 @@ class RoleSqliteRepository implements IRoleRepository{
32
31
  this.db.exec(roleTableSQL);
33
32
  }
34
33
 
35
- normalizeData(roleData: IRole){
34
+ normalizeData(roleData: IRoleBase){
36
35
 
37
36
  roleData.readonly = roleData.readonly ? 1 : 0
38
37
 
@@ -45,7 +44,7 @@ class RoleSqliteRepository implements IRoleRepository{
45
44
  }
46
45
  }
47
46
 
48
- async create(roleData: IRole): Promise<IRole> {
47
+ async create(roleData: IRoleBase): Promise<IRole> {
49
48
  try{
50
49
 
51
50
  if(!roleData.id){
@@ -76,25 +75,9 @@ class RoleSqliteRepository implements IRoleRepository{
76
75
  }
77
76
  }
78
77
 
79
- async findById(id: IID): Promise<IRole | null>{
80
- const role = this.db.prepare('SELECT * FROM roles WHERE id = ?').get(id);
81
- if(role){
82
- await this.populateRole(role)
83
- return role
84
- }
85
- return undefined
86
- }
87
78
 
88
- async findByName(name: string): Promise<IRole | null>{
89
- const role = this.db.prepare('SELECT * FROM roles WHERE name = ?').get(name);
90
- if(role){
91
- await this.populateRole(role)
92
- return role
93
- }
94
- return undefined
95
- }
96
79
 
97
- async update(id: IID, roleData: IRole): Promise<IRole> {
80
+ async update(id: string, roleData: IRoleBase): Promise<IRole> {
98
81
  try{
99
82
  this.normalizeData(roleData)
100
83
  const setClauses = Object.keys(roleData)
@@ -111,27 +94,13 @@ class RoleSqliteRepository implements IRoleRepository{
111
94
 
112
95
  }
113
96
 
114
- async delete(id: IID): Promise<boolean> {
115
- const stmt = this.db.prepare('DELETE FROM roles WHERE id = ?');
116
- stmt.run(id);
117
- return true
118
- }
119
-
120
- async deleteAll(): Promise<boolean> {
121
- const stmt = this.db.prepare('DELETE FROM roles');
122
- stmt.run();
123
- return true
124
- }
125
-
126
- async fetchAll(): Promise<IRole[]>{
127
- const roles = this.db.prepare('SELECT * FROM roles').all();
128
- for (const role of roles) {
129
- await this.populateRole(role)
130
- }
131
- return roles
132
- }
133
-
134
- async paginate(page = 1, limit = 5, search=""): Promise<IPaginateResult>{
97
+ async paginate({
98
+ page= 1,
99
+ limit= 5,
100
+ orderBy= '',
101
+ orderDesc= false,
102
+ search= '',
103
+ filters= []} : IDraxPaginateOptions): Promise<IDraxPaginateResult<IRole>>{
135
104
  const offset = page > 1 ? (page - 1) * limit : 0
136
105
 
137
106
  let where=""
@@ -154,7 +123,47 @@ class RoleSqliteRepository implements IRoleRepository{
154
123
  }
155
124
  }
156
125
 
157
- async findWithoutPopulateById(id: IID): Promise<IRole | null>{
126
+ async delete(id: string): Promise<boolean> {
127
+ const stmt = this.db.prepare('DELETE FROM roles WHERE id = ?');
128
+ stmt.run(id);
129
+ return true
130
+ }
131
+
132
+ async deleteAll(): Promise<boolean> {
133
+ const stmt = this.db.prepare('DELETE FROM roles');
134
+ stmt.run();
135
+ return true
136
+ }
137
+
138
+ async findById(id: string): Promise<IRole | null>{
139
+ const role = this.db.prepare('SELECT * FROM roles WHERE id = ?').get(id);
140
+ if(role){
141
+ await this.populateRole(role)
142
+ return role
143
+ }
144
+ return undefined
145
+ }
146
+
147
+ async findByName(name: string): Promise<IRole | null>{
148
+ const role = this.db.prepare('SELECT * FROM roles WHERE name = ?').get(name);
149
+ if(role){
150
+ await this.populateRole(role)
151
+ return role
152
+ }
153
+ return undefined
154
+ }
155
+
156
+ async fetchAll(): Promise<IRole[]>{
157
+ const roles = this.db.prepare('SELECT * FROM roles').all();
158
+ for (const role of roles) {
159
+ await this.populateRole(role)
160
+ }
161
+ return roles
162
+ }
163
+
164
+
165
+
166
+ async findWithoutPopulateById(id: string): Promise<IRole | null>{
158
167
  const role = this.db.prepare('SELECT * FROM roles WHERE id = ?').get(id);
159
168
  if(role){
160
169
  return role
@@ -1,11 +1,10 @@
1
- import {ITenant} from '../../interfaces/ITenant'
1
+ import {ITenant, ITenantBase} from '@drax/identity-share'
2
2
  import {ITenantRepository} from '../../interfaces/ITenantRepository'
3
3
  import {UUID} from "crypto";
4
4
  import sqlite from "better-sqlite3";
5
5
  import {randomUUID} from "node:crypto";
6
- import {IPaginateFilter, IPaginateResult, ValidationError} from "@drax/common-back";
6
+ import {IDraxPaginateResult, IDraxPaginateOptions} from "@drax/common-share";
7
7
  import {SqliteErrorToValidationError} from "@drax/common-back";
8
- import {IID} from "../../interfaces/IID";
9
8
 
10
9
  const tenantTableSQL: string = `
11
10
  CREATE TABLE IF NOT EXISTS tenants
@@ -30,7 +29,7 @@ class TenantSqliteRepository implements ITenantRepository{
30
29
 
31
30
 
32
31
 
33
- async create(tenantData: ITenant): Promise<ITenant> {
32
+ async create(tenantData: ITenantBase): Promise<ITenant> {
34
33
  try{
35
34
 
36
35
  if(!tenantData.id){
@@ -55,25 +54,17 @@ class TenantSqliteRepository implements ITenantRepository{
55
54
  }
56
55
  }
57
56
 
58
- async findById(id: IID): Promise<ITenant | null>{
57
+ async findById(id: string): Promise<ITenant | null>{
59
58
  const tenant = this.db.prepare('SELECT * FROM tenants WHERE id = ?').get(id);
60
- if(tenant){
61
- tenant.permissions = tenant.permissions ? tenant.permissions.split(",") : []
62
- return tenant
63
- }
64
- return undefined
59
+ return tenant
65
60
  }
66
61
 
67
62
  async findByName(name: string): Promise<ITenant | null>{
68
63
  const tenant = this.db.prepare('SELECT * FROM tenants WHERE name = ?').get(name);
69
- if(tenant){
70
- tenant.permissions = tenant.permissions ? tenant.permissions.split(",") : []
71
- return tenant
72
- }
73
- return undefined
64
+ return tenant
74
65
  }
75
66
 
76
- async update(id: IID, tenantData: ITenant): Promise<ITenant> {
67
+ async update(id: string, tenantData: ITenantBase): Promise<ITenant> {
77
68
  try{
78
69
  const setClauses = Object.keys(tenantData)
79
70
  .map(field => `${field} = @${field}`)
@@ -89,7 +80,7 @@ class TenantSqliteRepository implements ITenantRepository{
89
80
 
90
81
  }
91
82
 
92
- async delete(id: IID): Promise<boolean> {
83
+ async delete(id: string): Promise<boolean> {
93
84
  const stmt = this.db.prepare('DELETE FROM tenants WHERE id = ?');
94
85
  stmt.run(id);
95
86
  return true
@@ -109,7 +100,13 @@ class TenantSqliteRepository implements ITenantRepository{
109
100
  return tenants
110
101
  }
111
102
 
112
- async paginate(page = 1, limit = 5, search=""): Promise<IPaginateResult>{
103
+ async paginate({
104
+ page= 1,
105
+ limit= 5,
106
+ orderBy= '',
107
+ orderDesc= false,
108
+ search= '',
109
+ filters= []} : IDraxPaginateOptions): Promise<IDraxPaginateResult<ITenant>>{
113
110
  const offset = page > 1 ? (page - 1) * limit : 0
114
111
 
115
112
  let where=""
@@ -120,11 +117,6 @@ class TenantSqliteRepository implements ITenantRepository{
120
117
  const rCount = this.db.prepare('SELECT COUNT(*) as count FROM tenants'+where).get();
121
118
  const tenants = this.db.prepare('SELECT * FROM tenants LIMIT ? OFFSET ?'+where).all([limit, offset]);
122
119
 
123
- for (const tenant of tenants) {
124
- tenant.permissions = tenant.permissions? tenant.permissions.split(",") : []
125
- }
126
-
127
-
128
120
  return {
129
121
  page: page,
130
122
  limit: limit,