Skip to content

Commit 7502c5f

Browse files
authored
Merge pull request #1135 from opencrvs/v2.0-temp
V2.0 temp
2 parents fc41868 + 6a9eed4 commit 7502c5f

File tree

12 files changed

+119
-52
lines changed

12 files changed

+119
-52
lines changed

infrastructure/postgres/setup-analytics.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ CREATE TABLE IF NOT EXISTS analytics.event_actions (
8585
UNIQUE (id, event_id)
8686
);
8787
88+
ALTER TABLE analytics.event_actions ADD COLUMN IF NOT EXISTS custom_action_type TEXT;
89+
8890
CREATE TABLE IF NOT EXISTS analytics.location_levels (
8991
id text PRIMARY KEY,
9092
level int NOT NULL,

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
"@hapi/boom": "^9.1.1",
7070
"@hapi/hapi": "^20.0.1",
7171
"@hapi/inert": "^6.0.3",
72-
"@opencrvs/toolkit": "1.9.0-rc.79b0f42",
72+
"@opencrvs/toolkit": "1.9.0-rc.8476ac9",
7373
"@types/chalk": "^2.2.0",
7474
"@types/csv2json": "^1.4.0",
7575
"@types/fhir": "^0.0.30",
@@ -114,7 +114,7 @@
114114
"tsconfig-paths": "^3.8.0",
115115
"typescript": "^5.1.6",
116116
"uuid": "^11.1.0",
117-
"zod": "^3.24.1"
117+
"zod": "^4.1.12"
118118
},
119119
"lint-staged": {
120120
"src/**/*.{ts,graphql}": [

src/api/custom-event/handler.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ export function getCustomEventsHandler(
2424
.code(200)
2525
}
2626

27+
export async function onCustomActionHandler(
28+
request: ActionConfirmationRequest,
29+
h: Hapi.ResponseToolkit
30+
) {
31+
return h.response().code(200)
32+
}
33+
2734
export async function onAnyActionHandler(
2835
request: ActionConfirmationRequest,
2936
h: Hapi.ResponseToolkit
@@ -33,6 +40,7 @@ export async function onAnyActionHandler(
3340
const token = request.auth.artifacts.token as string
3441

3542
const event = request.payload
43+
3644
await sendInformantNotification({ event, token })
3745

3846
return h.response().code(200)

src/api/notification/informantNotification.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ import { InformantType as BirthInformantType } from '@countryconfig/form/v2/birt
2626
import { InformantTemplateType } from './sms-service'
2727
import { generateFailureLog, NotificationParams, notify } from './handler'
2828
import { InformantType as DeathInformantType } from '@countryconfig/form/v2/death/forms/pages/informant'
29-
import { birthEvent } from '@countryconfig/form/v2/birth'
30-
import { deathEvent } from '@countryconfig/form/v2/death'
3129

3230
const resolveName = (name: FieldUpdateValue) => {
3331
const nameObj = {
@@ -77,18 +75,6 @@ function getInformant(eventType: string, declaration: Record<string, any>) {
7775
throw new Error('Invalid event type')
7876
}
7977

80-
function getEventConfig(eventType: string) {
81-
if (eventType === Event.Birth) {
82-
return birthEvent
83-
}
84-
85-
if (eventType === Event.Death) {
86-
return deathEvent
87-
}
88-
89-
throw new Error('Invalid event type')
90-
}
91-
9278
async function getNotificationParams(
9379
event: EventDocument,
9480
token: string,

src/data-seeding/roles/roles.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,8 @@ export const roles: Role[] = [
221221
'record.register[event=birth|death|tennis-club-membership]',
222222
'record.registered.print-certified-copies[event=birth|death|tennis-club-membership]',
223223
'record.registered.correct[event=birth|death|tennis-club-membership]',
224-
'record.unassign-others[event=birth|death|tennis-club-membership]'
224+
'record.unassign-others[event=birth|death|tennis-club-membership]',
225+
'record.custom-action[event=birth,customActionType=Approve]'
225226
]
226227
},
227228
{

src/form/tennis-club-membership.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -908,8 +908,7 @@ export const tennisClubMembershipEvent = defineConfig({
908908
description:
909909
'This is shown as the action name anywhere the user can trigger the action from',
910910
id: 'event.tennis-club-membership.action.validate.label'
911-
},
912-
review: TENNIS_CLUB_DECLARATION_REVIEW
911+
}
913912
},
914913
{
915914
type: ActionType.REGISTER,
@@ -918,8 +917,7 @@ export const tennisClubMembershipEvent = defineConfig({
918917
description:
919918
'This is shown as the action name anywhere the user can trigger the action from',
920919
id: 'event.tennis-club-membership.action.register.label'
921-
},
922-
review: TENNIS_CLUB_DECLARATION_REVIEW
920+
}
923921
},
924922
{
925923
type: ActionType.PRINT_CERTIFICATE,

src/form/v2/birth/index.ts

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@
1010
*/
1111
import {
1212
ActionType,
13+
and,
1314
ConditionalType,
1415
defineConfig,
15-
field
16+
field,
17+
not
1618
} from '@opencrvs/toolkit/events'
1719
import {
1820
BIRTH_DECLARATION_FORM,
@@ -24,6 +26,7 @@ import { BIRTH_CERTIFICATE_COLLECTOR_FORM } from './forms/printForm'
2426
import { PlaceOfBirth } from './forms/pages/child'
2527
import { CORRECTION_FORM } from './forms/correctionForm'
2628
import { dedupConfig } from './dedupConfig'
29+
import { applicationConfig } from '@countryconfig/api/application/application-config'
2730

2831
export const birthEvent = defineConfig({
2932
id: Event.Birth,
@@ -45,6 +48,17 @@ export const birthEvent = defineConfig({
4548
description:
4649
'This is a fallback title if actual title resolves to empty string'
4750
},
51+
flags: [
52+
{
53+
id: 'approval-required-for-late-registration',
54+
label: {
55+
id: 'event.birth.flag.approval-required-for-late-registration',
56+
defaultMessage: 'Approval required for late registration',
57+
description: 'Flag label for approval required for late registration'
58+
},
59+
requiresAction: true
60+
}
61+
],
4862
summary: {
4963
fields: [
5064
{
@@ -188,6 +202,47 @@ export const birthEvent = defineConfig({
188202
id: 'event.birth.action.detect-duplicate.label'
189203
},
190204
query: dedupConfig
205+
},
206+
flags: [
207+
{
208+
id: 'approval-required-for-late-registration',
209+
operation: 'add',
210+
conditional: and(
211+
not(
212+
field('child.dob')
213+
.isAfter()
214+
.days(applicationConfig.BIRTH.LATE_REGISTRATION_TARGET)
215+
.inPast()
216+
),
217+
field('child.dob').isBefore().now()
218+
)
219+
}
220+
]
221+
},
222+
{
223+
type: ActionType.CUSTOM,
224+
customActionType: 'Approve',
225+
label: {
226+
defaultMessage: 'Approve',
227+
description:
228+
'This is shown as the action name anywhere the user can trigger the action from',
229+
id: 'event.birth.action.approve.label'
230+
},
231+
supportingCopy: {
232+
defaultMessage:
233+
'This birth has been registered late. You are now approving it for further validation and registration.',
234+
description: 'This is the confirmation text for the approve action',
235+
id: 'event.birth.action.approve.confirmationText'
236+
},
237+
form: [],
238+
flags: [
239+
{ id: 'approval-required-for-late-registration', operation: 'remove' }
240+
],
241+
auditHistoryLabel: {
242+
defaultMessage: 'Approved',
243+
description:
244+
'The label to show in audit history for the approve action',
245+
id: 'event.birth.action.approve.audit-history-label'
191246
}
192247
},
193248
{
@@ -198,7 +253,6 @@ export const birthEvent = defineConfig({
198253
'This is shown as the action name anywhere the user can trigger the action from',
199254
id: 'event.birth.action.validate.label'
200255
},
201-
review: BIRTH_DECLARATION_REVIEW,
202256
deduplication: {
203257
id: 'birth-deduplication',
204258
label: {
@@ -218,7 +272,6 @@ export const birthEvent = defineConfig({
218272
'This is shown as the action name anywhere the user can trigger the action from',
219273
id: 'event.birth.action.register.label'
220274
},
221-
review: BIRTH_DECLARATION_REVIEW,
222275
deduplication: {
223276
id: 'birth-deduplication',
224277
label: {

src/form/v2/death/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,6 @@ export const deathEvent = defineConfig({
201201
'This is shown as the action name anywhere the user can trigger the action from',
202202
id: 'event.death.action.validate.label'
203203
},
204-
review: DEATH_DECLARATION_REVIEW,
205204
deduplication: {
206205
id: 'death-deduplication',
207206
label: {
@@ -221,7 +220,6 @@ export const deathEvent = defineConfig({
221220
'This is shown as the action name anywhere the user can trigger the action from',
222221
id: 'event.death.action.register.label'
223222
},
224-
review: DEATH_DECLARATION_REVIEW,
225223
deduplication: {
226224
id: 'death-deduplication',
227225
label: {

src/index.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ import { fontsHandler } from './api/fonts/handler'
5858
import { recordNotificationHandler } from './api/record-notification/handler'
5959
import {
6060
getCustomEventsHandler,
61-
onAnyActionHandler
61+
onAnyActionHandler,
62+
onCustomActionHandler
6263
} from '@countryconfig/api/custom-event/handler'
63-
import { readFileSync } from 'fs'
6464
import {
6565
ActionDocument,
6666
ActionStatus,
@@ -92,7 +92,7 @@ export interface ITokenPayload {
9292
export default function getPlugins() {
9393
const plugins: any[] = [inert, JWT]
9494

95-
if (process.env.NODE_ENV === 'production') {
95+
if (process.env.NODE_ENV !== 'test') {
9696
plugins.push({
9797
plugin: Pino,
9898
options: {
@@ -641,6 +641,16 @@ export async function createServer() {
641641
}
642642
})
643643

644+
server.route({
645+
method: 'POST',
646+
path: `/trigger/events/{event}/actions/${ActionType.CUSTOM}`,
647+
handler: onCustomActionHandler,
648+
options: {
649+
tags: ['api', 'events'],
650+
description: 'Receives notifications on event custom action'
651+
}
652+
})
653+
644654
server.route({
645655
method: 'POST',
646656
path: '/trigger/events/{event}/actions/{action}',
@@ -748,9 +758,9 @@ export async function createServer() {
748758
await syncLocationLevels()
749759
await syncLocationStatistics()
750760

751-
const logMsg = `Server successfully started on ${COUNTRY_CONFIG_HOST}:${COUNTRY_CONFIG_PORT}`
752-
logger.info(logMsg)
753-
server.log('info', logMsg)
761+
logger.info(
762+
`Server successfully started on ${COUNTRY_CONFIG_HOST}:${COUNTRY_CONFIG_PORT}`
763+
)
754764
}
755765

756766
return { server, start, stop }

src/logger.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ export const logger =
1919
]
2020
})
2121
: pino({
22+
serializers: {
23+
req: () => undefined,
24+
res: () => undefined,
25+
responseTime: () => undefined
26+
},
2227
transport: {
2328
target: 'pino-pretty',
2429
options: {

0 commit comments

Comments
 (0)