feat(mobile): use cached asset info if unchanged instead of downloading all assets (#1017)

* feat(mobile): use cached asset info if unchanged instead of downloading all assets

This adds an HTTP ETag to the getAllAssets endpoint and client-side support in the app.
If locally cache content is identical to the content on the server, the potentially large list of all assets does not need to be downloaded.

* use ts import instead of require
This commit is contained in:
Fynn Petersen-Frey
2022-11-26 17:16:02 +01:00
committed by GitHub
parent efa7b3ba54
commit 47f5e4134e
18 changed files with 322 additions and 201 deletions

View File

@@ -427,7 +427,7 @@ export interface AssetResponseDto {
* @type {string}
* @memberof AssetResponseDto
*/
'encodedVideoPath': string | null;
'encodedVideoPath'?: string | null;
/**
*
* @type {ExifResponseDto}
@@ -445,7 +445,7 @@ export interface AssetResponseDto {
* @type {string}
* @memberof AssetResponseDto
*/
'livePhotoVideoId': string | null;
'livePhotoVideoId'?: string | null;
}
/**
*
@@ -1729,7 +1729,7 @@ export interface UserResponseDto {
* @type {string}
* @memberof UserResponseDto
*/
'deletedAt': string | null;
'deletedAt'?: string;
}
/**
*
@@ -2788,10 +2788,11 @@ export const AssetApiAxiosParamCreator = function (configuration?: Configuration
/**
* Get all AssetEntity belong to the user
* @summary
* @param {string} [ifNoneMatch] ETag of data already cached on the client
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
getAllAssets: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
getAllAssets: async (ifNoneMatch?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/asset`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
@@ -2808,6 +2809,10 @@ export const AssetApiAxiosParamCreator = function (configuration?: Configuration
// http bearer authentication required
await setBearerAuthToObject(localVarHeaderParameter, configuration)
if (ifNoneMatch !== undefined && ifNoneMatch !== null) {
localVarHeaderParameter['if-none-match'] = String(ifNoneMatch);
}
setSearchParams(localVarUrlObj, localVarQueryParameter);
@@ -3388,11 +3393,12 @@ export const AssetApiFp = function(configuration?: Configuration) {
/**
* Get all AssetEntity belong to the user
* @summary
* @param {string} [ifNoneMatch] ETag of data already cached on the client
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async getAllAssets(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<AssetResponseDto>>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.getAllAssets(options);
async getAllAssets(ifNoneMatch?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<AssetResponseDto>>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.getAllAssets(ifNoneMatch, options);
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
},
/**
@@ -3590,11 +3596,12 @@ export const AssetApiFactory = function (configuration?: Configuration, basePath
/**
* Get all AssetEntity belong to the user
* @summary
* @param {string} [ifNoneMatch] ETag of data already cached on the client
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
getAllAssets(options?: any): AxiosPromise<Array<AssetResponseDto>> {
return localVarFp.getAllAssets(options).then((request) => request(axios, basePath));
getAllAssets(ifNoneMatch?: string, options?: any): AxiosPromise<Array<AssetResponseDto>> {
return localVarFp.getAllAssets(ifNoneMatch, options).then((request) => request(axios, basePath));
},
/**
* Get a single asset\'s information
@@ -3788,12 +3795,13 @@ export class AssetApi extends BaseAPI {
/**
* Get all AssetEntity belong to the user
* @summary
* @param {string} [ifNoneMatch] ETag of data already cached on the client
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof AssetApi
*/
public getAllAssets(options?: AxiosRequestConfig) {
return AssetApiFp(this.configuration).getAllAssets(options).then((request) => request(this.axios, this.basePath));
public getAllAssets(ifNoneMatch?: string, options?: AxiosRequestConfig) {
return AssetApiFp(this.configuration).getAllAssets(ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
}
/**