@things-factory/personalization 7.0.0

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 (73) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/client/index.ts +0 -0
  3. package/client/tsconfig.json +11 -0
  4. package/client/types.ts +9 -0
  5. package/dist-client/index.d.ts +0 -0
  6. package/dist-client/index.js +2 -0
  7. package/dist-client/index.js.map +1 -0
  8. package/dist-client/tsconfig.tsbuildinfo +1 -0
  9. package/dist-client/types.d.ts +8 -0
  10. package/dist-client/types.js +2 -0
  11. package/dist-client/types.js.map +1 -0
  12. package/dist-server/index.d.ts +2 -0
  13. package/dist-server/index.js +6 -0
  14. package/dist-server/index.js.map +1 -0
  15. package/dist-server/routes.d.ts +1 -0
  16. package/dist-server/routes.js +25 -0
  17. package/dist-server/routes.js.map +1 -0
  18. package/dist-server/service/index.d.ts +7 -0
  19. package/dist-server/service/index.js +27 -0
  20. package/dist-server/service/index.js.map +1 -0
  21. package/dist-server/service/page-preference/index.d.ts +5 -0
  22. package/dist-server/service/page-preference/index.js +9 -0
  23. package/dist-server/service/page-preference/index.js.map +1 -0
  24. package/dist-server/service/page-preference/page-preference-mutation.d.ts +11 -0
  25. package/dist-server/service/page-preference/page-preference-mutation.js +105 -0
  26. package/dist-server/service/page-preference/page-preference-mutation.js.map +1 -0
  27. package/dist-server/service/page-preference/page-preference-query.d.ts +13 -0
  28. package/dist-server/service/page-preference/page-preference-query.js +108 -0
  29. package/dist-server/service/page-preference/page-preference-query.js.map +1 -0
  30. package/dist-server/service/page-preference/page-preference-type.d.ts +24 -0
  31. package/dist-server/service/page-preference/page-preference-type.js +74 -0
  32. package/dist-server/service/page-preference/page-preference-type.js.map +1 -0
  33. package/dist-server/service/page-preference/page-preference.d.ts +20 -0
  34. package/dist-server/service/page-preference/page-preference.js +90 -0
  35. package/dist-server/service/page-preference/page-preference.js.map +1 -0
  36. package/dist-server/service/user-preference/index.d.ts +6 -0
  37. package/dist-server/service/user-preference/index.js +10 -0
  38. package/dist-server/service/user-preference/index.js.map +1 -0
  39. package/dist-server/service/user-preference/user-preference-mutation.d.ts +12 -0
  40. package/dist-server/service/user-preference/user-preference-mutation.js +120 -0
  41. package/dist-server/service/user-preference/user-preference-mutation.js.map +1 -0
  42. package/dist-server/service/user-preference/user-preference-query.d.ts +12 -0
  43. package/dist-server/service/user-preference/user-preference-query.js +94 -0
  44. package/dist-server/service/user-preference/user-preference-query.js.map +1 -0
  45. package/dist-server/service/user-preference/user-preference-type.d.ts +22 -0
  46. package/dist-server/service/user-preference/user-preference-type.js +66 -0
  47. package/dist-server/service/user-preference/user-preference-type.js.map +1 -0
  48. package/dist-server/service/user-preference/user-preference.d.ts +19 -0
  49. package/dist-server/service/user-preference/user-preference.js +80 -0
  50. package/dist-server/service/user-preference/user-preference.js.map +1 -0
  51. package/dist-server/tsconfig.tsbuildinfo +1 -0
  52. package/helps/personalization/screen-preference.md +160 -0
  53. package/package.json +39 -0
  54. package/server/index.ts +3 -0
  55. package/server/routes.ts +28 -0
  56. package/server/service/index.ts +30 -0
  57. package/server/service/page-preference/index.ts +6 -0
  58. package/server/service/page-preference/page-preference-mutation.ts +101 -0
  59. package/server/service/page-preference/page-preference-query.ts +73 -0
  60. package/server/service/page-preference/page-preference-type.ts +50 -0
  61. package/server/service/page-preference/page-preference.ts +82 -0
  62. package/server/service/user-preference/index.ts +7 -0
  63. package/server/service/user-preference/user-preference-mutation.ts +119 -0
  64. package/server/service/user-preference/user-preference-query.ts +64 -0
  65. package/server/service/user-preference/user-preference-type.ts +43 -0
  66. package/server/service/user-preference/user-preference.ts +70 -0
  67. package/server/tsconfig.json +10 -0
  68. package/things-factory.config.js +1 -0
  69. package/translations/en.json +1 -0
  70. package/translations/ja.json +1 -0
  71. package/translations/ko.json +1 -0
  72. package/translations/ms.json +1 -0
  73. package/translations/zh.json +1 -0
@@ -0,0 +1,119 @@
1
+ import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { In } from 'typeorm'
3
+
4
+ import { ScalarObject } from '@things-factory/shell'
5
+
6
+ import { UserPreference } from './user-preference'
7
+ import { NewUserPreference, UserPreferencePatch } from './user-preference-type'
8
+
9
+ @Resolver(UserPreference)
10
+ export class UserPreferenceMutation {
11
+ @Directive('@transaction')
12
+ @Mutation(returns => UserPreference, { description: 'To create new UserPreference' })
13
+ async createUserPreference(
14
+ @Arg('preference') preference: NewUserPreference,
15
+ @Ctx() context: ResolverContext
16
+ ): Promise<UserPreference> {
17
+ const { domain, user, tx } = context.state
18
+
19
+ return await tx.getRepository(UserPreference).save({
20
+ ...preference,
21
+ domain,
22
+ creator: user,
23
+ updater: user
24
+ })
25
+ }
26
+
27
+ @Directive('@transaction')
28
+ @Mutation(returns => UserPreference, { description: 'To modify UserPreference information' })
29
+ async updateUserPreference(
30
+ @Arg('id') id: string,
31
+ @Arg('patch') patch: UserPreferencePatch,
32
+ @Ctx() context: ResolverContext
33
+ ): Promise<UserPreference> {
34
+ const { domain, user, tx } = context.state
35
+
36
+ const repository = tx.getRepository(UserPreference)
37
+ const preference = await repository.findOne({
38
+ where: { domain: { id: domain.id }, id }
39
+ })
40
+
41
+ return await repository.save({
42
+ ...preference,
43
+ ...patch,
44
+ updater: user
45
+ })
46
+ }
47
+
48
+ @Directive('@transaction')
49
+ @Mutation(returns => UserPreference, { description: 'To create or update my preference' })
50
+ async updateMyUserPreference(
51
+ @Arg('key') key: string,
52
+ @Arg('preference', type => ScalarObject) preference: { [key: string]: any },
53
+ @Ctx() context: any
54
+ ): Promise<UserPreference> {
55
+ const { domain, user, tx } = context.state
56
+
57
+ if (!key) {
58
+ throw 'key is required.'
59
+ }
60
+
61
+ const myUserPreference = await tx.getRepository(UserPreference).findOne({
62
+ where: { domain: { id: domain.id }, user: { id: user.id }, key }
63
+ })
64
+
65
+ return await tx.getRepository(UserPreference).save({
66
+ ...myUserPreference,
67
+ domain,
68
+ user,
69
+ key,
70
+ preference,
71
+ creator: user,
72
+ updater: user
73
+ })
74
+ }
75
+
76
+ @Directive('@transaction')
77
+ @Mutation(returns => Boolean, { description: 'To delete my preference' })
78
+ async deleteMyUserPreference(
79
+ @Arg('key') key: string,
80
+ @Arg('element') element: string,
81
+ @Ctx() context: ResolverContext
82
+ ): Promise<boolean> {
83
+ const { domain, user, tx } = context.state
84
+
85
+ await tx.getRepository(UserPreference).delete({
86
+ domain: { id: domain.id },
87
+ user: { id: user.id },
88
+ key
89
+ })
90
+
91
+ return true
92
+ }
93
+
94
+ @Directive('@transaction')
95
+ @Mutation(returns => Boolean, { description: 'To delete UserPreference' })
96
+ async deleteUserPreference(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
97
+ const { domain, tx } = context.state
98
+
99
+ await tx.getRepository(UserPreference).delete({ domain: { id: domain.id }, id })
100
+
101
+ return true
102
+ }
103
+
104
+ @Directive('@transaction')
105
+ @Mutation(returns => Boolean, { description: 'To delete multiple UserPreferences' })
106
+ async deleteUserPreferences(
107
+ @Arg('ids', type => [String]) ids: string[],
108
+ @Ctx() context: ResolverContext
109
+ ): Promise<boolean> {
110
+ const { domain, tx } = context.state
111
+
112
+ await tx.getRepository(UserPreference).delete({
113
+ domain: { id: domain.id },
114
+ id: In(ids)
115
+ })
116
+
117
+ return true
118
+ }
119
+ }
@@ -0,0 +1,64 @@
1
+ import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx } from 'type-graphql'
2
+ import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
3
+ import { User } from '@things-factory/auth-base'
4
+ import { UserPreference } from './user-preference'
5
+ import { UserPreferenceList } from './user-preference-type'
6
+
7
+ @Resolver(UserPreference)
8
+ export class UserPreferenceQuery {
9
+ @Query(returns => UserPreference!, { nullable: true, description: 'To fetch a UserPreference' })
10
+ async preference(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<UserPreference> {
11
+ const { domain } = context.state
12
+
13
+ return await getRepository(UserPreference).findOne({
14
+ where: { domain: { id: domain.id }, id }
15
+ })
16
+ }
17
+
18
+ @Query(returns => UserPreference, { nullable: true, description: `To fetch a User's own UserPreference` })
19
+ async myUserPreference(
20
+ @Arg('key') key: string,
21
+ @Arg('element') element: string,
22
+ @Ctx() context: any
23
+ ): Promise<UserPreference> {
24
+ const { domain, user } = context.state
25
+
26
+ return await getRepository(UserPreference).findOne({
27
+ where: { domain: { id: domain.id }, user: { id: user.id }, key }
28
+ })
29
+ }
30
+
31
+ @Query(returns => UserPreferenceList, { description: 'To fetch multiple UserPreferences' })
32
+ async myUserPreferences(
33
+ @Args(type => ListParam) params: ListParam,
34
+ @Ctx() context: ResolverContext
35
+ ): Promise<UserPreferenceList> {
36
+ const { domain, user } = context.state
37
+
38
+ const queryBuilder = getQueryBuilderFromListParams({
39
+ domain,
40
+ params,
41
+ repository: await getRepository(UserPreference),
42
+ searchables: ['key']
43
+ }).andWhere({ user: { id: user.id } })
44
+
45
+ const [items, total] = await queryBuilder.getManyAndCount()
46
+
47
+ return { items, total }
48
+ }
49
+
50
+ @FieldResolver(type => Domain)
51
+ async domain(@Root() preference: UserPreference): Promise<Domain> {
52
+ return preference.domainId && (await getRepository(Domain).findOneBy({ id: preference.domainId }))
53
+ }
54
+
55
+ @FieldResolver(type => User)
56
+ async updater(@Root() preference: UserPreference): Promise<User> {
57
+ return preference.updaterId && (await getRepository(User).findOneBy({ id: preference.updaterId }))
58
+ }
59
+
60
+ @FieldResolver(type => User)
61
+ async creator(@Root() preference: UserPreference): Promise<User> {
62
+ return preference.creatorId && (await getRepository(User).findOneBy({ id: preference.creatorId }))
63
+ }
64
+ }
@@ -0,0 +1,43 @@
1
+ import { ObjectType, Field, InputType, Int, ID } from 'type-graphql'
2
+ import { ObjectRef, ScalarObject } from '@things-factory/shell'
3
+
4
+ import { UserPreference } from './user-preference'
5
+
6
+ @InputType()
7
+ export class NewUserPreference {
8
+ @Field(type => ObjectRef)
9
+ user: ObjectRef
10
+
11
+ @Field()
12
+ key: string
13
+
14
+ @Field(type => ScalarObject, { nullable: false })
15
+ preference: { [key: string]: any }
16
+ }
17
+
18
+ @InputType()
19
+ export class UserPreferencePatch {
20
+ @Field(type => ID, { nullable: true })
21
+ id?: string
22
+
23
+ @Field(type => ObjectRef)
24
+ user?: ObjectRef
25
+
26
+ @Field()
27
+ key?: string
28
+
29
+ @Field(type => ScalarObject, { nullable: false })
30
+ preference?: { [key: string]: any }
31
+
32
+ @Field({ nullable: true })
33
+ cuFlag?: string
34
+ }
35
+
36
+ @ObjectType()
37
+ export class UserPreferenceList {
38
+ @Field(type => [UserPreference])
39
+ items: UserPreference[]
40
+
41
+ @Field(type => Int)
42
+ total: number
43
+ }
@@ -0,0 +1,70 @@
1
+ import {
2
+ CreateDateColumn,
3
+ UpdateDateColumn,
4
+ DeleteDateColumn,
5
+ Entity,
6
+ Index,
7
+ Column,
8
+ RelationId,
9
+ ManyToOne,
10
+ PrimaryGeneratedColumn
11
+ } from 'typeorm'
12
+ import { ObjectType, Field, ID } from 'type-graphql'
13
+
14
+ import { Domain, ScalarObject } from '@things-factory/shell'
15
+ import { User } from '@things-factory/auth-base'
16
+
17
+ @Entity()
18
+ @Index('ix_preference_0', (preference: UserPreference) => [preference.domain, preference.user], {
19
+ unique: true
20
+ })
21
+ @ObjectType({ description: 'Entity for UserPreference' })
22
+ export class UserPreference {
23
+ @PrimaryGeneratedColumn('uuid')
24
+ @Field(type => ID)
25
+ readonly id: string
26
+
27
+ @ManyToOne(type => Domain)
28
+ @Field({ nullable: true })
29
+ domain?: Domain
30
+
31
+ @RelationId((preference: UserPreference) => preference.domain)
32
+ domainId?: string
33
+
34
+ @ManyToOne(type => User)
35
+ @Field({ nullable: false })
36
+ user: User
37
+
38
+ @RelationId((preference: UserPreference) => preference.user)
39
+ userId: string
40
+
41
+ @Column()
42
+ @Field({ nullable: true })
43
+ key?: string
44
+
45
+ @Column('simple-json', { nullable: true })
46
+ @Field(type => ScalarObject, { nullable: true })
47
+ preference?: { [key: string]: any }
48
+
49
+ @CreateDateColumn()
50
+ @Field({ nullable: true })
51
+ createdAt?: Date
52
+
53
+ @UpdateDateColumn()
54
+ @Field({ nullable: true })
55
+ updatedAt?: Date
56
+
57
+ @ManyToOne(type => User, { nullable: true })
58
+ @Field(type => User, { nullable: true })
59
+ creator?: User
60
+
61
+ @RelationId((preference: UserPreference) => preference.creator)
62
+ creatorId?: string
63
+
64
+ @ManyToOne(type => User, { nullable: true })
65
+ @Field(type => User, { nullable: true })
66
+ updater?: User
67
+
68
+ @RelationId((preference: UserPreference) => preference.updater)
69
+ updaterId?: string
70
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../../tsconfig-base.json",
3
+ "compilerOptions": {
4
+ "strict": false,
5
+ "module": "commonjs",
6
+ "outDir": "../dist-server",
7
+ "baseUrl": "./"
8
+ },
9
+ "include": ["./**/*"]
10
+ }
@@ -0,0 +1 @@
1
+ export default {}
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ {}