Skip to content
This repository was archived by the owner on Feb 20, 2024. It is now read-only.

Commit 6da22dd

Browse files
authored
Merge pull request #28 from Virtual-Finland-Development/feat/nsg-basic-information-productizer
feat: add nsg/basic-information productizer path
2 parents ac88bc3 + e41ccfe commit 6da22dd

13 files changed

Lines changed: 148 additions & 83 deletions

File tree

src/lib/api_app/src/api/routes/mod.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,10 @@ pub mod testbed;
3535
testbed::productizers::person::basic_information::write_basic_information,
3636
testbed::productizers::person::job_applicant_profile::get_job_applicant_profile,
3737
testbed::productizers::person::job_applicant_profile::write_job_applicant_profile,
38-
testbed::productizers::non_listed_company::establishment::write_establishment,
39-
testbed::productizers::non_listed_company::beneficial_owners::get_beneficial_owners,
40-
testbed::productizers::non_listed_company::signatory_rights::get_signatory_rights
38+
testbed::productizers::nsg::non_listed_company::establishment::write_establishment,
39+
testbed::productizers::nsg::non_listed_company::beneficial_owners::get_beneficial_owners,
40+
testbed::productizers::nsg::non_listed_company::signatory_rights::get_signatory_rights,
41+
testbed::productizers::nsg::basic_information::get_nsg_basic_information,
4142
),
4243
components(schemas( // @TODO: would be very nice to auto-generate schemas
4344
testbed::ProxyRequestInput,
@@ -51,6 +52,7 @@ pub mod testbed;
5152
testbed::productizers::job::job_models::RequestPagingFromFrontend,
5253
testbed::productizers::job::job_models::BasicInfo,
5354
testbed::productizers::job::job_models::Location,
55+
testbed::productizers::nsg::basic_information::NSGAgentBasicInformationRequest,
5456
jmf::models::RecommendationsRequest,
5557
jmf::models::RecommendationsResponse,
5658
jmf::models::Occupation,

src/lib/api_app/src/api/routes/testbed/productizers/mod.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use utils::environment::get_stage;
66

77
pub mod figure;
88
pub mod job;
9-
pub mod non_listed_company;
9+
pub mod nsg;
1010
pub mod person;
1111
pub mod user;
1212

@@ -48,11 +48,18 @@ fn parse_testbed_request_headers(request: ParsedRequest) -> Result<HeaderMap, AP
4848
/**
4949
* Builds the URI for the testbed data product
5050
*/
51+
fn build_data_product_stage_uri(data_product: &str, data_source: &str) -> String {
52+
let testbed_environment =
53+
env::var("TESTBED_ENVIRONMENT").expect("TESTBED_ENVIRONMENT must be set");
54+
build_data_product_uri(
55+
data_product,
56+
format!("{data_source}:{testbed_environment}").as_str(),
57+
)
58+
}
59+
5160
fn build_data_product_uri(data_product: &str, data_source: &str) -> String {
5261
let mut testbed_base_url =
5362
env::var("TESTBED_BASE_URL").expect("TESTBED_BASE_URL must be set");
54-
let testbed_environment =
55-
env::var("TESTBED_ENVIRONMENT").expect("TESTBED_ENVIRONMENT must be set");
5663

5764
if get_stage() == "local" {
5865
// @TODO: needs a local testbed data product gw simulation
@@ -90,5 +97,5 @@ fn build_data_product_uri(data_product: &str, data_source: &str) -> String {
9097
testbed_base_url.pop();
9198
}
9299

93-
format!("{testbed_base_url}/{data_product}?source={data_source}:{testbed_environment}")
100+
format!("{testbed_base_url}/{data_product}?source={data_source}")
94101
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
use app::{
2+
requests::post_json_request,
3+
responses::{APIResponse, APIRoutingError},
4+
router::ParsedRequest,
5+
};
6+
use serde::{Deserialize, Serialize};
7+
use serde_json::Value as JSONValue;
8+
use utils::api::get_default_headers;
9+
use utoipa::ToSchema;
10+
11+
use crate::api::routes::testbed::productizers::build_data_product_uri;
12+
13+
#[derive(Deserialize, Serialize, Debug, PartialEq, Eq, Clone, ToSchema)]
14+
pub struct NSGAgentBasicInformationRequest {
15+
#[serde(rename = "nationalIdentifier")]
16+
pub national_identifier: String,
17+
}
18+
19+
#[utoipa::path(
20+
post,
21+
path = "/testbed/productizer/nsg/basic-information",
22+
request_body(
23+
content = NSGAgentBasicInformationRequest,
24+
description = "Get company basic information input",
25+
examples(
26+
(
27+
"Success" = (
28+
summary = "National identifier",
29+
value = json!({
30+
"nationalIdentifier": "2464491-9"
31+
}),
32+
)
33+
)
34+
)
35+
),
36+
params(
37+
("source" = String, Query, description = "Data source: fi, se, no..", example = "fi"),
38+
),
39+
responses((
40+
status = 200,
41+
body = Object,
42+
description = "Basic information response",
43+
examples(( "Success" = (
44+
summary = "JSON example",
45+
value = json!("Loading..."),
46+
external_value = "https://raw.githubusercontent.com/Virtual-Finland/definitions/main/DataProducts/draft/NSG/Agent/BasicInformation.json"
47+
)))
48+
))
49+
)]
50+
pub async fn get_nsg_basic_information(request: ParsedRequest) -> APIResponse {
51+
let request_input: NSGAgentBasicInformationRequest =
52+
serde_json::from_str(request.body.as_str())?;
53+
54+
let data_product = "draft/NSG/Agent/BasicInformation";
55+
let data_source = request.query.first("source").unwrap_or("");
56+
if data_source.is_empty() {
57+
return Err(APIRoutingError::BadRequest(
58+
"Missing source parameter".to_string(),
59+
));
60+
}
61+
62+
let response = post_json_request::<NSGAgentBasicInformationRequest, JSONValue>(
63+
build_data_product_uri(data_product, data_source),
64+
&request_input,
65+
get_default_headers(),
66+
)
67+
.await?;
68+
69+
Ok(response)
70+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use serde_json::{json, Value as JSONValue};
2+
3+
use app::{requests::post_json_request, responses::APIResponse, router::ParsedRequest};
4+
5+
use super::{build_data_product_stage_uri, parse_testbed_request_headers};
6+
7+
pub mod basic_information;
8+
pub mod non_listed_company;
9+
10+
pub async fn post_data_product(
11+
data_product: &str,
12+
data_source: &str,
13+
request: ParsedRequest,
14+
) -> APIResponse {
15+
let request_input: JSONValue =
16+
serde_json::from_str(request.body.as_str()).unwrap_or_else(|_| json!({}));
17+
let request_headers = parse_testbed_request_headers(request)?;
18+
let response = post_json_request::<JSONValue, JSONValue>(
19+
build_data_product_stage_uri(data_product, data_source),
20+
&request_input,
21+
request_headers,
22+
)
23+
.await?;
24+
Ok(response)
25+
}

src/lib/api_app/src/api/routes/testbed/productizers/non_listed_company/beneficial_owners/mod.rs renamed to src/lib/api_app/src/api/routes/testbed/productizers/nsg/non_listed_company/beneficial_owners/mod.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
use app::{
2-
responses::APIResponse,
3-
router::ParsedRequest
4-
};
1+
use app::{responses::APIResponse, router::ParsedRequest};
52

63
#[utoipa::path(
74
post,

src/lib/api_app/src/api/routes/testbed/productizers/non_listed_company/establishment/mod.rs renamed to src/lib/api_app/src/api/routes/testbed/productizers/nsg/non_listed_company/establishment/mod.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
use app::{
2-
responses::APIResponse,
3-
router::ParsedRequest
4-
};
1+
use app::{responses::APIResponse, router::ParsedRequest};
52

63
#[utoipa::path(
74
post,

src/lib/api_app/src/api/routes/testbed/productizers/non_listed_company/mod.rs renamed to src/lib/api_app/src/api/routes/testbed/productizers/nsg/non_listed_company/mod.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
use serde_json::{json, Value as JSONValue};
22

3-
use app::{
4-
requests::post_json_request,
5-
responses::APIResponse,
6-
router::ParsedRequest
7-
};
3+
use app::{requests::post_json_request, responses::APIResponse, router::ParsedRequest};
84

9-
use super::{build_data_product_uri, parse_testbed_request_headers};
5+
use super::{build_data_product_stage_uri, parse_testbed_request_headers};
106

11-
pub mod signatory_rights;
12-
pub mod establishment;
137
pub mod beneficial_owners;
8+
pub mod establishment;
9+
pub mod signatory_rights;
1410

1511
pub async fn post_data_product(
1612
data_product: &str,
@@ -21,10 +17,10 @@ pub async fn post_data_product(
2117
serde_json::from_str(request.body.as_str()).unwrap_or_else(|_| json!({}));
2218
let request_headers = parse_testbed_request_headers(request)?;
2319
let response = post_json_request::<JSONValue, JSONValue>(
24-
build_data_product_uri(data_product, data_source),
20+
build_data_product_stage_uri(data_product, data_source),
2521
&request_input,
2622
request_headers,
2723
)
28-
.await?;
24+
.await?;
2925
Ok(response)
3026
}

src/lib/api_app/src/api/routes/testbed/productizers/non_listed_company/signatory_rights/mod.rs renamed to src/lib/api_app/src/api/routes/testbed/productizers/nsg/non_listed_company/signatory_rights/mod.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
use app::{
2-
responses::APIResponse,
3-
router::ParsedRequest
4-
};
1+
use app::{responses::APIResponse, router::ParsedRequest};
52

63
#[utoipa::path(
74
post,

src/lib/api_app/src/api/routes/testbed/productizers/person/basic_information/mod.rs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
use app::{
2-
router::ParsedRequest,
3-
responses::APIResponse,
4-
};
1+
use app::{responses::APIResponse, router::ParsedRequest};
52

63
#[utoipa::path(
74
get,
@@ -27,9 +24,7 @@ use app::{
2724
)),
2825
security(( "BearerAuth" = [] ))
2926
)]
30-
pub async fn get_basic_information(
31-
request: ParsedRequest,
32-
) -> APIResponse {
27+
pub async fn get_basic_information(request: ParsedRequest) -> APIResponse {
3328
let data_product = "draft/Person/BasicInformation";
3429
let data_source = "virtualfinland";
3530
let result = super::get_data_product(data_product, data_source, request).await?;
@@ -60,9 +55,7 @@ pub async fn get_basic_information(
6055
))),
6156
security(( "BearerAuth" = [] ))
6257
)]
63-
pub async fn write_basic_information(
64-
request: ParsedRequest,
65-
) -> APIResponse {
58+
pub async fn write_basic_information(request: ParsedRequest) -> APIResponse {
6659
let data_product = "draft/Person/BasicInformation/Write";
6760
let data_source = "virtualfinland";
6861
let result = super::write_data_product(data_product, data_source, request).await?;

src/lib/api_app/src/api/routes/testbed/productizers/person/job_applicant_profile/mod.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
use app::{
2-
router::ParsedRequest,
3-
responses::APIResponse,
4-
};
5-
1+
use app::{responses::APIResponse, router::ParsedRequest};
62

73
#[utoipa::path(
84
get,
@@ -28,9 +24,7 @@ use app::{
2824
)),
2925
security(( "BearerAuth" = [] ))
3026
)]
31-
pub async fn get_job_applicant_profile(
32-
request: ParsedRequest,
33-
) -> APIResponse {
27+
pub async fn get_job_applicant_profile(request: ParsedRequest) -> APIResponse {
3428
let data_product = "draft/Person/JobApplicantProfile";
3529
let data_source = "virtualfinland";
3630
let result = super::get_data_product(data_product, data_source, request).await?;
@@ -61,9 +55,7 @@ pub async fn get_job_applicant_profile(
6155
)),
6256
security(( "BearerAuth" = [] ))
6357
)]
64-
pub async fn write_job_applicant_profile(
65-
request: ParsedRequest,
66-
) -> APIResponse {
58+
pub async fn write_job_applicant_profile(request: ParsedRequest) -> APIResponse {
6759
let data_product = "draft/Person/JobApplicantProfile/Write";
6860
let data_source = "virtualfinland";
6961
let result = super::write_data_product(data_product, data_source, request).await?;

0 commit comments

Comments
 (0)