feat(web) Individual assets shared mechanism (#1317)

* Create shared link modal for individual asset

* Added API to create asset shared link

* Added viewer for individual shared link

* Added multiselection app bar

* Refactor gallery viewer to its own component

* Refactor

* Refactor

* Add and remove asset from shared link

* Fixed test

* Fixed notification card doesn't wrap

* Add check asset access when created asset shared link

* pr feedback
This commit is contained in:
Alex 2023-01-14 23:49:47 -06:00 committed by GitHub
parent b9b2b559a1
commit e9fda40b2b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
66 changed files with 2085 additions and 242 deletions

View file

@ -64,6 +64,7 @@ part 'model/check_existing_assets_dto.dart';
part 'model/check_existing_assets_response_dto.dart';
part 'model/create_album_dto.dart';
part 'model/create_album_share_link_dto.dart';
part 'model/create_assets_share_link_dto.dart';
part 'model/create_profile_image_response_dto.dart';
part 'model/create_tag_dto.dart';
part 'model/create_user_dto.dart';
@ -112,6 +113,7 @@ part 'model/thumbnail_format.dart';
part 'model/time_group_enum.dart';
part 'model/update_album_dto.dart';
part 'model/update_asset_dto.dart';
part 'model/update_assets_to_shared_link_dto.dart';
part 'model/update_tag_dto.dart';
part 'model/update_user_dto.dart';
part 'model/upsert_device_info_dto.dart';

View file

@ -16,7 +16,10 @@ class AlbumApi {
final ApiClient apiClient;
/// Performs an HTTP 'PUT /album/{albumId}/assets' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] albumId (required):
@ -48,6 +51,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [String] albumId (required):
@ -68,7 +73,10 @@ class AlbumApi {
return null;
}
/// Performs an HTTP 'PUT /album/{albumId}/users' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] albumId (required):
@ -100,6 +108,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [String] albumId (required):
@ -120,7 +130,10 @@ class AlbumApi {
return null;
}
/// Performs an HTTP 'POST /album' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [CreateAlbumDto] createAlbumDto (required):
@ -149,6 +162,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [CreateAlbumDto] createAlbumDto (required):
@ -167,7 +182,10 @@ class AlbumApi {
return null;
}
/// Performs an HTTP 'POST /album/create-shared-link' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [CreateAlbumShareLinkDto] createAlbumShareLinkDto (required):
@ -196,6 +214,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [CreateAlbumShareLinkDto] createAlbumShareLinkDto (required):
@ -214,7 +234,10 @@ class AlbumApi {
return null;
}
/// Performs an HTTP 'DELETE /album/{albumId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] albumId (required):
@ -244,6 +267,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [String] albumId (required):
@ -254,7 +279,10 @@ class AlbumApi {
}
}
/// Performs an HTTP 'GET /album/{albumId}/download' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] albumId (required):
@ -290,6 +318,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [String] albumId (required):
@ -310,7 +340,9 @@ class AlbumApi {
return null;
}
/// Performs an HTTP 'GET /album/count-by-user-id' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getAlbumCountByUserIdWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/album/count-by-user-id';
@ -336,6 +368,7 @@ class AlbumApi {
);
}
///
Future<AlbumCountResponseDto?> getAlbumCountByUserId() async {
final response = await getAlbumCountByUserIdWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -351,7 +384,10 @@ class AlbumApi {
return null;
}
/// Performs an HTTP 'GET /album/{albumId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] albumId (required):
@ -381,6 +417,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [String] albumId (required):
@ -399,7 +437,10 @@ class AlbumApi {
return null;
}
/// Performs an HTTP 'GET /album' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [bool] shared:
@ -438,6 +479,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [bool] shared:
@ -462,7 +505,10 @@ class AlbumApi {
return null;
}
/// Performs an HTTP 'DELETE /album/{albumId}/assets' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] albumId (required):
@ -494,6 +540,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [String] albumId (required):
@ -514,7 +562,10 @@ class AlbumApi {
return null;
}
/// Performs an HTTP 'DELETE /album/{albumId}/user/{userId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] albumId (required):
@ -547,6 +598,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [String] albumId (required):
@ -559,7 +612,10 @@ class AlbumApi {
}
}
/// Performs an HTTP 'PATCH /album/{albumId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] albumId (required):
@ -591,6 +647,8 @@ class AlbumApi {
);
}
///
///
/// Parameters:
///
/// * [String] albumId (required):

View file

@ -16,7 +16,10 @@ class APIKeyApi {
final ApiClient apiClient;
/// Performs an HTTP 'POST /api-key' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [APIKeyCreateDto] aPIKeyCreateDto (required):
@ -45,6 +48,8 @@ class APIKeyApi {
);
}
///
///
/// Parameters:
///
/// * [APIKeyCreateDto] aPIKeyCreateDto (required):
@ -63,7 +68,10 @@ class APIKeyApi {
return null;
}
/// Performs an HTTP 'DELETE /api-key/{id}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [num] id (required):
@ -93,6 +101,8 @@ class APIKeyApi {
);
}
///
///
/// Parameters:
///
/// * [num] id (required):
@ -103,7 +113,10 @@ class APIKeyApi {
}
}
/// Performs an HTTP 'GET /api-key/{id}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [num] id (required):
@ -133,6 +146,8 @@ class APIKeyApi {
);
}
///
///
/// Parameters:
///
/// * [num] id (required):
@ -151,7 +166,9 @@ class APIKeyApi {
return null;
}
/// Performs an HTTP 'GET /api-key' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getKeysWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/api-key';
@ -177,6 +194,7 @@ class APIKeyApi {
);
}
///
Future<List<APIKeyResponseDto>?> getKeys() async {
final response = await getKeysWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -195,7 +213,10 @@ class APIKeyApi {
return null;
}
/// Performs an HTTP 'PUT /api-key/{id}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [num] id (required):
@ -227,6 +248,8 @@ class APIKeyApi {
);
}
///
///
/// Parameters:
///
/// * [num] id (required):

View file

@ -120,7 +120,62 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'DELETE /asset' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [CreateAssetsShareLinkDto] createAssetsShareLinkDto (required):
Future<Response> createAssetsSharedLinkWithHttpInfo(CreateAssetsShareLinkDto createAssetsShareLinkDto,) async {
// ignore: prefer_const_declarations
final path = r'/asset/shared-link';
// ignore: prefer_final_locals
Object? postBody = createAssetsShareLinkDto;
final queryParams = <QueryParam>[];
final headerParams = <String, String>{};
final formParams = <String, String>{};
const contentTypes = <String>['application/json'];
return apiClient.invokeAPI(
path,
'POST',
queryParams,
postBody,
headerParams,
formParams,
contentTypes.isEmpty ? null : contentTypes.first,
);
}
///
///
/// Parameters:
///
/// * [CreateAssetsShareLinkDto] createAssetsShareLinkDto (required):
Future<SharedLinkResponseDto?> createAssetsSharedLink(CreateAssetsShareLinkDto createAssetsShareLinkDto,) async {
final response = await createAssetsSharedLinkWithHttpInfo(createAssetsShareLinkDto,);
if (response.statusCode >= HttpStatus.badRequest) {
throw ApiException(response.statusCode, await _decodeBodyBytes(response));
}
// When a remote server returns no body with a status of 204, we shall not decode it.
// At the time of writing this, `dart:convert` will throw an "Unexpected end of input"
// FormatException when trying to decode an empty string.
if (response.body.isNotEmpty && response.statusCode != HttpStatus.noContent) {
return await apiClient.deserializeAsync(await _decodeBodyBytes(response), 'SharedLinkResponseDto',) as SharedLinkResponseDto;
}
return null;
}
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [DeleteAssetDto] deleteAssetDto (required):
@ -149,6 +204,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [DeleteAssetDto] deleteAssetDto (required):
@ -170,7 +227,10 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'GET /asset/download/{assetId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] assetId (required):
@ -211,6 +271,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [String] assetId (required):
@ -233,7 +295,10 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'POST /asset/download-files' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [DownloadFilesDto] downloadFilesDto (required):
@ -262,6 +327,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [DownloadFilesDto] downloadFilesDto (required):
@ -280,7 +347,10 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'GET /asset/download-library' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [num] skip:
@ -313,6 +383,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [num] skip:
@ -445,7 +517,10 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'POST /asset/time-bucket' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [GetAssetByTimeBucketDto] getAssetByTimeBucketDto (required):
@ -474,6 +549,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [GetAssetByTimeBucketDto] getAssetByTimeBucketDto (required):
@ -495,7 +572,10 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'POST /asset/count-by-time-bucket' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [GetAssetCountByTimeBucketDto] getAssetCountByTimeBucketDto (required):
@ -524,6 +604,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [GetAssetCountByTimeBucketDto] getAssetCountByTimeBucketDto (required):
@ -542,7 +624,9 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'GET /asset/count-by-user-id' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getAssetCountByUserIdWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/asset/count-by-user-id';
@ -568,6 +652,7 @@ class AssetApi {
);
}
///
Future<AssetCountByUserIdResponseDto?> getAssetCountByUserId() async {
final response = await getAssetCountByUserIdWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -583,7 +668,9 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'GET /asset/search-terms' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getAssetSearchTermsWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/asset/search-terms';
@ -609,6 +696,7 @@ class AssetApi {
);
}
///
Future<List<String>?> getAssetSearchTerms() async {
final response = await getAssetSearchTermsWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -627,7 +715,10 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'GET /asset/thumbnail/{assetId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] assetId (required):
@ -663,6 +754,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [String] assetId (required):
@ -683,7 +776,9 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'GET /asset/curated-locations' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getCuratedLocationsWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/asset/curated-locations';
@ -709,6 +804,7 @@ class AssetApi {
);
}
///
Future<List<CuratedLocationsResponseDto>?> getCuratedLocations() async {
final response = await getCuratedLocationsWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -727,7 +823,9 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'GET /asset/curated-objects' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getCuratedObjectsWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/asset/curated-objects';
@ -753,6 +851,7 @@ class AssetApi {
);
}
///
Future<List<CuratedObjectsResponseDto>?> getCuratedObjects() async {
final response = await getCuratedObjectsWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -827,7 +926,10 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'POST /asset/search' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [SearchAssetDto] searchAssetDto (required):
@ -856,6 +958,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [SearchAssetDto] searchAssetDto (required):
@ -877,7 +981,10 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'GET /asset/file/{assetId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] assetId (required):
@ -918,6 +1025,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [String] assetId (required):
@ -997,7 +1106,62 @@ class AssetApi {
return null;
}
/// Performs an HTTP 'POST /asset/upload' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [UpdateAssetsToSharedLinkDto] updateAssetsToSharedLinkDto (required):
Future<Response> updateAssetsInSharedLinkWithHttpInfo(UpdateAssetsToSharedLinkDto updateAssetsToSharedLinkDto,) async {
// ignore: prefer_const_declarations
final path = r'/asset/shared-link';
// ignore: prefer_final_locals
Object? postBody = updateAssetsToSharedLinkDto;
final queryParams = <QueryParam>[];
final headerParams = <String, String>{};
final formParams = <String, String>{};
const contentTypes = <String>['application/json'];
return apiClient.invokeAPI(
path,
'PATCH',
queryParams,
postBody,
headerParams,
formParams,
contentTypes.isEmpty ? null : contentTypes.first,
);
}
///
///
/// Parameters:
///
/// * [UpdateAssetsToSharedLinkDto] updateAssetsToSharedLinkDto (required):
Future<SharedLinkResponseDto?> updateAssetsInSharedLink(UpdateAssetsToSharedLinkDto updateAssetsToSharedLinkDto,) async {
final response = await updateAssetsInSharedLinkWithHttpInfo(updateAssetsToSharedLinkDto,);
if (response.statusCode >= HttpStatus.badRequest) {
throw ApiException(response.statusCode, await _decodeBodyBytes(response));
}
// When a remote server returns no body with a status of 204, we shall not decode it.
// At the time of writing this, `dart:convert` will throw an "Unexpected end of input"
// FormatException when trying to decode an empty string.
if (response.body.isNotEmpty && response.statusCode != HttpStatus.noContent) {
return await apiClient.deserializeAsync(await _decodeBodyBytes(response), 'SharedLinkResponseDto',) as SharedLinkResponseDto;
}
return null;
}
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [MultipartFile] assetData (required):
@ -1036,6 +1200,8 @@ class AssetApi {
);
}
///
///
/// Parameters:
///
/// * [MultipartFile] assetData (required):

View file

@ -16,7 +16,10 @@ class AuthenticationApi {
final ApiClient apiClient;
/// Performs an HTTP 'POST /auth/admin-sign-up' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [SignUpDto] signUpDto (required):
@ -45,6 +48,8 @@ class AuthenticationApi {
);
}
///
///
/// Parameters:
///
/// * [SignUpDto] signUpDto (required):
@ -63,7 +68,10 @@ class AuthenticationApi {
return null;
}
/// Performs an HTTP 'POST /auth/change-password' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [ChangePasswordDto] changePasswordDto (required):
@ -92,6 +100,8 @@ class AuthenticationApi {
);
}
///
///
/// Parameters:
///
/// * [ChangePasswordDto] changePasswordDto (required):
@ -110,7 +120,10 @@ class AuthenticationApi {
return null;
}
/// Performs an HTTP 'POST /auth/login' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [LoginCredentialDto] loginCredentialDto (required):
@ -139,6 +152,8 @@ class AuthenticationApi {
);
}
///
///
/// Parameters:
///
/// * [LoginCredentialDto] loginCredentialDto (required):
@ -157,7 +172,9 @@ class AuthenticationApi {
return null;
}
/// Performs an HTTP 'POST /auth/logout' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> logoutWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/auth/logout';
@ -183,6 +200,7 @@ class AuthenticationApi {
);
}
///
Future<LogoutResponseDto?> logout() async {
final response = await logoutWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -198,7 +216,9 @@ class AuthenticationApi {
return null;
}
/// Performs an HTTP 'POST /auth/validateToken' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> validateAccessTokenWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/auth/validateToken';
@ -224,6 +244,7 @@ class AuthenticationApi {
);
}
///
Future<ValidateAccessTokenResponseDto?> validateAccessToken() async {
final response = await validateAccessTokenWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {

View file

@ -120,7 +120,10 @@ class DeviceInfoApi {
return null;
}
/// Performs an HTTP 'PUT /device-info' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [UpsertDeviceInfoDto] upsertDeviceInfoDto (required):
@ -149,6 +152,8 @@ class DeviceInfoApi {
);
}
///
///
/// Parameters:
///
/// * [UpsertDeviceInfoDto] upsertDeviceInfoDto (required):

View file

@ -16,7 +16,9 @@ class JobApi {
final ApiClient apiClient;
/// Performs an HTTP 'GET /jobs' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getAllJobsStatusWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/jobs';
@ -42,6 +44,7 @@ class JobApi {
);
}
///
Future<AllJobStatusResponseDto?> getAllJobsStatus() async {
final response = await getAllJobsStatusWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -57,7 +60,10 @@ class JobApi {
return null;
}
/// Performs an HTTP 'GET /jobs/{jobId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [JobId] jobId (required):
@ -87,6 +93,8 @@ class JobApi {
);
}
///
///
/// Parameters:
///
/// * [JobId] jobId (required):
@ -105,7 +113,10 @@ class JobApi {
return null;
}
/// Performs an HTTP 'PUT /jobs/{jobId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [JobId] jobId (required):
@ -137,6 +148,8 @@ class JobApi {
);
}
///
///
/// Parameters:
///
/// * [JobId] jobId (required):

View file

@ -16,7 +16,10 @@ class OAuthApi {
final ApiClient apiClient;
/// Performs an HTTP 'POST /oauth/callback' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [OAuthCallbackDto] oAuthCallbackDto (required):
@ -45,6 +48,8 @@ class OAuthApi {
);
}
///
///
/// Parameters:
///
/// * [OAuthCallbackDto] oAuthCallbackDto (required):
@ -63,7 +68,10 @@ class OAuthApi {
return null;
}
/// Performs an HTTP 'POST /oauth/config' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [OAuthConfigDto] oAuthConfigDto (required):
@ -92,6 +100,8 @@ class OAuthApi {
);
}
///
///
/// Parameters:
///
/// * [OAuthConfigDto] oAuthConfigDto (required):
@ -110,7 +120,10 @@ class OAuthApi {
return null;
}
/// Performs an HTTP 'POST /oauth/link' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [OAuthCallbackDto] oAuthCallbackDto (required):
@ -139,6 +152,8 @@ class OAuthApi {
);
}
///
///
/// Parameters:
///
/// * [OAuthCallbackDto] oAuthCallbackDto (required):
@ -157,7 +172,9 @@ class OAuthApi {
return null;
}
/// Performs an HTTP 'GET /oauth/mobile-redirect' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> mobileRedirectWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/oauth/mobile-redirect';
@ -183,6 +200,7 @@ class OAuthApi {
);
}
///
Future<void> mobileRedirect() async {
final response = await mobileRedirectWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -190,7 +208,9 @@ class OAuthApi {
}
}
/// Performs an HTTP 'POST /oauth/unlink' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> unlinkWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/oauth/unlink';
@ -216,6 +236,7 @@ class OAuthApi {
);
}
///
Future<UserResponseDto?> unlink() async {
final response = await unlinkWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {

View file

@ -16,7 +16,9 @@ class ServerInfoApi {
final ApiClient apiClient;
/// Performs an HTTP 'GET /server-info' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getServerInfoWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/server-info';
@ -42,6 +44,7 @@ class ServerInfoApi {
);
}
///
Future<ServerInfoResponseDto?> getServerInfo() async {
final response = await getServerInfoWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -57,7 +60,9 @@ class ServerInfoApi {
return null;
}
/// Performs an HTTP 'GET /server-info/version' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getServerVersionWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/server-info/version';
@ -83,6 +88,7 @@ class ServerInfoApi {
);
}
///
Future<ServerVersionReponseDto?> getServerVersion() async {
final response = await getServerVersionWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -98,7 +104,9 @@ class ServerInfoApi {
return null;
}
/// Performs an HTTP 'GET /server-info/stats' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getStatsWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/server-info/stats';
@ -124,6 +132,7 @@ class ServerInfoApi {
);
}
///
Future<ServerStatsResponseDto?> getStats() async {
final response = await getStatsWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -139,7 +148,9 @@ class ServerInfoApi {
return null;
}
/// Performs an HTTP 'GET /server-info/ping' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> pingServerWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/server-info/ping';
@ -165,6 +176,7 @@ class ServerInfoApi {
);
}
///
Future<ServerPingResponse?> pingServer() async {
final response = await pingServerWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {

View file

@ -16,7 +16,10 @@ class ShareApi {
final ApiClient apiClient;
/// Performs an HTTP 'PATCH /share/{id}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] id (required):
@ -48,6 +51,8 @@ class ShareApi {
);
}
///
///
/// Parameters:
///
/// * [String] id (required):
@ -68,7 +73,9 @@ class ShareApi {
return null;
}
/// Performs an HTTP 'GET /share' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getAllSharedLinksWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/share';
@ -94,6 +101,7 @@ class ShareApi {
);
}
///
Future<List<SharedLinkResponseDto>?> getAllSharedLinks() async {
final response = await getAllSharedLinksWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -112,7 +120,9 @@ class ShareApi {
return null;
}
/// Performs an HTTP 'GET /share/me' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getMySharedLinkWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/share/me';
@ -138,6 +148,7 @@ class ShareApi {
);
}
///
Future<SharedLinkResponseDto?> getMySharedLink() async {
final response = await getMySharedLinkWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -153,7 +164,10 @@ class ShareApi {
return null;
}
/// Performs an HTTP 'GET /share/{id}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] id (required):
@ -183,6 +197,8 @@ class ShareApi {
);
}
///
///
/// Parameters:
///
/// * [String] id (required):
@ -201,7 +217,10 @@ class ShareApi {
return null;
}
/// Performs an HTTP 'DELETE /share/{id}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] id (required):
@ -231,6 +250,8 @@ class ShareApi {
);
}
///
///
/// Parameters:
///
/// * [String] id (required):

View file

@ -16,7 +16,9 @@ class SystemConfigApi {
final ApiClient apiClient;
/// Performs an HTTP 'GET /system-config' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getConfigWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/system-config';
@ -42,6 +44,7 @@ class SystemConfigApi {
);
}
///
Future<SystemConfigDto?> getConfig() async {
final response = await getConfigWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -57,7 +60,9 @@ class SystemConfigApi {
return null;
}
/// Performs an HTTP 'GET /system-config/defaults' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getDefaultsWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/system-config/defaults';
@ -83,6 +88,7 @@ class SystemConfigApi {
);
}
///
Future<SystemConfigDto?> getDefaults() async {
final response = await getDefaultsWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -98,7 +104,9 @@ class SystemConfigApi {
return null;
}
/// Performs an HTTP 'GET /system-config/storage-template-options' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getStorageTemplateOptionsWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/system-config/storage-template-options';
@ -124,6 +132,7 @@ class SystemConfigApi {
);
}
///
Future<SystemConfigTemplateStorageOptionDto?> getStorageTemplateOptions() async {
final response = await getStorageTemplateOptionsWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -139,7 +148,10 @@ class SystemConfigApi {
return null;
}
/// Performs an HTTP 'PUT /system-config' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [SystemConfigDto] systemConfigDto (required):
@ -168,6 +180,8 @@ class SystemConfigApi {
);
}
///
///
/// Parameters:
///
/// * [SystemConfigDto] systemConfigDto (required):

View file

@ -16,7 +16,10 @@ class TagApi {
final ApiClient apiClient;
/// Performs an HTTP 'POST /tag' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [CreateTagDto] createTagDto (required):
@ -45,6 +48,8 @@ class TagApi {
);
}
///
///
/// Parameters:
///
/// * [CreateTagDto] createTagDto (required):
@ -63,7 +68,10 @@ class TagApi {
return null;
}
/// Performs an HTTP 'DELETE /tag/{id}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] id (required):
@ -93,6 +101,8 @@ class TagApi {
);
}
///
///
/// Parameters:
///
/// * [String] id (required):
@ -103,7 +113,9 @@ class TagApi {
}
}
/// Performs an HTTP 'GET /tag' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> findAllWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/tag';
@ -129,6 +141,7 @@ class TagApi {
);
}
///
Future<List<TagResponseDto>?> findAll() async {
final response = await findAllWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -147,7 +160,10 @@ class TagApi {
return null;
}
/// Performs an HTTP 'GET /tag/{id}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] id (required):
@ -177,6 +193,8 @@ class TagApi {
);
}
///
///
/// Parameters:
///
/// * [String] id (required):
@ -195,7 +213,10 @@ class TagApi {
return null;
}
/// Performs an HTTP 'PATCH /tag/{id}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] id (required):
@ -227,6 +248,8 @@ class TagApi {
);
}
///
///
/// Parameters:
///
/// * [String] id (required):

View file

@ -16,7 +16,10 @@ class UserApi {
final ApiClient apiClient;
/// Performs an HTTP 'POST /user/profile-image' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [MultipartFile] file (required):
@ -55,6 +58,8 @@ class UserApi {
);
}
///
///
/// Parameters:
///
/// * [MultipartFile] file (required):
@ -73,7 +78,10 @@ class UserApi {
return null;
}
/// Performs an HTTP 'POST /user' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [CreateUserDto] createUserDto (required):
@ -102,6 +110,8 @@ class UserApi {
);
}
///
///
/// Parameters:
///
/// * [CreateUserDto] createUserDto (required):
@ -120,7 +130,10 @@ class UserApi {
return null;
}
/// Performs an HTTP 'DELETE /user/{userId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] userId (required):
@ -150,6 +163,8 @@ class UserApi {
);
}
///
///
/// Parameters:
///
/// * [String] userId (required):
@ -168,7 +183,10 @@ class UserApi {
return null;
}
/// Performs an HTTP 'GET /user' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [bool] isAll (required):
@ -199,6 +217,8 @@ class UserApi {
);
}
///
///
/// Parameters:
///
/// * [bool] isAll (required):
@ -220,7 +240,9 @@ class UserApi {
return null;
}
/// Performs an HTTP 'GET /user/me' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
Future<Response> getMyUserInfoWithHttpInfo() async {
// ignore: prefer_const_declarations
final path = r'/user/me';
@ -246,6 +268,7 @@ class UserApi {
);
}
///
Future<UserResponseDto?> getMyUserInfo() async {
final response = await getMyUserInfoWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
@ -261,7 +284,10 @@ class UserApi {
return null;
}
/// Performs an HTTP 'GET /user/profile-image/{userId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] userId (required):
@ -291,6 +317,8 @@ class UserApi {
);
}
///
///
/// Parameters:
///
/// * [String] userId (required):
@ -309,7 +337,10 @@ class UserApi {
return null;
}
/// Performs an HTTP 'GET /user/info/{userId}' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] userId (required):
@ -339,6 +370,8 @@ class UserApi {
);
}
///
///
/// Parameters:
///
/// * [String] userId (required):
@ -357,7 +390,10 @@ class UserApi {
return null;
}
/// Performs an HTTP 'GET /user/count' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [bool] admin:
@ -390,6 +426,8 @@ class UserApi {
);
}
///
///
/// Parameters:
///
/// * [bool] admin:
@ -408,7 +446,10 @@ class UserApi {
return null;
}
/// Performs an HTTP 'POST /user/{userId}/restore' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [String] userId (required):
@ -438,6 +479,8 @@ class UserApi {
);
}
///
///
/// Parameters:
///
/// * [String] userId (required):
@ -456,7 +499,10 @@ class UserApi {
return null;
}
/// Performs an HTTP 'PUT /user' operation and returns the [Response].
///
///
/// Note: This method returns the HTTP [Response].
///
/// Parameters:
///
/// * [UpdateUserDto] updateUserDto (required):
@ -485,6 +531,8 @@ class UserApi {
);
}
///
///
/// Parameters:
///
/// * [UpdateUserDto] updateUserDto (required):

View file

@ -240,6 +240,8 @@ class ApiClient {
return CreateAlbumDto.fromJson(value);
case 'CreateAlbumShareLinkDto':
return CreateAlbumShareLinkDto.fromJson(value);
case 'CreateAssetsShareLinkDto':
return CreateAssetsShareLinkDto.fromJson(value);
case 'CreateProfileImageResponseDto':
return CreateProfileImageResponseDto.fromJson(value);
case 'CreateTagDto':
@ -336,6 +338,8 @@ class ApiClient {
return UpdateAlbumDto.fromJson(value);
case 'UpdateAssetDto':
return UpdateAssetDto.fromJson(value);
case 'UpdateAssetsToSharedLinkDto':
return UpdateAssetsToSharedLinkDto.fromJson(value);
case 'UpdateTagDto':
return UpdateTagDto.fromJson(value);
case 'UpdateUserDto':

View file

@ -0,0 +1,164 @@
//
// AUTO-GENERATED FILE, DO NOT MODIFY!
//
// @dart=2.12
// ignore_for_file: unused_element, unused_import
// ignore_for_file: always_put_required_named_parameters_first
// ignore_for_file: constant_identifier_names
// ignore_for_file: lines_longer_than_80_chars
part of openapi.api;
class CreateAssetsShareLinkDto {
/// Returns a new [CreateAssetsShareLinkDto] instance.
CreateAssetsShareLinkDto({
this.assetIds = const [],
this.expiredAt,
this.allowUpload,
this.description,
});
List<String> assetIds;
///
/// Please note: This property should have been non-nullable! Since the specification file
/// does not include a default value (using the "default:" property), however, the generated
/// source code must fall back to having a nullable type.
/// Consider adding a "default:" property in the specification file to hide this note.
///
String? expiredAt;
///
/// Please note: This property should have been non-nullable! Since the specification file
/// does not include a default value (using the "default:" property), however, the generated
/// source code must fall back to having a nullable type.
/// Consider adding a "default:" property in the specification file to hide this note.
///
bool? allowUpload;
///
/// Please note: This property should have been non-nullable! Since the specification file
/// does not include a default value (using the "default:" property), however, the generated
/// source code must fall back to having a nullable type.
/// Consider adding a "default:" property in the specification file to hide this note.
///
String? description;
@override
bool operator ==(Object other) => identical(this, other) || other is CreateAssetsShareLinkDto &&
other.assetIds == assetIds &&
other.expiredAt == expiredAt &&
other.allowUpload == allowUpload &&
other.description == description;
@override
int get hashCode =>
// ignore: unnecessary_parenthesis
(assetIds.hashCode) +
(expiredAt == null ? 0 : expiredAt!.hashCode) +
(allowUpload == null ? 0 : allowUpload!.hashCode) +
(description == null ? 0 : description!.hashCode);
@override
String toString() => 'CreateAssetsShareLinkDto[assetIds=$assetIds, expiredAt=$expiredAt, allowUpload=$allowUpload, description=$description]';
Map<String, dynamic> toJson() {
final json = <String, dynamic>{};
json[r'assetIds'] = this.assetIds;
if (this.expiredAt != null) {
json[r'expiredAt'] = this.expiredAt;
} else {
// json[r'expiredAt'] = null;
}
if (this.allowUpload != null) {
json[r'allowUpload'] = this.allowUpload;
} else {
// json[r'allowUpload'] = null;
}
if (this.description != null) {
json[r'description'] = this.description;
} else {
// json[r'description'] = null;
}
return json;
}
/// Returns a new [CreateAssetsShareLinkDto] instance and imports its values from
/// [value] if it's a [Map], null otherwise.
// ignore: prefer_constructors_over_static_methods
static CreateAssetsShareLinkDto? fromJson(dynamic value) {
if (value is Map) {
final json = value.cast<String, dynamic>();
// Ensure that the map contains the required keys.
// Note 1: the values aren't checked for validity beyond being non-null.
// Note 2: this code is stripped in release mode!
assert(() {
requiredKeys.forEach((key) {
assert(json.containsKey(key), 'Required key "CreateAssetsShareLinkDto[$key]" is missing from JSON.');
assert(json[key] != null, 'Required key "CreateAssetsShareLinkDto[$key]" has a null value in JSON.');
});
return true;
}());
return CreateAssetsShareLinkDto(
assetIds: json[r'assetIds'] is List
? (json[r'assetIds'] as List).cast<String>()
: const [],
expiredAt: mapValueOfType<String>(json, r'expiredAt'),
allowUpload: mapValueOfType<bool>(json, r'allowUpload'),
description: mapValueOfType<String>(json, r'description'),
);
}
return null;
}
static List<CreateAssetsShareLinkDto>? listFromJson(dynamic json, {bool growable = false,}) {
final result = <CreateAssetsShareLinkDto>[];
if (json is List && json.isNotEmpty) {
for (final row in json) {
final value = CreateAssetsShareLinkDto.fromJson(row);
if (value != null) {
result.add(value);
}
}
}
return result.toList(growable: growable);
}
static Map<String, CreateAssetsShareLinkDto> mapFromJson(dynamic json) {
final map = <String, CreateAssetsShareLinkDto>{};
if (json is Map && json.isNotEmpty) {
json = json.cast<String, dynamic>(); // ignore: parameter_assignments
for (final entry in json.entries) {
final value = CreateAssetsShareLinkDto.fromJson(entry.value);
if (value != null) {
map[entry.key] = value;
}
}
}
return map;
}
// maps a json object with a list of CreateAssetsShareLinkDto-objects as value to a dart map
static Map<String, List<CreateAssetsShareLinkDto>> mapListFromJson(dynamic json, {bool growable = false,}) {
final map = <String, List<CreateAssetsShareLinkDto>>{};
if (json is Map && json.isNotEmpty) {
json = json.cast<String, dynamic>(); // ignore: parameter_assignments
for (final entry in json.entries) {
final value = CreateAssetsShareLinkDto.listFromJson(entry.value, growable: growable,);
if (value != null) {
map[entry.key] = value;
}
}
}
return map;
}
/// The list of required keys that must be present in a JSON.
static const requiredKeys = <String>{
'assetIds',
};
}

View file

@ -0,0 +1,113 @@
//
// AUTO-GENERATED FILE, DO NOT MODIFY!
//
// @dart=2.12
// ignore_for_file: unused_element, unused_import
// ignore_for_file: always_put_required_named_parameters_first
// ignore_for_file: constant_identifier_names
// ignore_for_file: lines_longer_than_80_chars
part of openapi.api;
class UpdateAssetsToSharedLinkDto {
/// Returns a new [UpdateAssetsToSharedLinkDto] instance.
UpdateAssetsToSharedLinkDto({
this.assetIds = const [],
});
List<String> assetIds;
@override
bool operator ==(Object other) => identical(this, other) || other is UpdateAssetsToSharedLinkDto &&
other.assetIds == assetIds;
@override
int get hashCode =>
// ignore: unnecessary_parenthesis
(assetIds.hashCode);
@override
String toString() => 'UpdateAssetsToSharedLinkDto[assetIds=$assetIds]';
Map<String, dynamic> toJson() {
final json = <String, dynamic>{};
json[r'assetIds'] = this.assetIds;
return json;
}
/// Returns a new [UpdateAssetsToSharedLinkDto] instance and imports its values from
/// [value] if it's a [Map], null otherwise.
// ignore: prefer_constructors_over_static_methods
static UpdateAssetsToSharedLinkDto? fromJson(dynamic value) {
if (value is Map) {
final json = value.cast<String, dynamic>();
// Ensure that the map contains the required keys.
// Note 1: the values aren't checked for validity beyond being non-null.
// Note 2: this code is stripped in release mode!
assert(() {
requiredKeys.forEach((key) {
assert(json.containsKey(key), 'Required key "UpdateAssetsToSharedLinkDto[$key]" is missing from JSON.');
assert(json[key] != null, 'Required key "UpdateAssetsToSharedLinkDto[$key]" has a null value in JSON.');
});
return true;
}());
return UpdateAssetsToSharedLinkDto(
assetIds: json[r'assetIds'] is List
? (json[r'assetIds'] as List).cast<String>()
: const [],
);
}
return null;
}
static List<UpdateAssetsToSharedLinkDto>? listFromJson(dynamic json, {bool growable = false,}) {
final result = <UpdateAssetsToSharedLinkDto>[];
if (json is List && json.isNotEmpty) {
for (final row in json) {
final value = UpdateAssetsToSharedLinkDto.fromJson(row);
if (value != null) {
result.add(value);
}
}
}
return result.toList(growable: growable);
}
static Map<String, UpdateAssetsToSharedLinkDto> mapFromJson(dynamic json) {
final map = <String, UpdateAssetsToSharedLinkDto>{};
if (json is Map && json.isNotEmpty) {
json = json.cast<String, dynamic>(); // ignore: parameter_assignments
for (final entry in json.entries) {
final value = UpdateAssetsToSharedLinkDto.fromJson(entry.value);
if (value != null) {
map[entry.key] = value;
}
}
}
return map;
}
// maps a json object with a list of UpdateAssetsToSharedLinkDto-objects as value to a dart map
static Map<String, List<UpdateAssetsToSharedLinkDto>> mapListFromJson(dynamic json, {bool growable = false,}) {
final map = <String, List<UpdateAssetsToSharedLinkDto>>{};
if (json is Map && json.isNotEmpty) {
json = json.cast<String, dynamic>(); // ignore: parameter_assignments
for (final entry in json.entries) {
final value = UpdateAssetsToSharedLinkDto.listFromJson(entry.value, growable: growable,);
if (value != null) {
map[entry.key] = value;
}
}
}
return map;
}
/// The list of required keys that must be present in a JSON.
static const requiredKeys = <String>{
'assetIds',
};
}