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) {
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',

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

View File

@ -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:

View File

@ -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()