@drax/identity-back 0.0.3

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 (110) hide show
  1. package/dist/factory/AuthServiceFactory.js +8 -0
  2. package/dist/factory/RoleServiceFactory.js +8 -0
  3. package/dist/factory/UserServiceFactory.js +8 -0
  4. package/dist/graphql/index.js +7 -0
  5. package/dist/graphql/resolvers/auth.resolvers.js +15 -0
  6. package/dist/graphql/resolvers/role.resolvers.js +23 -0
  7. package/dist/graphql/resolvers/user.resolvers.js +26 -0
  8. package/dist/graphql/types/auth.graphql +8 -0
  9. package/dist/graphql/types/role.graphql +32 -0
  10. package/dist/graphql/types/user.graphql +34 -0
  11. package/dist/index.js +12 -0
  12. package/dist/interfaces/IRole.js +1 -0
  13. package/dist/interfaces/IRoleRepository.js +1 -0
  14. package/dist/interfaces/IUser.js +1 -0
  15. package/dist/interfaces/IUserGroup.js +1 -0
  16. package/dist/interfaces/IUserRepository.js +1 -0
  17. package/dist/models/RoleModel.js +33 -0
  18. package/dist/models/UserGroupModel.js +33 -0
  19. package/dist/models/UserModel.js +79 -0
  20. package/dist/repository/RoleRepository.js +29 -0
  21. package/dist/repository/UserRepository.js +33 -0
  22. package/dist/services/AuthService.js +21 -0
  23. package/dist/services/RoleService.js +31 -0
  24. package/dist/services/UserService.js +43 -0
  25. package/dist/utils/AuthUtils.js +36 -0
  26. package/package.json +53 -0
  27. package/src/factory/AuthServiceFactory.ts +10 -0
  28. package/src/factory/RoleServiceFactory.ts +10 -0
  29. package/src/factory/UserServiceFactory.ts +10 -0
  30. package/src/graphql/index.ts +8 -0
  31. package/src/graphql/resolvers/auth.resolvers.ts +19 -0
  32. package/src/graphql/resolvers/role.resolvers.ts +25 -0
  33. package/src/graphql/resolvers/user.resolvers.ts +27 -0
  34. package/src/graphql/types/auth.graphql +8 -0
  35. package/src/graphql/types/role.graphql +32 -0
  36. package/src/graphql/types/user.graphql +34 -0
  37. package/src/index.ts +24 -0
  38. package/src/interfaces/IRole.ts +11 -0
  39. package/src/interfaces/IRoleRepository.ts +11 -0
  40. package/src/interfaces/IUser.ts +21 -0
  41. package/src/interfaces/IUserGroup.ts +10 -0
  42. package/src/interfaces/IUserRepository.ts +11 -0
  43. package/src/models/RoleModel.ts +48 -0
  44. package/src/models/UserGroupModel.ts +48 -0
  45. package/src/models/UserModel.ts +94 -0
  46. package/src/repository/RoleRepository.ts +42 -0
  47. package/src/repository/UserRepository.ts +47 -0
  48. package/src/services/AuthService.ts +29 -0
  49. package/src/services/RoleService.ts +51 -0
  50. package/src/services/UserService.ts +67 -0
  51. package/src/utils/AuthUtils.ts +51 -0
  52. package/test/data-json/roles/admin-role.json +5 -0
  53. package/test/data-json/users/root-user.json +7 -0
  54. package/test/data-obj/roles/admin-role.ts +12 -0
  55. package/test/data-obj/users/root-user.ts +15 -0
  56. package/test/initializers/MongoInMemory.mjs +34 -0
  57. package/test/initializers/MongoInMemory.ts +42 -0
  58. package/test/initializers/RoleInitializer.mjs +11 -0
  59. package/test/initializers/RoleInitializer.ts +15 -0
  60. package/test/repository/role-repository.test.ts +75 -0
  61. package/test/repository/user-repository.test.ts +54 -0
  62. package/test/service/mock-service.test.ts +25 -0
  63. package/test/service/role-service.test.ts +30 -0
  64. package/test/service/user-service.test.ts +44 -0
  65. package/tsconfig.json +13 -0
  66. package/tsconfig.tsbuildinfo +1 -0
  67. package/types/factory/AuthServiceFactory.d.ts +4 -0
  68. package/types/factory/AuthServiceFactory.d.ts.map +1 -0
  69. package/types/factory/RoleServiceFactory.d.ts +4 -0
  70. package/types/factory/RoleServiceFactory.d.ts.map +1 -0
  71. package/types/factory/UserServiceFactory.d.ts +4 -0
  72. package/types/factory/UserServiceFactory.d.ts.map +1 -0
  73. package/types/graphql/index.d.ts +6 -0
  74. package/types/graphql/index.d.ts.map +1 -0
  75. package/types/graphql/resolvers/auth.resolvers.d.ts +10 -0
  76. package/types/graphql/resolvers/auth.resolvers.d.ts.map +1 -0
  77. package/types/graphql/resolvers/role.resolvers.d.ts +25 -0
  78. package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -0
  79. package/types/graphql/resolvers/user.resolvers.d.ts +25 -0
  80. package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -0
  81. package/types/index.d.ts +7 -0
  82. package/types/index.d.ts.map +1 -0
  83. package/types/interfaces/IRole.d.ts +11 -0
  84. package/types/interfaces/IRole.d.ts.map +1 -0
  85. package/types/interfaces/IRoleRepository.d.ts +10 -0
  86. package/types/interfaces/IRoleRepository.d.ts.map +1 -0
  87. package/types/interfaces/IUser.d.ts +20 -0
  88. package/types/interfaces/IUser.d.ts.map +1 -0
  89. package/types/interfaces/IUserGroup.d.ts +10 -0
  90. package/types/interfaces/IUserGroup.d.ts.map +1 -0
  91. package/types/interfaces/IUserRepository.d.ts +11 -0
  92. package/types/interfaces/IUserRepository.d.ts.map +1 -0
  93. package/types/models/RoleModel.d.ts +16 -0
  94. package/types/models/RoleModel.d.ts.map +1 -0
  95. package/types/models/UserGroupModel.d.ts +16 -0
  96. package/types/models/UserGroupModel.d.ts.map +1 -0
  97. package/types/models/UserModel.d.ts +16 -0
  98. package/types/models/UserModel.d.ts.map +1 -0
  99. package/types/repository/RoleRepository.d.ts +41 -0
  100. package/types/repository/RoleRepository.d.ts.map +1 -0
  101. package/types/repository/UserRepository.d.ts +40 -0
  102. package/types/repository/UserRepository.d.ts.map +1 -0
  103. package/types/services/AuthService.d.ts +8 -0
  104. package/types/services/AuthService.d.ts.map +1 -0
  105. package/types/services/RoleService.d.ts +17 -0
  106. package/types/services/RoleService.d.ts.map +1 -0
  107. package/types/services/UserService.d.ts +18 -0
  108. package/types/services/UserService.d.ts.map +1 -0
  109. package/types/utils/AuthUtils.d.ts +12 -0
  110. package/types/utils/AuthUtils.d.ts.map +1 -0
@@ -0,0 +1,19 @@
1
+ import AuthServiceFactory from "../../factory/AuthServiceFactory.js";
2
+
3
+ const authService = AuthServiceFactory()
4
+ export default {
5
+ Query: {
6
+
7
+ },
8
+ Mutation: {
9
+ auth: async (_,{input}) => {
10
+ try{
11
+ return await authService.auth(input.username, input.password)
12
+ }catch (e) {
13
+ console.log(e)
14
+ }
15
+
16
+ },
17
+
18
+ }
19
+ }
@@ -0,0 +1,25 @@
1
+ import RoleServiceFactory from "../../factory/RoleServiceFactory.js";
2
+
3
+ const roleService = RoleServiceFactory()
4
+ export default {
5
+ Query: {
6
+ findRoleById: async (_,{id}) => {
7
+ return await roleService.findById(id)
8
+ },
9
+ paginateRole: async () => {
10
+ return await roleService.paginate()
11
+ }
12
+ },
13
+ Mutation: {
14
+ createRole: async (_,{input}) => {
15
+ return await roleService.create(input)
16
+
17
+ },
18
+ updateRole: async (_,{id, input}) => {
19
+ return await roleService.update(id, input)
20
+ },
21
+ deleteRole: async (_,{id}) => {
22
+ return await roleService.delete(id)
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,27 @@
1
+ import UserServiceFactory from "../../factory/UserServiceFactory.js";
2
+
3
+ const userService = UserServiceFactory()
4
+ export default {
5
+ Query: {
6
+ findUserById: async (_,{id}) => {
7
+ return await userService.findById(id)
8
+ },
9
+ paginateUser: async () => {
10
+ console.log("paginateUser")
11
+ return await userService.paginate()
12
+ }
13
+ },
14
+ Mutation: {
15
+ createUser: async (_,{input}) => {
16
+ console.log("createUser")
17
+ const user = await userService.create(input)
18
+ return user
19
+ },
20
+ updateUser: async (_,{id, input}) => {
21
+ return await userService.update(id, input)
22
+ },
23
+ deleteUser: async (_,{id}) => {
24
+ return await userService.delete(id)
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,8 @@
1
+ input AuthInput{
2
+ username: String!
3
+ password: String!
4
+ }
5
+
6
+ type Mutation{
7
+ auth(input: AuthInput): String
8
+ }
@@ -0,0 +1,32 @@
1
+ type Role {
2
+ _id: ID!
3
+ name: String
4
+ readonly: Boolean
5
+ childRoles: [Role]
6
+ permissions: [String]
7
+ }
8
+
9
+ type RolePaginated{
10
+ totalDocs: Int
11
+ page: Int
12
+ limit: Int
13
+ docs: [Role]
14
+ }
15
+
16
+ type Query{
17
+ paginateRole: RolePaginated
18
+ findRoleById(id: ID): Role
19
+ }
20
+
21
+ input RoleInput{
22
+ name: String
23
+ permissions: [String]
24
+ readonly: Boolean
25
+ childRoles: [ID]
26
+ }
27
+
28
+ type Mutation{
29
+ createRole(input: RoleInput): Role
30
+ updateRole(id: ID!, input: RoleInput): Role
31
+ deleteRole(id: ID!): Boolean
32
+ }
@@ -0,0 +1,34 @@
1
+ type User {
2
+ _id: ID!
3
+ username: String!
4
+ email: String
5
+ role: Role
6
+ phone: String
7
+
8
+ }
9
+
10
+ type UserPaginated{
11
+ totalDocs: Int
12
+ page: Int
13
+ limit: Int
14
+ docs: [User]
15
+ }
16
+
17
+ type Query{
18
+ findUserByUsername(username: String!): User
19
+ findUserById(id: ID!): User
20
+ paginateUser: UserPaginated
21
+ }
22
+
23
+ input UserInput{
24
+ username: String!
25
+ email: String!
26
+ password: String!
27
+ role: ID
28
+ }
29
+
30
+ type Mutation{
31
+ createUser(input: UserInput): User
32
+ updateUser(id: ID!, input: UserInput): User
33
+ deleteUser(id: ID!): Boolean
34
+ }
package/src/index.ts ADDED
@@ -0,0 +1,24 @@
1
+ import GraphqlMerge from "./graphql/index.js"
2
+ import UserServiceFactory from "./factory/UserServiceFactory.js";
3
+ import RoleServiceFactory from "./factory/RoleServiceFactory.js";
4
+ import AuthServiceFactory from "./factory/AuthServiceFactory.js";
5
+
6
+ const graphqlMergeResult = await GraphqlMerge()
7
+ const identityTypeDefs = await graphqlMergeResult.typeDefs;
8
+ const identityResolvers = await graphqlMergeResult.resolvers;
9
+
10
+ const userService = UserServiceFactory()
11
+ const roleService = RoleServiceFactory()
12
+
13
+ const authService = AuthServiceFactory()
14
+
15
+ export {
16
+ identityTypeDefs,
17
+ identityResolvers,
18
+ userService,
19
+ roleService,
20
+ authService
21
+ }
22
+
23
+
24
+ /// <reference types="index.d.ts" />
@@ -0,0 +1,11 @@
1
+ import {mongoose} from "@drax/common-back";
2
+
3
+ interface IRole{
4
+ _id?: mongoose.Types.ObjectId
5
+ name: string
6
+ permissions: string[]
7
+ childRoles?: mongoose.Types.ObjectId[]
8
+ readonly: boolean
9
+ }
10
+
11
+ export {IRole}
@@ -0,0 +1,11 @@
1
+ import {IRole} from './IRole'
2
+ interface IRoleRepository{
3
+ create(role: IRole): Promise<IRole>;
4
+ update(_id: any, updatedRole: IRole): Promise<IRole | null>;
5
+ delete(_id: any): Promise<boolean>;
6
+ findById(_id: any): Promise<IRole | null>;
7
+
8
+ paginate(query: any, options: any): any;
9
+ }
10
+
11
+ export {IRoleRepository}
@@ -0,0 +1,21 @@
1
+ import {mongoose} from "@drax/common-back";
2
+ import {IRole} from "./IRole";
3
+ import {IUserGroup} from "./IUserGroup";
4
+
5
+ interface IUser {
6
+ _id?: mongoose.Types.ObjectId
7
+ username: string
8
+ email: string
9
+ password: string
10
+ active: boolean
11
+ name?: string
12
+ phone?: string
13
+ avatar?: string
14
+ avatarurl?: string
15
+ code?: string
16
+ role: mongoose.Types.ObjectId | IRole
17
+ groups: mongoose.Types.ObjectId[] | IUserGroup[]
18
+
19
+ }
20
+
21
+ export {IUser}
@@ -0,0 +1,10 @@
1
+ import {mongoose} from "@drax/common-back";
2
+ import {IUser} from "./IUser";
3
+
4
+ interface IUserGroup{
5
+ _id?: mongoose.Types.ObjectId
6
+ name: string
7
+ users: mongoose.Types.ObjectId[] | IUser[]
8
+ }
9
+
10
+ export {IUserGroup}
@@ -0,0 +1,11 @@
1
+ import {IUser} from './IUser'
2
+ interface IUserRepository{
3
+ create(role: IUser): Promise<IUser>;
4
+ update(_id: any, updatedRole: IUser): Promise<IUser | null>;
5
+ delete(_id: any): Promise<boolean>;
6
+ findById(_id: any): Promise<IUser | null>;
7
+ findByUsername(username: string): Promise<IUser | null>;
8
+ paginate(query: any, options: any): any;
9
+ }
10
+
11
+ export {IUserRepository}
@@ -0,0 +1,48 @@
1
+ import {mongoose, MongooseSoftDelete} from '@drax/common-back';
2
+ import uniqueValidator from 'mongoose-unique-validator';
3
+ import mongoosePaginate from 'mongoose-paginate-v2'
4
+ import {IRole} from '../interfaces/IRole'
5
+ const Schema = mongoose.Schema
6
+ import {PaginateModel} from "mongoose";
7
+
8
+
9
+ const RoleSchema = new Schema<IRole>({
10
+ name: {
11
+ type: String, unique: true, required: true, index: true,
12
+ validate: [
13
+ {
14
+ validator: function(v) {
15
+ return !/(\s){2}/.test(v);
16
+ },
17
+ message: props => `Role name cant contain two spaces`
18
+ },
19
+
20
+ ],
21
+ },
22
+ permissions: [{type: String, required: true}],
23
+ childRoles: [{
24
+ type: mongoose.Schema.Types.ObjectId,
25
+ ref: 'Role',
26
+ required: false,
27
+ }],
28
+ readonly: {type: Boolean, required: false, default: false},
29
+ });
30
+
31
+ RoleSchema.plugin(uniqueValidator, {message: 'validation.unique'});
32
+ RoleSchema.plugin(MongooseSoftDelete);
33
+ RoleSchema.plugin(mongoosePaginate);
34
+
35
+
36
+ RoleSchema.set('toJSON', {getters: true});
37
+
38
+ const ROLE_MODEL_NAME = 'Role';
39
+ const ROLE_COLLECTION_NAME = 'roles';
40
+ const RoleModel = mongoose.model<IRole, PaginateModel<IRole>>(ROLE_MODEL_NAME, RoleSchema,ROLE_COLLECTION_NAME);
41
+
42
+ export {
43
+ RoleSchema,
44
+ RoleModel
45
+ }
46
+
47
+ export default RoleModel
48
+
@@ -0,0 +1,48 @@
1
+ import {mongoose, MongooseSoftDelete} from '@drax/common-back';
2
+ import {IUserGroup} from "../interfaces/IUserGroup";
3
+ import uniqueValidator from 'mongoose-unique-validator';
4
+ import mongoosePaginate from 'mongoose-paginate-v2'
5
+ import {PaginateModel} from "mongoose";
6
+
7
+
8
+ // Defining user Mongoose Schema
9
+ const UserGroupSchema = new mongoose.Schema<IUserGroup>({
10
+ name: {
11
+ type: String,
12
+ unique: true,
13
+ required: true,
14
+ index: true,
15
+ validate: {
16
+ validator: function (value: string) {
17
+ let r = /^[a-zA-Z0-9]+(?:\s[a-zA-Z0-9]+)*$/;
18
+ return r.test(value);
19
+ },
20
+ message: "Invalid name format"
21
+ }
22
+ },
23
+ users: [{
24
+ type: mongoose.Schema.Types.ObjectId,
25
+ ref: 'User',
26
+ required: false,
27
+ }],
28
+ }, {timestamps: true});
29
+
30
+ UserGroupSchema.set('toJSON', {getters: true});
31
+
32
+ UserGroupSchema.plugin(uniqueValidator, {message: 'validation.unique'});
33
+
34
+ UserGroupSchema.plugin(MongooseSoftDelete);
35
+ UserGroupSchema.plugin(mongoosePaginate);
36
+
37
+ const USERGROUP_MODEL_NAME = 'UserGroup';
38
+ const USERGROUP_COLLECTION_NAME = 'userGroups';
39
+
40
+ const UserGroupModel = mongoose.model<IUserGroup,PaginateModel<IUserGroup>>(USERGROUP_MODEL_NAME, UserGroupSchema,USERGROUP_COLLECTION_NAME);
41
+
42
+ export {
43
+ UserGroupSchema,
44
+ UserGroupModel
45
+ }
46
+
47
+ export default UserGroupModel
48
+
@@ -0,0 +1,94 @@
1
+ import {mongoose, MongooseSoftDelete} from '@drax/common-back';
2
+ import {IUser} from "../interfaces/IUser";
3
+ import uniqueValidator from 'mongoose-unique-validator';
4
+ import mongoosePaginate from 'mongoose-paginate-v2'
5
+ import {PaginateModel} from "mongoose";
6
+
7
+
8
+ // Defining user Mongoose Schema
9
+ const UserSchema = new mongoose.Schema<IUser>({
10
+ username: {
11
+ type: String,
12
+ unique: true,
13
+ required: true,
14
+ index: true,
15
+ validate: {
16
+ validator: function (value: string) {
17
+ let r = /^[a-zA-Z0-9]+$/;
18
+ return r.test(value);
19
+ },
20
+ message: "Invalid username format"
21
+ }
22
+ },
23
+ email: {
24
+ type: String,
25
+ unique: true,
26
+ required: true,
27
+ index: true,
28
+ validate: {
29
+ validator: function (value: string) {
30
+ let r = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
31
+ return r.test(value);
32
+ },
33
+ message: "Invalid email format"
34
+ }
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},
40
+ phone: {
41
+ type: String,
42
+ required: false,
43
+ validate: {
44
+ validator: function (value: string) {
45
+ let r = /[0-9]+/;
46
+ return value ? r.test(value) : true;
47
+ },
48
+ message: "Invalid Phone format"
49
+ }
50
+ },
51
+ avatar: {type: String, required: false},
52
+ avatarurl: {type: String, required: false},
53
+ role: {
54
+ type: mongoose.Schema.Types.ObjectId,
55
+ ref: 'Role',
56
+ required: true,
57
+ },
58
+ groups: [{
59
+ type: mongoose.Schema.Types.ObjectId,
60
+ ref: 'Group',
61
+ required: false,
62
+ }],
63
+ /* refreshToken: {
64
+ type: [
65
+ {
66
+ id: {type: String},
67
+ expiryDate: {type: Date},
68
+ sessionId: {type: String},
69
+ }
70
+ ],
71
+ default: [],
72
+ _id: false
73
+ }*/
74
+ }, {timestamps: true});
75
+
76
+ UserSchema.set('toJSON', {getters: true});
77
+
78
+ UserSchema.plugin(uniqueValidator, {message: 'validation.unique'});
79
+
80
+ UserSchema.plugin(MongooseSoftDelete);
81
+ UserSchema.plugin(mongoosePaginate);
82
+
83
+ const USER_MODEL_NAME = 'User';
84
+ const USER_COLLECTION_NAME = 'users';
85
+
86
+ const UserModel = mongoose.model<IUser,PaginateModel<IUser>>(USER_MODEL_NAME, UserSchema,USER_COLLECTION_NAME);
87
+
88
+ export {
89
+ UserSchema,
90
+ UserModel
91
+ }
92
+
93
+ export default UserModel
94
+
@@ -0,0 +1,42 @@
1
+ import {RoleModel} from "../models/RoleModel.js";
2
+ import {IRole} from '../interfaces/IRole'
3
+ import {IRoleRepository} from '../interfaces/IRoleRepository'
4
+ import {mongoose} from "@drax/common-back";
5
+ import {FilterQuery, PaginateOptions, PaginateResult} from "mongoose";
6
+ import {DeleteResult} from "mongodb";
7
+
8
+ class RoleRepository implements IRoleRepository{
9
+
10
+ async create(roleData: IRole): Promise<IRole> {
11
+ const role : mongoose.HydratedDocument<IRole> = new RoleModel(roleData)
12
+ await role.save()
13
+ return role
14
+ }
15
+
16
+ async update(_id: mongoose.Types.ObjectId, roleData: IRole): Promise<IRole> {
17
+ const role : mongoose.HydratedDocument<IRole> = await RoleModel.findOneAndUpdate(_id, roleData, {new: true}).exec()
18
+ return role
19
+ }
20
+
21
+ async delete(_id: mongoose.Types.ObjectId): Promise<boolean> {
22
+ const result : DeleteResult = await RoleModel.deleteOne(_id).exec()
23
+ return result.deletedCount == 1
24
+ }
25
+
26
+ async findById(_id: mongoose.Types.ObjectId): Promise<IRole | null>{
27
+ const role: mongoose.HydratedDocument<IRole> | null = await RoleModel.findById(_id).exec()
28
+ return role
29
+ }
30
+
31
+ async fetch(): Promise<IRole[]>{
32
+ const roles: mongoose.HydratedDocument<IRole>[] = await RoleModel.find().exec()
33
+ return roles
34
+ }
35
+
36
+ async paginate(query ?: FilterQuery<IRole>, options ?: PaginateOptions): Promise<PaginateResult<IRole>>{
37
+ const roles: PaginateResult<IRole> = await RoleModel.paginate(query, options)
38
+ return roles
39
+ }
40
+ }
41
+
42
+ export default RoleRepository
@@ -0,0 +1,47 @@
1
+ import {UserModel} from "../models/UserModel.js";
2
+ import {mongoose} from "@drax/common-back"
3
+ import {FilterQuery, PaginateOptions, PaginateResult} from "mongoose";
4
+ import {IUser} from "../interfaces/IUser";
5
+ import {DeleteResult} from "mongodb";
6
+
7
+ class UserRepository {
8
+
9
+ async create(userData: IUser): Promise<IUser> {
10
+ const user: mongoose.HydratedDocument<IUser> = new UserModel(userData)
11
+ await user.save()
12
+ await user.populate('role')
13
+ return user
14
+ }
15
+
16
+ async update(_id: mongoose.Types.ObjectId, userData: IUser): Promise<IUser> {
17
+ const user: mongoose.HydratedDocument<IUser> = await UserModel.findOneAndUpdate(_id, userData).populate('role').exec()
18
+ return user
19
+ }
20
+
21
+ async delete(_id: mongoose.Types.ObjectId): Promise<boolean> {
22
+ const result: DeleteResult = await UserModel.deleteOne(_id).exec()
23
+ return result.deletedCount == 1
24
+ }
25
+
26
+ async findById(_id: mongoose.Types.ObjectId): Promise<IUser> {
27
+ console.log("_id",_id)
28
+ const user: mongoose.HydratedDocument<IUser> = await UserModel.findById(_id).populate('role').exec()
29
+ console.log("user",user)
30
+ return user
31
+ }
32
+
33
+ async findByUsername(username: string): Promise<IUser> {
34
+ const user: mongoose.HydratedDocument<IUser> = await UserModel.findOne({username: username}).populate('role').exec()
35
+ return user
36
+ }
37
+
38
+ async paginate(query ?: FilterQuery<IUser>, options ?: PaginateOptions): Promise<PaginateResult<IUser>> {
39
+
40
+ options.populate = ['role']
41
+
42
+ const userPaginated: PaginateResult<IUser> = await UserModel.paginate(query, options)
43
+ return userPaginated
44
+ }
45
+ }
46
+
47
+ export default UserRepository
@@ -0,0 +1,29 @@
1
+ import UserService from "./UserService.js";
2
+ import AuthUtils from "../utils/AuthUtils.js";
3
+ class AuthService {
4
+
5
+ private _userService: UserService;
6
+
7
+ constructor(userService : UserService) {
8
+ this._userService = userService
9
+ }
10
+
11
+
12
+ async auth(username : string, password : string){
13
+ let user = null
14
+
15
+ user = await this._userService.findByUsername(username)
16
+
17
+ //Si obtuve usuario chequeo la password
18
+ if (user && AuthUtils.checkPassword(password, user.password)) {
19
+ //TODO: Generar Sesion
20
+ const session = '123'
21
+ const token = AuthUtils.generateToken(user._id.toString(), user.username, session)
22
+ return token
23
+ }else{
24
+ throw Error('BadCredentials')
25
+ }
26
+ }
27
+ }
28
+
29
+ export default AuthService
@@ -0,0 +1,51 @@
1
+ import {IRole} from "../interfaces/IRole";
2
+ import {IRoleRepository} from "../interfaces/IRoleRepository";
3
+ import { IPaginateFilter} from "@drax/common-back"
4
+
5
+ class RoleService {
6
+
7
+ _repository: IRoleRepository
8
+
9
+ constructor(roleRepostitory: IRoleRepository) {
10
+ this._repository = roleRepostitory
11
+ }
12
+
13
+ async create(roleData: IRole): Promise<IRole> {
14
+ const role = await this._repository.create(roleData)
15
+ return role
16
+ }
17
+
18
+ async update(_id: any, roleData: IRole) {
19
+ const role = await this._repository.update(_id, roleData)
20
+ return role
21
+ }
22
+
23
+ async delete(_id: any): Promise<boolean> {
24
+ const deletedRole = await this._repository.delete(_id);
25
+ return deletedRole;
26
+ }
27
+
28
+ async findById(_id: any): Promise<IRole | null> {
29
+ const role : IRole = await this._repository.findById(_id);
30
+ return role
31
+ }
32
+
33
+ async paginate(filters ?: IPaginateFilter, page: number = 1, limit: number = 10): Promise<{ roles: IRole[], totalCount: number }> {
34
+
35
+ const query = {
36
+
37
+ }
38
+
39
+ const options = {
40
+ page: page,
41
+ limit: limit
42
+ }
43
+
44
+ const pagination = await this._repository.paginate(query, options);
45
+ return pagination;
46
+ }
47
+
48
+
49
+ }
50
+
51
+ export default RoleService
@@ -0,0 +1,67 @@
1
+ import {IPaginateFilter} from "@drax/common-back"
2
+ import {IUser} from "../interfaces/IUser";
3
+ import {IUserRepository} from "../interfaces/IUserRepository";
4
+ import AuthUtils from "../utils/AuthUtils.js";
5
+
6
+ class UserService {
7
+
8
+ _repository: IUserRepository
9
+
10
+ constructor(userRepository: IUserRepository) {
11
+ this._repository = userRepository;
12
+ }
13
+
14
+ async create(userData: IUser): Promise<IUser> {
15
+
16
+ userData.name = userData?.name?.trim()
17
+ userData.username = userData.username.trim()
18
+ userData.password = AuthUtils.hashPassword(userData.password.trim())
19
+
20
+ const user: IUser = await this._repository.create(userData)
21
+ return user
22
+ }
23
+
24
+ async update(_id: any, userData: IUser) {
25
+
26
+ userData.name = userData.name.trim()
27
+ userData.username = userData.username.trim()
28
+ delete userData.password
29
+
30
+ const user: IUser = await this._repository.update(_id, userData)
31
+ return user
32
+ }
33
+
34
+ async delete(_id: any): Promise<boolean> {
35
+ const deletedRole: boolean = await this._repository.delete(_id);
36
+ return deletedRole;
37
+ }
38
+
39
+ async findById(_id: any): Promise<IUser | null> {
40
+ const user: IUser = await this._repository.findById(_id);
41
+ return user
42
+ }
43
+
44
+ async findByUsername(username: string): Promise<IUser | null> {
45
+ const user: IUser = await this._repository.findByUsername(username);
46
+ return user
47
+ }
48
+
49
+ async paginate(filters ?: IPaginateFilter, page : number = 1, limit : number = 10): Promise<{
50
+ roles: IUser[],
51
+ totalCount: number
52
+ }> {
53
+
54
+ const query = {}
55
+
56
+ const options = {
57
+ page: page,
58
+ limit: limit
59
+ }
60
+
61
+ const pagination = await this._repository.paginate(query, options);
62
+ console.log("pagination",pagination)
63
+ return pagination;
64
+ }
65
+ }
66
+
67
+ export default UserService