@things-factory/personalization 7.0.1-beta.8 → 7.0.1-beta.9

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 (30) hide show
  1. package/dist-server/service/index.js +6 -1
  2. package/dist-server/service/index.js.map +1 -1
  3. package/dist-server/service/preference/index.js +10 -0
  4. package/dist-server/service/preference/index.js.map +1 -0
  5. package/dist-server/service/preference/preference-mutation.js +120 -0
  6. package/dist-server/service/preference/preference-mutation.js.map +1 -0
  7. package/dist-server/service/preference/preference-query.js +94 -0
  8. package/dist-server/service/preference/preference-query.js.map +1 -0
  9. package/dist-server/service/preference/preference-type.js +66 -0
  10. package/dist-server/service/preference/preference-type.js.map +1 -0
  11. package/dist-server/service/preference/preference.js +86 -0
  12. package/dist-server/service/preference/preference.js.map +1 -0
  13. package/dist-server/service/user-preference/index.js +10 -0
  14. package/dist-server/service/user-preference/index.js.map +1 -0
  15. package/dist-server/service/user-preference/user-preference-mutation.js +120 -0
  16. package/dist-server/service/user-preference/user-preference-mutation.js.map +1 -0
  17. package/dist-server/service/user-preference/user-preference-query.js +94 -0
  18. package/dist-server/service/user-preference/user-preference-query.js.map +1 -0
  19. package/dist-server/service/user-preference/user-preference-type.js +66 -0
  20. package/dist-server/service/user-preference/user-preference-type.js.map +1 -0
  21. package/dist-server/service/user-preference/user-preference.js +86 -0
  22. package/dist-server/service/user-preference/user-preference.js.map +1 -0
  23. package/dist-server/tsconfig.tsbuildinfo +1 -1
  24. package/package.json +3 -3
  25. package/server/service/index.ts +9 -0
  26. package/server/service/user-preference/index.ts +7 -0
  27. package/server/service/user-preference/user-preference-mutation.ts +119 -0
  28. package/server/service/user-preference/user-preference-query.ts +61 -0
  29. package/server/service/user-preference/user-preference-type.ts +43 -0
  30. package/server/service/user-preference/user-preference.ts +75 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/personalization",
3
- "version": "7.0.1-beta.8",
3
+ "version": "7.0.1-beta.9",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -32,8 +32,8 @@
32
32
  "@operato/i18n": "^2.0.0-beta.0",
33
33
  "@operato/shell": "^2.0.0-beta.0",
34
34
  "@operato/styles": "^2.0.0-beta.0",
35
- "@things-factory/auth-base": "^7.0.1-beta.8",
35
+ "@things-factory/auth-base": "^7.0.1-beta.9",
36
36
  "@things-factory/shell": "^7.0.1-beta.8"
37
37
  },
38
- "gitHead": "d2ca60f7fca6feb2b7cb86b4f825378573fcc335"
38
+ "gitHead": "b2fb4923e2763b4d831f934905dd6ae0019446a4"
39
39
  }
@@ -1,21 +1,30 @@
1
1
  /* EXPORT ENTITY TYPES */
2
+ export * from './user-preference/user-preference'
2
3
  export * from './page-preference/page-preference'
3
4
 
4
5
  /* IMPORT ENTITIES AND RESOLVERS */
6
+ import {
7
+ entities as UserPreferenceEntities,
8
+ resolvers as UserPreferenceResolvers,
9
+ subscribers as UserPreferenceSubscribers
10
+ } from './user-preference'
5
11
  import { entities as PagePreferenceEntities, resolvers as PagePreferenceResolvers } from './page-preference'
6
12
 
7
13
  export const entities = [
8
14
  /* ENTITIES */
15
+ ...UserPreferenceEntities,
9
16
  ...PagePreferenceEntities
10
17
  ]
11
18
 
12
19
  export const subscribers = [
13
20
  /* SUBSCRIBERS */
21
+ ...UserPreferenceSubscribers
14
22
  ]
15
23
 
16
24
  export const schema = {
17
25
  resolverClasses: [
18
26
  /* RESOLVER CLASSES */
27
+ ...UserPreferenceResolvers,
19
28
  ...PagePreferenceResolvers
20
29
  ]
21
30
  }
@@ -0,0 +1,7 @@
1
+ import { UserPreference } from './user-preference'
2
+ import { UserPreferenceQuery } from './user-preference-query'
3
+ import { UserPreferenceMutation } from './user-preference-mutation'
4
+
5
+ export const entities = [UserPreference]
6
+ export const resolvers = [UserPreferenceQuery, UserPreferenceMutation]
7
+ export const subscribers = []
@@ -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,61 @@
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(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<UserPreferenceList> {
33
+ const { domain, user } = context.state
34
+
35
+ const queryBuilder = getQueryBuilderFromListParams({
36
+ domain,
37
+ params,
38
+ repository: await getRepository(UserPreference),
39
+ searchables: ['key']
40
+ }).andWhere('user.id = :userId', { userId: user.id })
41
+
42
+ const [items, total] = await queryBuilder.getManyAndCount()
43
+
44
+ return { items, total }
45
+ }
46
+
47
+ @FieldResolver(type => Domain)
48
+ async domain(@Root() preference: UserPreference): Promise<Domain> {
49
+ return preference.domainId && (await getRepository(Domain).findOneBy({ id: preference.domainId }))
50
+ }
51
+
52
+ @FieldResolver(type => User)
53
+ async updater(@Root() preference: UserPreference): Promise<User> {
54
+ return preference.updaterId && (await getRepository(User).findOneBy({ id: preference.updaterId }))
55
+ }
56
+
57
+ @FieldResolver(type => User)
58
+ async creator(@Root() preference: UserPreference): Promise<User> {
59
+ return preference.creatorId && (await getRepository(User).findOneBy({ id: preference.creatorId }))
60
+ }
61
+ }
@@ -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,75 @@
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
+ where: '"deleted_at" IS NULL'
21
+ })
22
+ @ObjectType({ description: 'Entity for UserPreference' })
23
+ export class UserPreference {
24
+ @PrimaryGeneratedColumn('uuid')
25
+ @Field(type => ID)
26
+ readonly id: string
27
+
28
+ @ManyToOne(type => Domain)
29
+ @Field({ nullable: true })
30
+ domain?: Domain
31
+
32
+ @RelationId((preference: UserPreference) => preference.domain)
33
+ domainId?: string
34
+
35
+ @ManyToOne(type => User)
36
+ @Field({ nullable: false })
37
+ user: User
38
+
39
+ @RelationId((preference: UserPreference) => preference.user)
40
+ userId: string
41
+
42
+ @Column()
43
+ @Field({ nullable: true })
44
+ key?: string
45
+
46
+ @Column('simple-json', { nullable: true })
47
+ @Field(type => ScalarObject, { nullable: true })
48
+ preference?: { [key: string]: any }
49
+
50
+ @CreateDateColumn()
51
+ @Field({ nullable: true })
52
+ createdAt?: Date
53
+
54
+ @UpdateDateColumn()
55
+ @Field({ nullable: true })
56
+ updatedAt?: Date
57
+
58
+ @DeleteDateColumn()
59
+ @Field({ nullable: true })
60
+ deletedAt?: Date
61
+
62
+ @ManyToOne(type => User, { nullable: true })
63
+ @Field(type => User, { nullable: true })
64
+ creator?: User
65
+
66
+ @RelationId((preference: UserPreference) => preference.creator)
67
+ creatorId?: string
68
+
69
+ @ManyToOne(type => User, { nullable: true })
70
+ @Field(type => User, { nullable: true })
71
+ updater?: User
72
+
73
+ @RelationId((preference: UserPreference) => preference.updater)
74
+ updaterId?: string
75
+ }