@things-factory/notification 8.0.0 → 9.0.0-beta.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 (56) hide show
  1. package/dist-client/tsconfig.tsbuildinfo +1 -1
  2. package/dist-server/tsconfig.tsbuildinfo +1 -1
  3. package/package.json +9 -9
  4. package/client/actions/notification-fcm.ts +0 -148
  5. package/client/bootstrap.ts +0 -135
  6. package/client/index.ts +0 -6
  7. package/client/pages/notification/notification-list-page.ts +0 -258
  8. package/client/pages/notification-rule/notification-rule-importer.ts +0 -87
  9. package/client/pages/notification-rule/notification-rule-list-page.ts +0 -386
  10. package/client/reducers/notification.ts +0 -27
  11. package/client/route.ts +0 -10
  12. package/client/tsconfig.json +0 -13
  13. package/client/viewparts/notification-badge.ts +0 -54
  14. package/client/viewparts/notification-item.ts +0 -246
  15. package/client/viewparts/notification-list.ts +0 -160
  16. package/client/viewparts/notification-sender.ts +0 -142
  17. package/client/viewparts/notification-setting-let.ts +0 -222
  18. package/docs/images/config-app-1.png +0 -0
  19. package/docs/images/config-app-2.png +0 -0
  20. package/docs/images/config-server-key.png +0 -0
  21. package/docs/images/config-service-account.png +0 -0
  22. package/docs/images/config-vapidkey-1.png +0 -0
  23. package/docs/images/config-vapidkey-2-get-public-key.png +0 -0
  24. package/docs/images/config-vapidkey-3-get-private-key.png +0 -0
  25. package/docs/images/element-notification-badge.png +0 -0
  26. package/docs/images/element-notification-list.png +0 -0
  27. package/docs/images/element-notification-setting-let.png +0 -0
  28. package/docs/images/push-test-on-chrome-1.png +0 -0
  29. package/docs/images/push-test-on-chrome-2.png +0 -0
  30. package/docs/images/push-test-on-firebase-1.png +0 -0
  31. package/docs/images/push-test-on-firebase-2.png +0 -0
  32. package/docs/images/push-test-on-firebase-3.png +0 -0
  33. package/docs/images/push-test-on-firebase-4.png +0 -0
  34. package/server/controllers/fcm.ts +0 -214
  35. package/server/controllers/index.ts +0 -1
  36. package/server/index.ts +0 -5
  37. package/server/middlewares/index.ts +0 -5
  38. package/server/middlewares/notification-middleware.ts +0 -73
  39. package/server/routers/notification-router.ts +0 -67
  40. package/server/routes.ts +0 -11
  41. package/server/service/index.ts +0 -42
  42. package/server/service/notification/directive-notification.ts +0 -71
  43. package/server/service/notification/index.ts +0 -14
  44. package/server/service/notification/notification-mutation.ts +0 -119
  45. package/server/service/notification/notification-query.ts +0 -76
  46. package/server/service/notification/notification-subscription.ts +0 -44
  47. package/server/service/notification/notification-type.ts +0 -55
  48. package/server/service/notification/notification.ts +0 -105
  49. package/server/service/notification-rule/event-subscriber.ts +0 -20
  50. package/server/service/notification-rule/index.ts +0 -9
  51. package/server/service/notification-rule/notification-rule-history.ts +0 -136
  52. package/server/service/notification-rule/notification-rule-mutation.ts +0 -203
  53. package/server/service/notification-rule/notification-rule-query.ts +0 -65
  54. package/server/service/notification-rule/notification-rule-type.ts +0 -71
  55. package/server/service/notification-rule/notification-rule.ts +0 -125
  56. package/server/tsconfig.json +0 -9
@@ -1,71 +0,0 @@
1
- import { defaultFieldResolver, GraphQLSchema } from 'graphql'
2
- import gql from 'graphql-tag'
3
-
4
- import { getDirective, MapperKind, mapSchema } from '@graphql-tools/utils'
5
-
6
- const debug = require('debug')('things-factory:notification:directive-notification')
7
-
8
- const DIRECTIVE = 'notification'
9
-
10
- export const notificationDirectiveTypeDefs = gql`
11
- directive @notification(
12
- receivers: String
13
- topic: String
14
- subject: String # info
15
- title: String
16
- body: String
17
- image: String
18
- url: String
19
- # timestamp = String(Date.now())
20
- mode: String # background
21
- ) on FIELD_DEFINITION
22
- `
23
- export const directiveNotification = (schema: GraphQLSchema) =>
24
- mapSchema(schema, {
25
- [MapperKind.OBJECT_FIELD]: (fieldConfig, fieldName, typeName, schema) => {
26
- const notificationDirective = getDirective(schema, fieldConfig, DIRECTIVE)?.[0]
27
- if (notificationDirective) {
28
- const { resolve = defaultFieldResolver, args } = fieldConfig
29
-
30
- if (!args) {
31
- throw new Error(`Unexpected Error. args should be defined in @notification directive for field ${fieldName}.`)
32
- }
33
-
34
- const {
35
- receivers,
36
- topic,
37
- subject = 'info',
38
- title,
39
- body,
40
- image,
41
- url,
42
- mode = 'background'
43
- } = notificationDirective
44
- const timestamp = Date.now()
45
-
46
- fieldConfig.resolve = async function (source, args, context, info) {
47
- const result = await resolve.call(this, source, args, context, info)
48
-
49
- const { domain, user, notify } = context.state
50
-
51
- if (!notify) {
52
- debug('notify not set')
53
- } else {
54
- try {
55
- await notify({
56
- receivers: [user.id],
57
- notificationDirective,
58
- timestamp: new Date()
59
- })
60
- } catch (err) {
61
- debug(err)
62
- }
63
- }
64
-
65
- return result
66
- }
67
-
68
- return fieldConfig
69
- }
70
- }
71
- })
@@ -1,14 +0,0 @@
1
- import { Notification } from './notification'
2
- import { NotificationQuery } from './notification-query'
3
- import { NotificationMutation } from './notification-mutation'
4
- import { NotificationSubscription } from './notification-subscription'
5
- import { notificationDirectiveTypeDefs, directiveNotification } from './directive-notification'
6
-
7
- export const typeDefs = {
8
- notificationDirectiveTypeDefs
9
- }
10
- export const entities = [Notification]
11
- export const resolvers = [NotificationQuery, NotificationMutation, NotificationSubscription]
12
- export const directives = {
13
- notification: directiveNotification
14
- }
@@ -1,119 +0,0 @@
1
- import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
- import { In } from 'typeorm'
3
-
4
- import { Notification } from './notification'
5
- import { NewNotification, NotificationPatch } from './notification-type'
6
-
7
- @Resolver(Notification)
8
- export class NotificationMutation {
9
- @Directive('@transaction')
10
- @Mutation(returns => Notification, { description: 'To create new Notification' })
11
- async createNotification(
12
- @Arg('notification') notification: NewNotification,
13
- @Ctx() context: ResolverContext
14
- ): Promise<Notification> {
15
- const { domain, user, tx } = context.state
16
-
17
- return await tx.getRepository(Notification).save({
18
- ...notification,
19
- domain,
20
- creator: user,
21
- updater: user
22
- })
23
- }
24
-
25
- @Directive('@transaction')
26
- @Mutation(returns => Notification, { description: 'To modify Notification information' })
27
- async updateNotification(
28
- @Arg('id') id: string,
29
- @Arg('patch') patch: NotificationPatch,
30
- @Ctx() context: ResolverContext
31
- ): Promise<Notification> {
32
- const { domain, user, tx } = context.state
33
-
34
- const repository = tx.getRepository(Notification)
35
- const notification = await repository.findOne({
36
- where: { domain: { id: domain.id }, id }
37
- })
38
-
39
- const result = await repository.save({
40
- ...notification,
41
- ...patch,
42
- updater: user
43
- })
44
-
45
- return result
46
- }
47
-
48
- @Directive('@transaction')
49
- @Mutation(returns => [Notification], { description: "To modify multiple Notificationes' information" })
50
- async updateMultipleNotification(
51
- @Arg('patches', type => [NotificationPatch]) patches: NotificationPatch[],
52
- @Ctx() context: ResolverContext
53
- ): Promise<Notification[]> {
54
- const { domain, user, tx } = context.state
55
-
56
- let results = []
57
- const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
58
- const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
59
- const notificationRepo = tx.getRepository(Notification)
60
-
61
- if (_createRecords.length > 0) {
62
- for (let i = 0; i < _createRecords.length; i++) {
63
- const newRecord = _createRecords[i]
64
-
65
- const result = await notificationRepo.save({
66
- ...newRecord,
67
- domain,
68
- creator: user,
69
- updater: user
70
- })
71
-
72
- results.push({ ...result, cuFlag: '+' })
73
- }
74
- }
75
-
76
- if (_updateRecords.length > 0) {
77
- for (let i = 0; i < _updateRecords.length; i++) {
78
- const updateRecord = _updateRecords[i]
79
- const notification = await notificationRepo.findOneBy({ id: updateRecord.id })
80
-
81
- const result = await notificationRepo.save({
82
- ...notification,
83
- ...updateRecord,
84
- updater: user
85
- })
86
-
87
- results.push({ ...result, cuFlag: 'M' })
88
- }
89
- }
90
-
91
- return results
92
- }
93
-
94
- @Directive('@transaction')
95
- @Mutation(returns => Boolean, { description: 'To delete Notification' })
96
- async deleteNotification(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
97
- const { domain, tx } = context.state
98
-
99
- await tx.getRepository(Notification).delete({ domain: { id: domain.id }, id })
100
-
101
- return true
102
- }
103
-
104
- @Directive('@transaction')
105
- @Mutation(returns => Boolean, { description: 'To delete multiple Notificationes' })
106
- async deleteNotificationes(
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(Notification).delete({
113
- domain: { id: domain.id },
114
- id: In(ids)
115
- })
116
-
117
- return true
118
- }
119
- }
@@ -1,76 +0,0 @@
1
- import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'
2
- import { Domain, getQueryBuilderFromListParams, getRepository, ListParam, ScalarDate } from '@things-factory/shell'
3
- import { User } from '@things-factory/auth-base'
4
- import { Notification } from './notification'
5
- import { NotificationList } from './notification-type'
6
-
7
- @Resolver(Notification)
8
- export class NotificationQuery {
9
- @Query(returns => Notification!, { nullable: true, description: 'To fetch a Notification' })
10
- async notification(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Notification> {
11
- const { domain } = context.state
12
-
13
- return await getRepository(Notification).findOne({
14
- where: { domain: { id: domain.id }, id }
15
- })
16
- }
17
-
18
- @Query(returns => NotificationList, { description: 'To fetch multiple Notificationes' })
19
- async notificationes(
20
- @Args(type => ListParam) params: ListParam,
21
- @Ctx() context: ResolverContext
22
- ): Promise<NotificationList> {
23
- const { domain } = context.state
24
-
25
- const queryBuilder = getQueryBuilderFromListParams({
26
- domain,
27
- params,
28
- repository: await getRepository(Notification),
29
- searchables: ['title', 'body']
30
- })
31
-
32
- const [items, total] = await queryBuilder.getManyAndCount()
33
-
34
- return { items, total }
35
- }
36
-
37
- @Query(returns => NotificationList, { description: 'To fetch my notifications' })
38
- async myNotifications(
39
- @Args(type => ListParam) params: ListParam,
40
- @Ctx() context: ResolverContext
41
- ): Promise<NotificationList> {
42
- const { domain, user } = context.state
43
-
44
- const queryBuilder = getQueryBuilderFromListParams({
45
- domain,
46
- params,
47
- alias: 'nb',
48
- repository: await getRepository(Notification),
49
- searchables: ['title', 'body']
50
- }).andWhere('nb.owner = :user', { user: user.id })
51
-
52
- const [items, total] = await queryBuilder.getManyAndCount()
53
-
54
- return { items, total }
55
- }
56
-
57
- @FieldResolver(type => User)
58
- async owner(@Root() notification: Notification): Promise<User> {
59
- return notification.ownerId && (await getRepository(User).findOneBy({ id: notification.ownerId }))
60
- }
61
-
62
- @FieldResolver(type => Domain)
63
- async domain(@Root() notification: Notification): Promise<Domain> {
64
- return notification.domainId && (await getRepository(Domain).findOneBy({ id: notification.domainId }))
65
- }
66
-
67
- @FieldResolver(type => User)
68
- async updater(@Root() notification: Notification): Promise<User> {
69
- return notification.updaterId && (await getRepository(User).findOneBy({ id: notification.updaterId }))
70
- }
71
-
72
- @FieldResolver(type => User)
73
- async creator(@Root() notification: Notification): Promise<User> {
74
- return notification.creatorId && (await getRepository(User).findOneBy({ id: notification.creatorId }))
75
- }
76
- }
@@ -1,44 +0,0 @@
1
- import { filter, pipe } from 'graphql-yoga'
2
- import { Arg, Resolver, FieldResolver, Root, Subscription } from 'type-graphql'
3
-
4
- import { pubsub, ScalarDate } from '@things-factory/shell'
5
-
6
- import { Notification } from './notification'
7
-
8
- @Resolver(Notification)
9
- export class NotificationSubscription {
10
- @Subscription({
11
- subscribe: ({ args, context, info }) => {
12
- const { subjects = [] } = args
13
-
14
- return pipe(
15
- pubsub.subscribe('notification'),
16
- filter(async (payload: { notification: Notification }) => {
17
- /* normally, subscription context doesn't have domain */
18
- const { domain, user } = context.state
19
-
20
- const {
21
- notification: { subject, domain: pdomain }
22
- } = payload
23
-
24
- const subdomain = pdomain?.subdomain
25
-
26
- if (subdomain) {
27
- if (domain?.subdomain) {
28
- if (subdomain !== domain.subdomain) {
29
- return false
30
- }
31
- } else if (!user.domains.find(d => d.subdomain === subdomain)) {
32
- return false
33
- }
34
- }
35
-
36
- return !subject || subjects.indexOf(subject) !== -1
37
- })
38
- )
39
- }
40
- })
41
- notification(@Root() payload: { notification: Notification }, @Arg('subjects', type => [String], { nullable: true }) subjects: string[]): Notification {
42
- return payload.notification
43
- }
44
- }
@@ -1,55 +0,0 @@
1
- import { ObjectType, Field, InputType, Int, ID } from 'type-graphql'
2
- import { ScalarObject } from '@things-factory/shell'
3
-
4
- import { Notification, NotificationStatus } from './notification'
5
-
6
- @InputType()
7
- export class NewNotification {
8
- @Field({ nullable: true })
9
- ownerId?: string
10
-
11
- @Field({ nullable: true })
12
- type?: string
13
-
14
- @Field({ nullable: true })
15
- subject?: string
16
-
17
- @Field({ nullable: true })
18
- title?: string
19
-
20
- @Field({ nullable: true })
21
- body?: string
22
-
23
- @Field({ nullable: true })
24
- url?: string
25
-
26
- @Field({ nullable: true })
27
- image?: string
28
-
29
- @Field(type => ScalarObject, { nullable: true })
30
- property?: any
31
-
32
- @Field({ nullable: true })
33
- timestamp?: Date
34
- }
35
-
36
- @InputType()
37
- export class NotificationPatch {
38
- @Field(type => ID, { nullable: true })
39
- id?: string
40
-
41
- @Field(type => NotificationStatus, { nullable: true })
42
- state?: NotificationStatus
43
-
44
- @Field({ nullable: true })
45
- cuFlag?: string
46
- }
47
-
48
- @ObjectType()
49
- export class NotificationList {
50
- @Field(type => [Notification])
51
- items: Notification[]
52
-
53
- @Field(type => Int)
54
- total: number
55
- }
@@ -1,105 +0,0 @@
1
- import {
2
- CreateDateColumn,
3
- UpdateDateColumn,
4
- Entity,
5
- Index,
6
- Column,
7
- RelationId,
8
- ManyToOne,
9
- PrimaryGeneratedColumn
10
- } from 'typeorm'
11
- import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'
12
-
13
- import { Domain, ScalarObject, ScalarDate } from '@things-factory/shell'
14
- import { User } from '@things-factory/auth-base'
15
-
16
- export enum NotificationStatus {
17
- NOTREAD = 'UNREAD',
18
- READ = 'READ'
19
- }
20
-
21
- registerEnumType(NotificationStatus, {
22
- name: 'NotificationStatus',
23
- description: 'state enumeration of a notification'
24
- })
25
-
26
- @Entity()
27
- @Index('ix_notification_0', (notification: Notification) => [notification.domain, notification.type], { unique: false })
28
- @ObjectType({ description: 'Entity for Notification' })
29
- export class Notification {
30
- @PrimaryGeneratedColumn('uuid')
31
- @Field(type => ID)
32
- readonly id: string
33
-
34
- @ManyToOne(type => Domain)
35
- @Field(type => Domain)
36
- domain?: Domain
37
-
38
- @RelationId((notification: Notification) => notification.domain)
39
- domainId?: string
40
-
41
- @ManyToOne(type => User, { nullable: true })
42
- @Field(type => User, { nullable: true })
43
- owner?: User
44
-
45
- @RelationId((notification: Notification) => notification.owner)
46
- ownerId?: string
47
-
48
- @Column({ nullable: true })
49
- @Field({ nullable: true })
50
- type?: string
51
-
52
- @Column({ nullable: true })
53
- @Field({ nullable: true })
54
- subject?: string
55
-
56
- @Column({ nullable: true })
57
- @Field({ nullable: true })
58
- title?: string
59
-
60
- @Column({ nullable: true })
61
- @Field({ nullable: true })
62
- body?: string
63
-
64
- @Column({ nullable: true })
65
- @Field({ nullable: true })
66
- url?: string
67
-
68
- @Column({ nullable: true })
69
- @Field({ nullable: true })
70
- image?: string
71
-
72
- @Column({ nullable: true })
73
- @Field({ nullable: true })
74
- state?: NotificationStatus
75
-
76
- @Column('simple-json', { nullable: true })
77
- @Field(type => ScalarObject, { nullable: true })
78
- property?: any
79
-
80
- @Column('date', { nullable: true })
81
- @Field(type => ScalarDate, { nullable: true })
82
- timestamp?: Date
83
-
84
- @CreateDateColumn()
85
- @Field({ nullable: true })
86
- createdAt?: Date
87
-
88
- @UpdateDateColumn()
89
- @Field({ nullable: true })
90
- updatedAt?: Date
91
-
92
- @ManyToOne(type => User, { nullable: true })
93
- @Field(type => User, { nullable: true })
94
- creator?: User
95
-
96
- @RelationId((notification: Notification) => notification.creator)
97
- creatorId?: string
98
-
99
- @ManyToOne(type => User, { nullable: true })
100
- @Field(type => User, { nullable: true })
101
- updater?: User
102
-
103
- @RelationId((notification: Notification) => notification.updater)
104
- updaterId?: string
105
- }
@@ -1,20 +0,0 @@
1
- import { EventSubscriber } from 'typeorm'
2
-
3
- import { HistoryEntitySubscriber } from '@operato/typeorm-history'
4
-
5
- import { NotificationRule } from './notification-rule'
6
- import { NotificationRuleHistory } from './notification-rule-history'
7
-
8
- @EventSubscriber()
9
- export class NotificationRuleHistoryEntitySubscriber extends HistoryEntitySubscriber<
10
- NotificationRule,
11
- NotificationRuleHistory
12
- > {
13
- public get entity() {
14
- return NotificationRule
15
- }
16
-
17
- public get historyEntity() {
18
- return NotificationRuleHistory
19
- }
20
- }
@@ -1,9 +0,0 @@
1
- import { NotificationRule } from './notification-rule'
2
- import { NotificationRuleHistory } from './notification-rule-history'
3
- import { NotificationRuleQuery } from './notification-rule-query'
4
- import { NotificationRuleMutation } from './notification-rule-mutation'
5
- import { NotificationRuleHistoryEntitySubscriber } from './event-subscriber'
6
-
7
- export const entities = [NotificationRule, NotificationRuleHistory]
8
- export const resolvers = [NotificationRuleQuery, NotificationRuleMutation]
9
- export const subscribers = [NotificationRuleHistoryEntitySubscriber]
@@ -1,136 +0,0 @@
1
- import { Field, ID, ObjectType } from 'type-graphql'
2
- import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm'
3
-
4
- import {
5
- HistoryActionColumn,
6
- HistoryActionType,
7
- HistoryEntityInterface,
8
- HistoryOriginalIdColumn
9
- } from '@operato/typeorm-history'
10
- import { Role, User } from '@things-factory/auth-base'
11
- import { config } from '@things-factory/env'
12
- import { Domain } from '@things-factory/shell'
13
-
14
- import { NotificationRule, NotificationRuleStatus, RecipientItem } from './notification-rule'
15
-
16
- const ORMCONFIG = config.get('ormconfig', {})
17
- const DATABASE_TYPE = ORMCONFIG.type
18
-
19
- @Entity()
20
- @Index(
21
- 'ix_notification-rule_history_0',
22
- (notificationRuleHistory: NotificationRuleHistory) => [
23
- notificationRuleHistory.originalId,
24
- notificationRuleHistory.version
25
- ],
26
- { unique: true }
27
- )
28
- @Index(
29
- 'ix_notification-rule_history_1',
30
- (notificationRuleHistory: NotificationRuleHistory) => [
31
- notificationRuleHistory.domain,
32
- notificationRuleHistory.originalId,
33
- notificationRuleHistory.version
34
- ],
35
- { unique: true }
36
- )
37
- @ObjectType({ description: 'History Entity of NotificationRule' })
38
- export class NotificationRuleHistory implements HistoryEntityInterface<NotificationRule> {
39
- @PrimaryGeneratedColumn('uuid')
40
- @Field(type => ID)
41
- readonly id: string
42
-
43
- @Column({ nullable: true, default: 1 })
44
- @Field({ nullable: true })
45
- version?: number = 1
46
-
47
- @ManyToOne(type => Domain)
48
- @Field(type => Domain)
49
- domain?: Domain
50
-
51
- @RelationId((notificationRule: NotificationRule) => notificationRule.domain)
52
- domainId?: string
53
-
54
- @Column()
55
- @Field()
56
- name: string
57
-
58
- @Column({ nullable: true })
59
- @Field({ nullable: true })
60
- description?: string
61
-
62
- @Column({ nullable: true })
63
- @Field({ nullable: true })
64
- state?: NotificationRuleStatus
65
-
66
- @Column({ nullable: true })
67
- @Field({ nullable: true })
68
- title: string
69
-
70
- @Column({ nullable: true })
71
- @Field({ nullable: true })
72
- body: string
73
-
74
- @Column({ nullable: true })
75
- @Field({ nullable: true })
76
- url: string
77
-
78
- @Column({ nullable: true })
79
- @Field({ nullable: true })
80
- thumbnail: string
81
-
82
- @Column({ nullable: true })
83
- @Field({ nullable: true })
84
- channels: string
85
-
86
- @Column('simple-json', { nullable: true })
87
- @Field(type => [RecipientItem], { nullable: true, description: 'notification recipients.' })
88
- recipients: string
89
-
90
- @Column({ nullable: true })
91
- @Field({ nullable: true })
92
- createdAt?: Date
93
-
94
- @Column({ nullable: true })
95
- @Field({ nullable: true })
96
- updatedAt?: Date
97
-
98
- @Column({ nullable: true })
99
- @Field({ nullable: true })
100
- deletedAt?: Date
101
-
102
- @ManyToOne(type => User, { nullable: true })
103
- @Field(type => User, { nullable: true })
104
- creator?: User
105
-
106
- @RelationId((notificationRule: NotificationRule) => notificationRule.creator)
107
- creatorId?: string
108
-
109
- @ManyToOne(type => User, { nullable: true })
110
- @Field(type => User, { nullable: true })
111
- updater?: User
112
-
113
- @RelationId((notificationRule: NotificationRule) => notificationRule.updater)
114
- updaterId?: string
115
-
116
- @HistoryOriginalIdColumn()
117
- public originalId!: string
118
-
119
- @HistoryActionColumn({
120
- nullable: false,
121
- type:
122
- DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
123
- ? 'enum'
124
- : DATABASE_TYPE == 'oracle'
125
- ? 'varchar2'
126
- : DATABASE_TYPE == 'mssql'
127
- ? 'nvarchar'
128
- : 'varchar',
129
- enum:
130
- DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
131
- ? HistoryActionType
132
- : undefined,
133
- length: DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb' ? undefined : 10
134
- })
135
- public action!: HistoryActionType
136
- }