diff --git a/source/api/actions/member_project.ts b/source/api/actions/member_project.ts index 21cc165..faafec8 100644 --- a/source/api/actions/member_project.ts +++ b/source/api/actions/member_project.ts @@ -24,11 +24,15 @@ namespace _espe.api { register< { - membership_number : string; + membership_number : (null | string); name_real_value : string; email_address_private : (null | string); }, - _espe.type.member_id + ( + string + | + _espe.type.member_id + ) >( rest_subject, lib_plankton.http.enum_method.post, @@ -71,25 +75,41 @@ namespace _espe.api return Promise.reject(new Error("impossible")); } else { - const member_id : _espe.type.member_id = await _espe.service.member.project( - { - "membership_number": input.membership_number, - "name_real_value": input.name_real_value, - "email_address_private": ( - ("email_address_private" in input) - ? ( - (input.email_address_private !== "") - ? input.email_address_private + if ( + (! _espe.conf.get().settings.facultative_membership_number) + && + ( + (input.membership_number === null) + || + (input.membership_number === "") + ) + ) { + return Promise.resolve({ + "status_code": 400, + "data": "membership number required" + }); + } + else { + const member_id : _espe.type.member_id = await _espe.service.member.project( + { + "membership_number": input.membership_number, + "name_real_value": input.name_real_value, + "email_address_private": ( + ("email_address_private" in input) + ? ( + (input.email_address_private !== "") + ? input.email_address_private + : null + ) : null - ) - : null - ), - } - ); - return Promise.resolve({ - "status_code": 201, - "data": member_id - }); + ), + } + ); + return Promise.resolve({ + "status_code": 201, + "data": member_id + }); + } } } } diff --git a/source/conf.ts b/source/conf.ts index 54fa333..5098ce4 100644 --- a/source/conf.ts +++ b/source/conf.ts @@ -97,6 +97,7 @@ namespace _espe.conf target_domain : string; frontend_url_base : (null | string); prefix_for_nominal_email_addresses : string; + facultative_membership_number : boolean; registration_email : { subject : string; body : string; @@ -248,6 +249,7 @@ namespace _espe.conf "target_domain": (node_settings["target_domain"] ?? "example.org"), "frontend_url_base": (node_settings["frontend_url_base"] ?? null), // TODO: mandatory? "prefix_for_nominal_email_addresses": (node_settings["prefix_for_nominal_email_addresses"] ?? "member-"), + "facultative_membership_number": (node_settings["facultative_membership_number"] ?? false), "registration_email": { "subject": ((node_settings["registration_email"] ?? {})["subject"] ?? "Registration"), "body": ((node_settings["registration_email"] ?? {})["body"] ?? "URL: {{url}}"), diff --git a/source/services/member.ts b/source/services/member.ts index bcb513f..343b879 100644 --- a/source/services/member.ts +++ b/source/services/member.ts @@ -307,7 +307,7 @@ namespace _espe.service.member */ export async function project( data : { - membership_number : string; + membership_number : (null | string); name_real_value : string; email_address_private : (null | string); }