Skip to content

Commit bc14ac1

Browse files
committed
CodemashFile.
1 parent c6c0d38 commit bc14ac1

File tree

2 files changed

+196
-0
lines changed

2 files changed

+196
-0
lines changed

src/CodemashFile.php

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
<?php
2+
3+
namespace Codemash;
4+
5+
use Codemash\Exceptions\RequestValidationException;
6+
use Codemash\Params\CodemashFileParams;
7+
use GuzzleHttp\Exception\GuzzleException;
8+
9+
class CodemashFile
10+
{
11+
private CodemashClient $client;
12+
private string $uriPrefix = 'v2/';
13+
14+
public function __construct(CodemashClient $client)
15+
{
16+
$this->client = $client;
17+
}
18+
19+
private function prepUploadFileOptions(array $params): array
20+
{
21+
if ($params['base64']) {
22+
$options = [
23+
'headers' => [
24+
'Accept' => 'application/json',
25+
'Content-Type' => 'application/json',
26+
],
27+
'body' => toJson([
28+
'base64File' => [
29+
'data' => $params['base64'],
30+
'contentType' => $params['fileType'],
31+
'fileName' => $params['fileName'],
32+
],
33+
'path' => $params['path'] ?? null,
34+
'recordId' => $params['recordId'] ?? null,
35+
'uniqueFieldName' => $params['uniqueFieldName'] ?? null,
36+
'userId' => $params['userId'] ?? null,
37+
'metaFieldName' => $params['metaFieldName'] ?? null,
38+
]),
39+
];
40+
} else {
41+
$options = [
42+
'multipart' => [
43+
[
44+
'name' => 'path',
45+
'contents' => $params['path'] ?? null,
46+
],
47+
[
48+
'name' => 'recordId',
49+
'contents' => $params['recordId'] ?? null,
50+
],
51+
[
52+
'name' => 'uniqueFieldName',
53+
'contents' => $params['uniqueFieldName'] ?? null,
54+
],
55+
[
56+
'name' => 'userId',
57+
'contents' => $params['userId'] ?? null,
58+
],
59+
[
60+
'name' => 'metaFieldName',
61+
'contents' => $params['metaFieldName'] ?? null,
62+
],
63+
[
64+
'name' => 'file',
65+
'contents' => file_get_contents($params['fileUri']),
66+
'filename' => $params['fileName'],
67+
],
68+
],
69+
];
70+
}
71+
72+
return $options;
73+
}
74+
75+
/**
76+
* @throws GuzzleException
77+
* @throws RequestValidationException
78+
*/
79+
public function uploadFile(array $params): array
80+
{
81+
$params = CodemashFileParams::prepUploadFileParams($params);
82+
83+
$options = $this->prepUploadFileOptions($params);
84+
85+
$response = $this->client->request('POST', $this->uriPrefix . 'files', $options);
86+
87+
return $response['result'];
88+
}
89+
90+
/**
91+
* @throws GuzzleException
92+
* @throws RequestValidationException
93+
*/
94+
public function uploadRecordFile(array $params): array
95+
{
96+
$params = CodemashFileParams::prepUploadRecordFileParams($params);
97+
98+
$options = $this->prepUploadFileOptions($params);
99+
100+
$response = $this->client->request('POST', $this->uriPrefix . 'db/' . $params['collectionName'] . '/files', $options);
101+
102+
return $response['result'];
103+
}
104+
105+
/**
106+
* @throws GuzzleException
107+
* @throws RequestValidationException
108+
*/
109+
public function uploadUserFile(array $params): array
110+
{
111+
$params = CodemashFileParams::prepUploadUserFileParams($params);
112+
113+
$options = $this->prepUploadFileOptions($params);
114+
115+
$response = $this->client->request('POST', $this->uriPrefix . 'membership/users/files', $options);
116+
117+
return $response['result'];
118+
}
119+
}

src/Params/CodemashFileParams.php

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
namespace Codemash\Params;
4+
5+
use Codemash\Exceptions\RequestValidationException;
6+
7+
class CodemashFileParams
8+
{
9+
/**
10+
* @throws RequestValidationException
11+
*/
12+
public static function prepUploadFileParams(array $params): array
13+
{
14+
$required = ['fileName'];
15+
16+
if (empty($params['base64'])) {
17+
$required[] = 'fileUri';
18+
}
19+
20+
validateRequiredRequestParams($required, $params);
21+
22+
return [
23+
'base64' => $params['base64'] ?? null,
24+
'fileUri' => $params['fileUri'] ?? null,
25+
'fileName' => $params['fileName'],
26+
'fileType' => $params['fileType'] ?? null,
27+
'path' => $params['path'] ?? null,
28+
];
29+
}
30+
31+
/**
32+
* @throws RequestValidationException
33+
*/
34+
public static function prepUploadRecordFileParams(array $params): array
35+
{
36+
$required = ['collectionName', 'recordId', 'uniqueFieldName', 'fileName'];
37+
38+
if (empty($params['base64'])) {
39+
$required[] = 'fileUri';
40+
}
41+
42+
validateRequiredRequestParams($required, $params);
43+
44+
return [
45+
'collectionName' => strtolower($params['collectionName']),
46+
'recordId' => $params['recordId'],
47+
'uniqueFieldName' => $params['uniqueFieldName'],
48+
'base64' => $params['base64'] ?? null,
49+
'fileUri' => $params['fileUri'] ?? null,
50+
'fileName' => $params['fileName'],
51+
'fileType' => $params['fileType'] ?? null,
52+
];
53+
}
54+
55+
/**
56+
* @throws RequestValidationException
57+
*/
58+
public static function prepUploadUserFileParams(array $params): array
59+
{
60+
$required = ['userId', 'metaFieldName', 'fileName'];
61+
62+
if (empty($params['base64'])) {
63+
$required[] = 'fileUri';
64+
}
65+
66+
validateRequiredRequestParams($required, $params);
67+
68+
return [
69+
'userId' => $params['userId'],
70+
'metaFieldName' => $params['metaFieldName'],
71+
'base64' => $params['base64'] ?? null,
72+
'fileUri' => $params['fileUri'] ?? null,
73+
'fileName' => $params['fileName'],
74+
'fileType' => $params['fileType'] ?? null,
75+
];
76+
}
77+
}

0 commit comments

Comments
 (0)