Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/create user request #5

Merged
merged 2 commits into from
Jan 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions src/Data/CreateUserData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

declare(strict_types=1);

namespace MoeMizrak\Rekognition\Data;

use MoeMizrak\Rekognition\Data\Contracts\RekognitionDataFormatInterface;
use Spatie\LaravelData\Data;

/**
* CreateUserData is for the data of the Rekognition API createUser request.
* For more info: https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-rekognition-2016-06-27.html#createuser
*
* @class CreateUserData
*/
final class CreateUserData extends Data implements RekognitionDataFormatInterface
{
public function __construct(
/*
* The ID of an existing collection to which the new userID needs to be created.
*
* @param string
*/
public string $collectionId,

/*
* ID for the user id to be created. This user id needs to be unique within the collection.
*
* @param string
*/
public string $userId,

/*
* Idempotent token used to identify the request to createUser.
* If you use the same token with multiple createUser requests, the same response is returned.
* Use clientRequestToken to prevent the same request from being processed more than once.
*
* @param string|null
*/
public ?string $clientRequestToken = null,
) {}

/**
* @inheritDoc
*/
public function toRekognitionDataFormat(): array
{
return array_filter(
[
'CollectionId' => $this->collectionId,
'UserId' => $this->userId,
'ClientRequestToken' => $this->clientRequestToken,
],
fn ($value) => $value !== null
);
}
}
25 changes: 25 additions & 0 deletions src/Data/ResultData/CreateUserResultData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

declare(strict_types=1);

namespace MoeMizrak\Rekognition\Data\ResultData;

use Spatie\LaravelData\Data;

/**
* CreateUserResultData is for the result of the Rekognition API createUser request.
* For more info: https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-rekognition-2016-06-27.html#createuser
*
* @class CreateUserResultData
*/
final class CreateUserResultData extends Data
{
public function __construct(
/*
* Metadata about the request.
*
* @param MetaData|null
*/
public ?MetaData $metadata = null,
) {}
}
3 changes: 3 additions & 0 deletions src/Facades/Rekognition.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@

use Illuminate\Support\Facades\Facade;
use MoeMizrak\Rekognition\Data\CreateCollectionData;
use MoeMizrak\Rekognition\Data\CreateUserData;
use MoeMizrak\Rekognition\Data\DeleteCollectionData;
use MoeMizrak\Rekognition\Data\DetectLabelsData;
use MoeMizrak\Rekognition\Data\ListCollectionsData;
use MoeMizrak\Rekognition\Data\ResultData\CreateCollectionResultData;
use MoeMizrak\Rekognition\Data\ResultData\CreateUserResultData;
use MoeMizrak\Rekognition\Data\ResultData\DeleteCollectionResultData;
use MoeMizrak\Rekognition\Data\ResultData\ListCollectionsResultData;
use MoeMizrak\Rekognition\Data\ResultData\DetectLabelsResultData;
Expand All @@ -21,6 +23,7 @@
* @method static CreateCollectionResultData createCollection(CreateCollectionData $createCollectionData) Creates a collection in an AWS Region.
* @method static DeleteCollectionResultData deleteCollection(DeleteCollectionData $deleteCollectionData) Deletes the specified collection. Warning! Note that this operation removes all faces in the collection.
* @method static ListCollectionsResultData listCollections(ListCollectionsData $listCollectionsData) Lists the collections in an AWS account.
* @method static CreateUserResultData createUser(CreateUserData $createUserData) Creates a new User within a collection specified by collectionId. Takes userId as a parameter, which is a user provided id which should be unique within the collection.
*
* For more information, see https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-rekognition-2016-06-27.html
*
Expand Down
16 changes: 16 additions & 0 deletions src/Helpers/RekognitionHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use MoeMizrak\Rekognition\Data\ResultData\BoundingBoxData;
use MoeMizrak\Rekognition\Data\ResultData\CategoryData;
use MoeMizrak\Rekognition\Data\ResultData\CreateCollectionResultData;
use MoeMizrak\Rekognition\Data\ResultData\CreateUserResultData;
use MoeMizrak\Rekognition\Data\ResultData\DeleteCollectionResultData;
use MoeMizrak\Rekognition\Data\ResultData\DominantColorsData;
use MoeMizrak\Rekognition\Data\ResultData\ForegroundData;
Expand Down Expand Up @@ -97,6 +98,21 @@ public function formDetectLabelsResponse(array $response): DetectLabelsResultDat
);
}

/**
* Forms the Rekognition create user response to CreateUserResultData including metadata.
* Note: The results for this operation are always empty, only metadata is returned.
*
* @param array $response
*
* @return CreateUserResultData
*/
public function formCreateUserResponse(array $response): CreateUserResultData
{
return new CreateUserResultData(
metadata: $this->retrieveMetaData($response),
);
}

/**
* Retrieves the metadata of the response including status code, effective uri, headers, and transfer stats.
*
Expand Down
19 changes: 19 additions & 0 deletions src/RekognitionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
namespace MoeMizrak\Rekognition;

use MoeMizrak\Rekognition\Data\CreateCollectionData;
use MoeMizrak\Rekognition\Data\CreateUserData;
use MoeMizrak\Rekognition\Data\DeleteCollectionData;
use MoeMizrak\Rekognition\Data\DetectLabelsData;
use MoeMizrak\Rekognition\Data\ListCollectionsData;
use MoeMizrak\Rekognition\Data\ResultData\CreateCollectionResultData;
use MoeMizrak\Rekognition\Data\ResultData\CreateUserResultData;
use MoeMizrak\Rekognition\Data\ResultData\DeleteCollectionResultData;
use MoeMizrak\Rekognition\Data\ResultData\ListCollectionsResultData;
use MoeMizrak\Rekognition\Data\ResultData\DetectLabelsResultData;
Expand Down Expand Up @@ -86,4 +88,21 @@ public function deleteCollection(DeleteCollectionData $deleteCollectionData): De
// Form the response before returning it.
return $this->rekognitionHelper->formDeleteCollectionResponse($response->toArray());
}

/**
* Creates a new User within a collection specified by collectionId.
* Note! CreateUserData takes userId as a parameter, which is a user provided id which should be unique within the collection.
*
* @param CreateUserData $createUserData
*
* @return CreateUserResultData
*/
public function createUser(CreateUserData $createUserData): CreateUserResultData
{
// Send the request to AWS Rekognition API for creating a user.
$response = $this->client->createUser($createUserData->toRekognitionDataFormat());

// Form the response before returning it.
return $this->rekognitionHelper->formCreateUserResponse($response->toArray());
}
}
21 changes: 21 additions & 0 deletions tests/RekognitionRequestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace MoeMizrak\Rekognition\Tests;

use MoeMizrak\Rekognition\Data\CreateCollectionData;
use MoeMizrak\Rekognition\Data\CreateUserData;
use MoeMizrak\Rekognition\Data\DeleteCollectionData;
use MoeMizrak\Rekognition\Data\DetectLabelsData;
use MoeMizrak\Rekognition\Data\ImageData;
Expand Down Expand Up @@ -140,4 +141,24 @@ public function it_tests_delete_collection_request_for_given_collection_id()
$this->metaDataAssertions($response);
$this->assertEquals(200, $response->statusCode);
}

#[Test]
public function it_tests_create_user_request()
{
/* SETUP */
$methodName = 'createUser';
$collectionId = 'test_collection_id';
$userId = 'test_user_id';
$createUserData = new CreateUserData(
collectionId: $collectionId,
userId: $userId,
);
$this->mockRekognitionClient($methodName);

/* EXECUTE */
$response = Rekognition::createUser($createUserData);

/* ASSERT */
$this->metaDataAssertions($response);
}
}
16 changes: 16 additions & 0 deletions tests/Traits/MockTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,26 @@ protected function mockRekognitionResponse(string $methodName): Result
'createCollection' => $this->mockCreateCollectionBody(),
'deleteCollection' => $this->mockDeleteCollectionBody(),
'listCollections' => $this->mockListCollectionsBody(),
'createUser' => $this->mockCreateUserBody(),
default => new Result([]),
};
}

/**
* Mock the create user response body. This is the response that would be returned from the AWS Rekognition API createUser call.
* The results for this operation are always empty, it only returns metadata.
*
* @return Result
*/
private function mockCreateUserBody(): Result
{
$data = [
"@metadata" => $this->mockMetadata(),
];

return new Result($data);
}

/**
* Mock the list collections response body. This is the response that would be returned from the AWS Rekognition API listCollections call.
*
Expand Down
Loading