feat: update /api/valueset to return {value, label, count} format

This commit is contained in:
mahdahar 2026-02-23 13:14:03 +07:00
parent 5272efa7b9
commit d5f1d9fc84
4 changed files with 54 additions and 17 deletions

View File

@ -27,13 +27,18 @@ class ValueSetController extends \CodeIgniter\Controller
foreach ($all as $name => $entry) { foreach ($all as $name => $entry) {
if ($search) { if ($search) {
$nameLower = strtolower($name); $nameLower = strtolower($name);
$labelLower = strtolower($entry['VSName'] ?? '');
$searchLower = strtolower($search); $searchLower = strtolower($search);
if (strpos($nameLower, $searchLower) === false) { if (strpos($nameLower, $searchLower) === false && strpos($labelLower, $searchLower) === false) {
continue; continue;
} }
} }
$count = count($entry['values'] ?? []); $count = count($entry['values'] ?? []);
$result[$name] = $count; $result[] = [
'value' => $name,
'label' => $entry['VSName'] ?? '',
'count' => $count
];
} }
return $this->respond([ return $this->respond([
'status' => 'success', 'status' => 'success',

View File

@ -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: ValueSetLibItem:
type: object type: object
description: Library/system value set item from JSON files description: Library/system value set item from JSON files

View File

@ -2,7 +2,7 @@
get: get:
tags: [ValueSets] tags: [ValueSets]
summary: List lib value sets 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: security:
- bearerAuth: [] - bearerAuth: []
parameters: parameters:
@ -10,7 +10,7 @@
in: query in: query
schema: schema:
type: string type: string
description: Optional search term to filter value set names description: Optional search term to filter value set names or labels
responses: responses:
'200': '200':
description: List of lib value sets with item counts description: List of lib value sets with item counts
@ -23,14 +23,19 @@
type: string type: string
example: success example: success
data: data:
type: object type: array
additionalProperties: items:
type: integer $ref: '../components/schemas/valuesets.yaml#/ValueSetListItem'
description: Number of items in each value set
example: example:
sex: 3 - value: sex
marital_status: 6 label: Sex
order_status: 6 count: 3
- value: marital_status
label: Marital Status
count: 6
- value: order_status
label: Order Status
count: 6
/api/valueset/{key}: /api/valueset/{key}:
get: get:

View File

@ -27,12 +27,25 @@ class ValueSetControllerTest extends CIUnitTestCase
$this->assertEquals('success', $data['status']); $this->assertEquals('success', $data['status']);
$this->assertIsArray($data['data']); $this->assertIsArray($data['data']);
$this->assertArrayHasKey('sex', $data['data']);
$this->assertArrayHasKey('specimen_type', $data['data']); // Find specific valuesets in the array
$this->assertArrayHasKey('order_priority', $data['data']); $valuesets = [];
$this->assertArrayHasKey('specimen_status', $data['data']); foreach ($data['data'] as $item) {
$this->assertIsInt($data['data']['sex']); $valuesets[$item['value']] = $item;
$this->assertGreaterThan(0, $data['data']['sex']); }
$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() public function testShowByNameReturnsSingleLookup()