Add ContributorCountResponseDto and expose contributorCounts

on AlbumResponseDto in OpenAPI spec. Regenerate TypeScript SDK
and mobile OpenAPI clients to include new types.

No breaking changes; fields are additive.
This commit is contained in:
Chaoscontrol 2025-10-02 17:50:31 +01:00 committed by Chaoscontrol
parent 5b333fc03e
commit bd87d2bd08
7 changed files with 145 additions and 1 deletions

View file

@ -359,6 +359,7 @@ Class | Method | HTTP request | Description
- [CheckExistingAssetsDto](doc//CheckExistingAssetsDto.md) - [CheckExistingAssetsDto](doc//CheckExistingAssetsDto.md)
- [CheckExistingAssetsResponseDto](doc//CheckExistingAssetsResponseDto.md) - [CheckExistingAssetsResponseDto](doc//CheckExistingAssetsResponseDto.md)
- [Colorspace](doc//Colorspace.md) - [Colorspace](doc//Colorspace.md)
- [ContributorCountResponseDto](doc//ContributorCountResponseDto.md)
- [CreateAlbumDto](doc//CreateAlbumDto.md) - [CreateAlbumDto](doc//CreateAlbumDto.md)
- [CreateLibraryDto](doc//CreateLibraryDto.md) - [CreateLibraryDto](doc//CreateLibraryDto.md)
- [CreateProfileImageResponseDto](doc//CreateProfileImageResponseDto.md) - [CreateProfileImageResponseDto](doc//CreateProfileImageResponseDto.md)

View file

@ -130,6 +130,7 @@ part 'model/change_password_dto.dart';
part 'model/check_existing_assets_dto.dart'; part 'model/check_existing_assets_dto.dart';
part 'model/check_existing_assets_response_dto.dart'; part 'model/check_existing_assets_response_dto.dart';
part 'model/colorspace.dart'; part 'model/colorspace.dart';
part 'model/contributor_count_response_dto.dart';
part 'model/create_album_dto.dart'; part 'model/create_album_dto.dart';
part 'model/create_library_dto.dart'; part 'model/create_library_dto.dart';
part 'model/create_profile_image_response_dto.dart'; part 'model/create_profile_image_response_dto.dart';

View file

@ -314,6 +314,8 @@ class ApiClient {
return CheckExistingAssetsResponseDto.fromJson(value); return CheckExistingAssetsResponseDto.fromJson(value);
case 'Colorspace': case 'Colorspace':
return ColorspaceTypeTransformer().decode(value); return ColorspaceTypeTransformer().decode(value);
case 'ContributorCountResponseDto':
return ContributorCountResponseDto.fromJson(value);
case 'CreateAlbumDto': case 'CreateAlbumDto':
return CreateAlbumDto.fromJson(value); return CreateAlbumDto.fromJson(value);
case 'CreateLibraryDto': case 'CreateLibraryDto':

View file

@ -18,6 +18,7 @@ class AlbumResponseDto {
this.albumUsers = const [], this.albumUsers = const [],
required this.assetCount, required this.assetCount,
this.assets = const [], this.assets = const [],
this.contributorCounts = const [],
required this.createdAt, required this.createdAt,
required this.description, required this.description,
this.endDate, this.endDate,
@ -43,6 +44,8 @@ class AlbumResponseDto {
List<AssetResponseDto> assets; List<AssetResponseDto> assets;
List<ContributorCountResponseDto> contributorCounts;
DateTime createdAt; DateTime createdAt;
String description; String description;
@ -100,6 +103,7 @@ class AlbumResponseDto {
_deepEquality.equals(other.albumUsers, albumUsers) && _deepEquality.equals(other.albumUsers, albumUsers) &&
other.assetCount == assetCount && other.assetCount == assetCount &&
_deepEquality.equals(other.assets, assets) && _deepEquality.equals(other.assets, assets) &&
_deepEquality.equals(other.contributorCounts, contributorCounts) &&
other.createdAt == createdAt && other.createdAt == createdAt &&
other.description == description && other.description == description &&
other.endDate == endDate && other.endDate == endDate &&
@ -122,6 +126,7 @@ class AlbumResponseDto {
(albumUsers.hashCode) + (albumUsers.hashCode) +
(assetCount.hashCode) + (assetCount.hashCode) +
(assets.hashCode) + (assets.hashCode) +
(contributorCounts.hashCode) +
(createdAt.hashCode) + (createdAt.hashCode) +
(description.hashCode) + (description.hashCode) +
(endDate == null ? 0 : endDate!.hashCode) + (endDate == null ? 0 : endDate!.hashCode) +
@ -137,7 +142,7 @@ class AlbumResponseDto {
(updatedAt.hashCode); (updatedAt.hashCode);
@override @override
String toString() => 'AlbumResponseDto[albumName=$albumName, albumThumbnailAssetId=$albumThumbnailAssetId, albumUsers=$albumUsers, assetCount=$assetCount, assets=$assets, createdAt=$createdAt, description=$description, endDate=$endDate, hasSharedLink=$hasSharedLink, id=$id, isActivityEnabled=$isActivityEnabled, lastModifiedAssetTimestamp=$lastModifiedAssetTimestamp, order=$order, owner=$owner, ownerId=$ownerId, shared=$shared, startDate=$startDate, updatedAt=$updatedAt]'; String toString() => 'AlbumResponseDto[albumName=$albumName, albumThumbnailAssetId=$albumThumbnailAssetId, albumUsers=$albumUsers, assetCount=$assetCount, assets=$assets, contributorCounts=$contributorCounts, createdAt=$createdAt, description=$description, endDate=$endDate, hasSharedLink=$hasSharedLink, id=$id, isActivityEnabled=$isActivityEnabled, lastModifiedAssetTimestamp=$lastModifiedAssetTimestamp, order=$order, owner=$owner, ownerId=$ownerId, shared=$shared, startDate=$startDate, updatedAt=$updatedAt]';
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final json = <String, dynamic>{}; final json = <String, dynamic>{};
@ -150,6 +155,7 @@ class AlbumResponseDto {
json[r'albumUsers'] = this.albumUsers; json[r'albumUsers'] = this.albumUsers;
json[r'assetCount'] = this.assetCount; json[r'assetCount'] = this.assetCount;
json[r'assets'] = this.assets; json[r'assets'] = this.assets;
json[r'contributorCounts'] = this.contributorCounts;
json[r'createdAt'] = this.createdAt.toUtc().toIso8601String(); json[r'createdAt'] = this.createdAt.toUtc().toIso8601String();
json[r'description'] = this.description; json[r'description'] = this.description;
if (this.endDate != null) { if (this.endDate != null) {
@ -196,6 +202,7 @@ class AlbumResponseDto {
albumUsers: AlbumUserResponseDto.listFromJson(json[r'albumUsers']), albumUsers: AlbumUserResponseDto.listFromJson(json[r'albumUsers']),
assetCount: mapValueOfType<int>(json, r'assetCount')!, assetCount: mapValueOfType<int>(json, r'assetCount')!,
assets: AssetResponseDto.listFromJson(json[r'assets']), assets: AssetResponseDto.listFromJson(json[r'assets']),
contributorCounts: ContributorCountResponseDto.listFromJson(json[r'contributorCounts']),
createdAt: mapDateTime(json, r'createdAt', r'')!, createdAt: mapDateTime(json, r'createdAt', r'')!,
description: mapValueOfType<String>(json, r'description')!, description: mapValueOfType<String>(json, r'description')!,
endDate: mapDateTime(json, r'endDate', r''), endDate: mapDateTime(json, r'endDate', r''),

View file

@ -0,0 +1,107 @@
//
// AUTO-GENERATED FILE, DO NOT MODIFY!
//
// @dart=2.18
// 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 ContributorCountResponseDto {
/// Returns a new [ContributorCountResponseDto] instance.
ContributorCountResponseDto({
required this.assetCount,
required this.userId,
});
int assetCount;
String userId;
@override
bool operator ==(Object other) => identical(this, other) || other is ContributorCountResponseDto &&
other.assetCount == assetCount &&
other.userId == userId;
@override
int get hashCode =>
// ignore: unnecessary_parenthesis
(assetCount.hashCode) +
(userId.hashCode);
@override
String toString() => 'ContributorCountResponseDto[assetCount=$assetCount, userId=$userId]';
Map<String, dynamic> toJson() {
final json = <String, dynamic>{};
json[r'assetCount'] = this.assetCount;
json[r'userId'] = this.userId;
return json;
}
/// Returns a new [ContributorCountResponseDto] instance and imports its values from
/// [value] if it's a [Map], null otherwise.
// ignore: prefer_constructors_over_static_methods
static ContributorCountResponseDto? fromJson(dynamic value) {
upgradeDto(value, "ContributorCountResponseDto");
if (value is Map) {
final json = value.cast<String, dynamic>();
return ContributorCountResponseDto(
assetCount: mapValueOfType<int>(json, r'assetCount')!,
userId: mapValueOfType<String>(json, r'userId')!,
);
}
return null;
}
static List<ContributorCountResponseDto> listFromJson(dynamic json, {bool growable = false,}) {
final result = <ContributorCountResponseDto>[];
if (json is List && json.isNotEmpty) {
for (final row in json) {
final value = ContributorCountResponseDto.fromJson(row);
if (value != null) {
result.add(value);
}
}
}
return result.toList(growable: growable);
}
static Map<String, ContributorCountResponseDto> mapFromJson(dynamic json) {
final map = <String, ContributorCountResponseDto>{};
if (json is Map && json.isNotEmpty) {
json = json.cast<String, dynamic>(); // ignore: parameter_assignments
for (final entry in json.entries) {
final value = ContributorCountResponseDto.fromJson(entry.value);
if (value != null) {
map[entry.key] = value;
}
}
}
return map;
}
// maps a json object with a list of ContributorCountResponseDto-objects as value to a dart map
static Map<String, List<ContributorCountResponseDto>> mapListFromJson(dynamic json, {bool growable = false,}) {
final map = <String, List<ContributorCountResponseDto>>{};
if (json is Map && json.isNotEmpty) {
// ignore: parameter_assignments
json = json.cast<String, dynamic>();
for (final entry in json.entries) {
map[entry.key] = ContributorCountResponseDto.listFromJson(entry.value, growable: growable,);
}
}
return map;
}
/// The list of required keys that must be present in a JSON.
static const requiredKeys = <String>{
'assetCount',
'userId',
};
}

View file

@ -10096,6 +10096,12 @@
}, },
"type": "array" "type": "array"
}, },
"contributorCounts": {
"items": {
"$ref": "#/components/schemas/ContributorCountResponseDto"
},
"type": "array"
},
"createdAt": { "createdAt": {
"format": "date-time", "format": "date-time",
"type": "string" "type": "string"
@ -11471,6 +11477,21 @@
], ],
"type": "string" "type": "string"
}, },
"ContributorCountResponseDto": {
"properties": {
"assetCount": {
"type": "integer"
},
"userId": {
"type": "string"
}
},
"required": [
"assetCount",
"userId"
],
"type": "object"
},
"CreateAlbumDto": { "CreateAlbumDto": {
"properties": { "properties": {
"albumName": { "albumName": {

View file

@ -356,12 +356,17 @@ export type AssetResponseDto = {
updatedAt: string; updatedAt: string;
visibility: AssetVisibility; visibility: AssetVisibility;
}; };
export type ContributorCountResponseDto = {
assetCount: number;
userId: string;
};
export type AlbumResponseDto = { export type AlbumResponseDto = {
albumName: string; albumName: string;
albumThumbnailAssetId: string | null; albumThumbnailAssetId: string | null;
albumUsers: AlbumUserResponseDto[]; albumUsers: AlbumUserResponseDto[];
assetCount: number; assetCount: number;
assets: AssetResponseDto[]; assets: AssetResponseDto[];
contributorCounts?: ContributorCountResponseDto[];
createdAt: string; createdAt: string;
description: string; description: string;
endDate?: string; endDate?: string;