From d5f1d9fc84959dea42c42671220d83ea2116686e Mon Sep 17 00:00:00 2001 From: mahdahar <89adham@gmail.com> Date: Mon, 23 Feb 2026 13:14:03 +0700 Subject: [PATCH] feat: update /api/valueset to return {value, label, count} format --- app/Controllers/ValueSetController.php | 9 +++++-- public/components/schemas/valuesets.yaml | 14 +++++++++++ public/paths/valuesets.yaml | 23 ++++++++++------- .../ValueSet/ValueSetControllerTest.php | 25 ++++++++++++++----- 4 files changed, 54 insertions(+), 17 deletions(-) diff --git a/app/Controllers/ValueSetController.php b/app/Controllers/ValueSetController.php index 11ebb9b..bf6945f 100644 --- a/app/Controllers/ValueSetController.php +++ b/app/Controllers/ValueSetController.php @@ -27,13 +27,18 @@ class ValueSetController extends \CodeIgniter\Controller foreach ($all as $name => $entry) { if ($search) { $nameLower = strtolower($name); + $labelLower = strtolower($entry['VSName'] ?? ''); $searchLower = strtolower($search); - if (strpos($nameLower, $searchLower) === false) { + if (strpos($nameLower, $searchLower) === false && strpos($labelLower, $searchLower) === false) { continue; } } $count = count($entry['values'] ?? []); - $result[$name] = $count; + $result[] = [ + 'value' => $name, + 'label' => $entry['VSName'] ?? '', + 'count' => $count + ]; } return $this->respond([ 'status' => 'success', diff --git a/public/components/schemas/valuesets.yaml b/public/components/schemas/valuesets.yaml index ef7a431..67c35fc 100644 --- a/public/components/schemas/valuesets.yaml +++ b/public/components/schemas/valuesets.yaml @@ -1,3 +1,17 @@ +ValueSetListItem: + type: object + description: Library/system value set summary (from JSON files) + properties: + value: + type: string + description: The value set key/name + label: + type: string + description: The display name/label + count: + type: integer + description: Number of items in this value set + ValueSetLibItem: type: object description: Library/system value set item from JSON files diff --git a/public/paths/valuesets.yaml b/public/paths/valuesets.yaml index 82bea87..98a09d6 100644 --- a/public/paths/valuesets.yaml +++ b/public/paths/valuesets.yaml @@ -2,7 +2,7 @@ get: tags: [ValueSets] summary: List lib value sets - description: List all library/system value sets from JSON files with item counts. Returns an object where keys are value set names and values are item counts. + description: List all library/system value sets from JSON files with item counts. Returns an array of objects with value, label, and count properties. security: - bearerAuth: [] parameters: @@ -10,7 +10,7 @@ in: query schema: type: string - description: Optional search term to filter value set names + description: Optional search term to filter value set names or labels responses: '200': description: List of lib value sets with item counts @@ -23,14 +23,19 @@ type: string example: success data: - type: object - additionalProperties: - type: integer - description: Number of items in each value set + type: array + items: + $ref: '../components/schemas/valuesets.yaml#/ValueSetListItem' example: - sex: 3 - marital_status: 6 - order_status: 6 + - value: sex + label: Sex + count: 3 + - value: marital_status + label: Marital Status + count: 6 + - value: order_status + label: Order Status + count: 6 /api/valueset/{key}: get: diff --git a/tests/feature/ValueSet/ValueSetControllerTest.php b/tests/feature/ValueSet/ValueSetControllerTest.php index 41ce249..a7fead7 100644 --- a/tests/feature/ValueSet/ValueSetControllerTest.php +++ b/tests/feature/ValueSet/ValueSetControllerTest.php @@ -27,12 +27,25 @@ class ValueSetControllerTest extends CIUnitTestCase $this->assertEquals('success', $data['status']); $this->assertIsArray($data['data']); - $this->assertArrayHasKey('sex', $data['data']); - $this->assertArrayHasKey('specimen_type', $data['data']); - $this->assertArrayHasKey('order_priority', $data['data']); - $this->assertArrayHasKey('specimen_status', $data['data']); - $this->assertIsInt($data['data']['sex']); - $this->assertGreaterThan(0, $data['data']['sex']); + + // Find specific valuesets in the array + $valuesets = []; + foreach ($data['data'] as $item) { + $valuesets[$item['value']] = $item; + } + + $this->assertArrayHasKey('sex', $valuesets); + $this->assertArrayHasKey('specimen_type', $valuesets); + $this->assertArrayHasKey('order_priority', $valuesets); + $this->assertArrayHasKey('specimen_status', $valuesets); + + // Check structure + $this->assertArrayHasKey('value', $valuesets['sex']); + $this->assertArrayHasKey('label', $valuesets['sex']); + $this->assertArrayHasKey('count', $valuesets['sex']); + $this->assertIsInt($valuesets['sex']['count']); + $this->assertGreaterThan(0, $valuesets['sex']['count']); + $this->assertEquals('Sex', $valuesets['sex']['label']); } public function testShowByNameReturnsSingleLookup()