@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.
- package/dist-server/service/index.js +6 -1
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/preference/index.js +10 -0
- package/dist-server/service/preference/index.js.map +1 -0
- package/dist-server/service/preference/preference-mutation.js +120 -0
- package/dist-server/service/preference/preference-mutation.js.map +1 -0
- package/dist-server/service/preference/preference-query.js +94 -0
- package/dist-server/service/preference/preference-query.js.map +1 -0
- package/dist-server/service/preference/preference-type.js +66 -0
- package/dist-server/service/preference/preference-type.js.map +1 -0
- package/dist-server/service/preference/preference.js +86 -0
- package/dist-server/service/preference/preference.js.map +1 -0
- package/dist-server/service/user-preference/index.js +10 -0
- package/dist-server/service/user-preference/index.js.map +1 -0
- package/dist-server/service/user-preference/user-preference-mutation.js +120 -0
- package/dist-server/service/user-preference/user-preference-mutation.js.map +1 -0
- package/dist-server/service/user-preference/user-preference-query.js +94 -0
- package/dist-server/service/user-preference/user-preference-query.js.map +1 -0
- package/dist-server/service/user-preference/user-preference-type.js +66 -0
- package/dist-server/service/user-preference/user-preference-type.js.map +1 -0
- package/dist-server/service/user-preference/user-preference.js +86 -0
- package/dist-server/service/user-preference/user-preference.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/server/service/index.ts +9 -0
- package/server/service/user-preference/index.ts +7 -0
- package/server/service/user-preference/user-preference-mutation.ts +119 -0
- package/server/service/user-preference/user-preference-query.ts +61 -0
- package/server/service/user-preference/user-preference-type.ts +43 -0
- 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.
|
|
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.
|
|
35
|
+
"@things-factory/auth-base": "^7.0.1-beta.9",
|
|
36
36
|
"@things-factory/shell": "^7.0.1-beta.8"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "b2fb4923e2763b4d831f934905dd6ae0019446a4"
|
|
39
39
|
}
|
package/server/service/index.ts
CHANGED
|
@@ -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
|
+
}
|