diff --git a/campus/bffs/enrollment/api/client.bal b/campus/bffs/enrollment/api/client.bal index e93a818..418d192 100644 --- a/campus/bffs/enrollment/api/client.bal +++ b/campus/bffs/enrollment/api/client.bal @@ -47,11 +47,17 @@ public isolated client class GraphqlClient { return check performDataBinding(graphqlResponse, UpdatePersonResponse); } remote isolated function getDistricts() returns GetDistrictsResponse|graphql:ClientError { - string query = string `query getDistricts {districts {id province {id name {name_en}} name {name_en} cities {id name {name_en}}}}`; + string query = string `query getDistricts {districts {id province {id name {name_en}} name {name_en}}}`; map variables = {}; json graphqlResponse = check self.graphqlClient->executeWithType(query, variables); return check performDataBinding(graphqlResponse, GetDistrictsResponse); } + remote isolated function getCities(int district_id) returns GetCitiesResponse|graphql:ClientError { + string query = string `query getCities($district_id:Int!) {cities(district_id:$district_id) {id name {name_en}}}`; + map variables = {"district_id": district_id}; + json graphqlResponse = check self.graphqlClient->executeWithType(query, variables); + return check performDataBinding(graphqlResponse, GetCitiesResponse); + } remote isolated function getAllOrganizations() returns GetAllOrganizationsResponse|graphql:ClientError { string query = string `query getAllOrganizations {all_organizations {id name {name_en} address {id street_address} avinya_type {id name} description phone notes}}`; map variables = {}; diff --git a/campus/bffs/enrollment/api/service.bal b/campus/bffs/enrollment/api/service.bal index 00b8494..c376358 100644 --- a/campus/bffs/enrollment/api/service.bal +++ b/campus/bffs/enrollment/api/service.bal @@ -100,6 +100,30 @@ service / on new http:Listener(9095) { } } + resource function get cities/[int district_id]() returns City[]|error { + GetCitiesResponse|graphql:ClientError getCitiesResponse = globalDataClient->getCities(district_id); + if (getCitiesResponse is GetCitiesResponse) { + City[] citiesData = []; + foreach var city in getCitiesResponse.cities { + City|error cityData = city.cloneWithType(City); + if (cityData is City) { + citiesData.push(cityData); + } else { + log:printError("Error while processing Application record received", cityData); + return error("Error while processing Application record received: " + cityData.message() + + ":: Detail: " + cityData.detail().toString()); + } + } + + return citiesData; + + } else { + log:printError("Error while getting application", getCitiesResponse); + return error("Error while getting application: " + getCitiesResponse.message() + + ":: Detail: " + getCitiesResponse.detail().toString()); + } + } + resource function get all_organizations() returns Organization[]|error { GetAllOrganizationsResponse|graphql:ClientError getAllOrganizationsResponse = globalDataClient->getAllOrganizations(); if (getAllOrganizationsResponse is GetAllOrganizationsResponse) { diff --git a/campus/bffs/enrollment/api/types.bal b/campus/bffs/enrollment/api/types.bal index f1ab410..d461de9 100644 --- a/campus/bffs/enrollment/api/types.bal +++ b/campus/bffs/enrollment/api/types.bal @@ -371,15 +371,20 @@ public type GetDistrictsResponse record {| record {| string? name_en; |} name; - record {| - int? id; - record {| - string? name_en; - |} name; - |}[] cities; |}[] districts; |}; +public type GetCitiesResponse record {| + map __extensions?; + record {| + int? id; + record {| + string? name_en; + |} name; + |}[] cities; +|}; + + public type GetAvinyaTypesResponse record {| map __extensions?; record {| diff --git a/campus/bffs/enrollment/graphql_client/enrollment.graphql b/campus/bffs/enrollment/graphql_client/enrollment.graphql index 60a7e83..1c5a4fa 100644 --- a/campus/bffs/enrollment/graphql_client/enrollment.graphql +++ b/campus/bffs/enrollment/graphql_client/enrollment.graphql @@ -158,11 +158,20 @@ query getPersonById($id: Int!) { } } -mutation updatePerson($person: Person!,$permanent_address: Address,$permanent_address_city: City, - $mailing_address: Address,$mailing_address_city: City) { - update_person(person: $person,permanent_address: $permanent_address, - permanent_address_city: $permanent_address_city,mailing_address: $mailing_address, - mailing_address_city: $mailing_address_city) { +mutation updatePerson( + $person: Person! + $permanent_address: Address + $permanent_address_city: City + $mailing_address: Address + $mailing_address_city: City +) { + update_person( + person: $person + permanent_address: $permanent_address + permanent_address_city: $permanent_address_city + mailing_address: $mailing_address + mailing_address_city: $mailing_address_city + ) { id preferred_name full_name @@ -241,62 +250,72 @@ mutation updatePerson($person: Person!,$permanent_address: Address,$permanent_ad } } - query getDistricts { - districts { - id - province{ - id - name{ - name_en - } - } - name{ - name_en - } - cities{ - id - name{ - name_en - } - } + districts { + id + province { + id + name { + name_en + } + } + name { + name_en } + } +} + +query getCities($district_id: Int!) { + cities(district_id: $district_id) { + id + name { + name_en + } + } } query getAvinyaTypes { - avinya_types { - id - active - name - global_type - foundation_type - focus - level - } + avinya_types { + id + active + name + global_type + foundation_type + focus + level + } } query getAllOrganizations { - all_organizations { - id - name{ - name_en - } - address{ - id - street_address - } - avinya_type{ - id - name - } - description - phone - notes + all_organizations { + id + name { + name_en } + address { + id + street_address + } + avinya_type { + id + name + } + description + phone + notes + } } -mutation insertPerson($person: Person!,$mailing_address: Address,$mailing_address_city: City) { - insert_person(person: $person,mailing_address: $mailing_address,mailing_address_city: $mailing_address_city) { +mutation insertPerson( + $person: Person! + $mailing_address: Address + $mailing_address_city: City +) { + insert_person( + person: $person + mailing_address: $mailing_address + mailing_address_city: $mailing_address_city + ) { id preferred_name full_name @@ -374,4 +393,3 @@ mutation insertPerson($person: Person!,$mailing_address: Address,$mailing_addres current_job } } - diff --git a/campus/bffs/enrollment/graphql_client/graphql_client_cg_src/client.bal b/campus/bffs/enrollment/graphql_client/graphql_client_cg_src/client.bal index 103d701..0168155 100644 --- a/campus/bffs/enrollment/graphql_client/graphql_client_cg_src/client.bal +++ b/campus/bffs/enrollment/graphql_client/graphql_client_cg_src/client.bal @@ -46,11 +46,17 @@ public isolated client class GraphqlClient { return check performDataBinding(graphqlResponse, UpdatePersonResponse); } remote isolated function getDistricts() returns GetDistrictsResponse|graphql:ClientError { - string query = string `query getDistricts {districts {id province {id name {name_en}} name {name_en} cities {id name {name_en}}}}`; + string query = string `query getDistricts {districts {id province {id name {name_en}} name {name_en}}}`; map variables = {}; json graphqlResponse = check self.graphqlClient->executeWithType(query, variables); return check performDataBinding(graphqlResponse, GetDistrictsResponse); } + remote isolated function getCities(int district_id) returns GetCitiesResponse|graphql:ClientError { + string query = string `query getCities($district_id:Int!) {cities(district_id:$district_id) {id name {name_en}}}`; + map variables = {"district_id": district_id}; + json graphqlResponse = check self.graphqlClient->executeWithType(query, variables); + return check performDataBinding(graphqlResponse, GetCitiesResponse); + } remote isolated function getAvinyaTypes() returns GetAvinyaTypesResponse|graphql:ClientError { string query = string `query getAvinyaTypes {avinya_types {id active name global_type foundation_type focus level}}`; map variables = {}; diff --git a/campus/bffs/enrollment/graphql_client/graphql_client_cg_src/types.bal b/campus/bffs/enrollment/graphql_client/graphql_client_cg_src/types.bal index 1467135..400de94 100644 --- a/campus/bffs/enrollment/graphql_client/graphql_client_cg_src/types.bal +++ b/campus/bffs/enrollment/graphql_client/graphql_client_cg_src/types.bal @@ -683,15 +683,19 @@ public type GetDistrictsResponse record {| record {| string? name_en; |} name; - record {| - int? id; - record {| - string? name_en; - |} name; - |}[] cities; |}[]? districts; |}; +public type GetCitiesResponse record {| + map __extensions?; + record {| + int? id; + record {| + string? name_en; + |} name; + |}[]? cities; +|}; + public type GetAvinyaTypesResponse record {| map __extensions?; record {| diff --git a/campus/bffs/enrollment/graphql_client/schema.graphql b/campus/bffs/enrollment/graphql_client/schema.graphql index b3f3ef8..06ef54a 100644 --- a/campus/bffs/enrollment/graphql_client/schema.graphql +++ b/campus/bffs/enrollment/graphql_client/schema.graphql @@ -930,6 +930,7 @@ type Query { persons(organization_id: Int, avinya_type_id: Int): [PersonData!] person_by_id(id: Int): PersonData districts: [DistrictData!] + cities(district_id: Int): [CityData!] all_organizations: [OrganizationData!] } diff --git a/campus/bffs/enrollment/graphql_client/schema.json b/campus/bffs/enrollment/graphql_client/schema.json index 29facc7..1479556 100644 --- a/campus/bffs/enrollment/graphql_client/schema.json +++ b/campus/bffs/enrollment/graphql_client/schema.json @@ -3066,6 +3066,35 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "cities", + "args": [ + { + "name": "district_id", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "CityData", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "all_organizations", "args": [],