🐛 Dozens of microservices releated changes

This commit is contained in:
2025-07-19 12:10:23 +08:00
parent 4499d4ec8e
commit 903008d397
9 changed files with 83 additions and 45 deletions

View File

@@ -39,7 +39,7 @@ class WebFeedNotifier
try {
final client = ref.read(apiClientProvider);
final response = await client.get(
'/publishers/${arg.pubName}/feeds/${arg.feedId}',
'/sphere/publishers/${arg.pubName}/feeds/${arg.feedId}',
);
return SnWebFeed.fromJson(response.data);
} catch (e) {
@@ -51,7 +51,7 @@ class WebFeedNotifier
state = const AsyncValue.loading();
try {
final client = ref.read(apiClientProvider);
final url = '/publishers/${feed.publisherId}/feeds';
final url = '/sphere/publishers/${feed.publisherId}/feeds';
final response =
feed.id.isEmpty
@@ -98,7 +98,7 @@ class WebFeedNotifier
try {
final client = ref.read(apiClientProvider);
await client.post(
'/publishers/${arg.pubName}/feeds/$feedId/scrap',
'/sphere/publishers/${arg.pubName}/feeds/$feedId/scrap',
options: Options(
sendTimeout: const Duration(seconds: 60),
receiveTimeout: const Duration(seconds: 180),
@@ -107,7 +107,7 @@ class WebFeedNotifier
// Reload the feed
final response = await client.get(
'/publishers/${arg.pubName}/feeds/$feedId',
'/sphere/publishers/${arg.pubName}/feeds/$feedId',
);
state = AsyncValue.data(SnWebFeed.fromJson(response.data));
} catch (error, stackTrace) {

View File

@@ -83,7 +83,7 @@ class PublisherMemberListNotifier extends _$PublisherMemberListNotifier
final offset = cursor != null ? int.parse(cursor) : 0;
final response = await apiClient.get(
'/publishers/$uname/members',
'/sphere/publishers/$uname/members',
queryParameters: {'offset': offset, 'take': _pageSize},
);
@@ -143,14 +143,19 @@ class CreatorHubScreen extends HookConsumerWidget {
);
void updatePublisher() {
context.pushNamed('creatorEdit', pathParameters: {'name': currentPublisher.value!.name}).then((
value,
) async {
if (value == null) return;
final data = await ref.refresh(publishersManagedProvider.future);
currentPublisher.value =
data.where((e) => e.id == currentPublisher.value!.id).firstOrNull;
});
context
.pushNamed(
'creatorEdit',
pathParameters: {'name': currentPublisher.value!.name},
)
.then((value) async {
if (value == null) return;
final data = await ref.refresh(publishersManagedProvider.future);
currentPublisher.value =
data
.where((e) => e.id == currentPublisher.value!.id)
.firstOrNull;
});
}
void deletePublisher() {
@@ -350,7 +355,12 @@ class CreatorHubScreen extends HookConsumerWidget {
horizontal: 24,
),
onTap: () {
context.pushNamed('creatorStickers', pathParameters: {'name': currentPublisher.value!.name});
context.pushNamed(
'creatorStickers',
pathParameters: {
'name': currentPublisher.value!.name,
},
);
},
),
ListTile(
@@ -362,7 +372,12 @@ class CreatorHubScreen extends HookConsumerWidget {
horizontal: 24,
),
onTap: () {
context.pushNamed('creatorPosts', pathParameters: {'name': currentPublisher.value!.name});
context.pushNamed(
'creatorPosts',
pathParameters: {
'name': currentPublisher.value!.name,
},
);
},
),
ListTile(

View File

@@ -28,13 +28,16 @@ class StickersScreen extends HookConsumerWidget {
actions: [
IconButton(
onPressed: () {
context.pushNamed('creatorStickerPackNew', queryParameters: {'pubName': pubName}).then((
value,
) {
if (value != null) {
ref.invalidate(stickerPacksNotifierProvider(pubName));
}
});
context
.pushNamed(
'creatorStickerPackNew',
queryParameters: {'pubName': pubName},
)
.then((value) {
if (value != null) {
ref.invalidate(stickerPacksNotifierProvider(pubName));
}
});
},
icon: const Icon(Symbols.add_circle),
),
@@ -71,7 +74,10 @@ class SliverStickerPacksList extends HookConsumerWidget {
subtitle: Text(sticker.description),
trailing: const Icon(Symbols.chevron_right),
onTap: () {
context.pushNamed('creatorStickerPackDetail', pathParameters: {'pubName': pubName, 'packId': sticker.id});
context.pushNamed(
'creatorStickerPackDetail',
pathParameters: {'pubName': pubName, 'packId': sticker.id},
);
},
);
},
@@ -99,7 +105,7 @@ class StickerPacksNotifier extends _$StickerPacksNotifier
try {
final response = await client.get(
'/stickers',
'/sphere/stickers',
queryParameters: {
'offset': offset,
'take': _pageSize,
@@ -129,7 +135,7 @@ class StickerPacksNotifier extends _$StickerPacksNotifier
Future<SnStickerPack?> stickerPack(Ref ref, String? packId) async {
if (packId == null) return null;
final apiClient = ref.watch(apiClientProvider);
final resp = await apiClient.get('/stickers/$packId');
final resp = await apiClient.get('/sphere/stickers/$packId');
return SnStickerPack.fromJson(resp.data);
}
@@ -175,7 +181,7 @@ class EditStickerPacksScreen extends HookConsumerWidget {
submitting.value = true;
final apiClient = ref.watch(apiClientProvider);
final resp = await apiClient.request(
'/stickers',
'/sphere/stickers',
data: {
'name': nameController.text,
'description': descriptionController.text,

View File

@@ -25,14 +25,14 @@ part 'hub.g.dart';
Future<DeveloperStats?> developerStats(Ref ref, String? uname) async {
if (uname == null) return null;
final apiClient = ref.watch(apiClientProvider);
final resp = await apiClient.get('/developers/$uname/stats');
final resp = await apiClient.get('/sphere/developers/$uname/stats');
return DeveloperStats.fromJson(resp.data);
}
@riverpod
Future<List<SnPublisher>> developers(Ref ref) async {
final client = ref.watch(apiClientProvider);
final resp = await client.get('/developers');
final resp = await client.get('/sphere/developers');
return resp.data
.map((e) => SnPublisher.fromJson(e))
.cast<SnPublisher>()
@@ -243,7 +243,12 @@ class DeveloperHubScreen extends HookConsumerWidget {
horizontal: 24,
),
onTap: () {
context.pushNamed('developerApps', pathParameters: {'name': currentDeveloper.value!.name});
context.pushNamed(
'developerApps',
pathParameters: {
'name': currentDeveloper.value!.name,
},
);
},
),
],
@@ -334,7 +339,7 @@ class _DeveloperEnrollmentSheet extends HookConsumerWidget {
Future<void> enroll(SnPublisher publisher) async {
try {
final client = ref.read(apiClientProvider);
await client.post('/developers/${publisher.name}/enroll');
await client.post('/sphere/developers/${publisher.name}/enroll');
if (context.mounted) {
Navigator.pop(context, true);
}

View File

@@ -166,7 +166,7 @@ class RealmDetailScreen extends HookConsumerWidget {
apiClientProvider,
);
await apiClient.post(
'/realms/$slug/members/me',
'/sphere/realms/$slug/members/me',
);
ref.invalidate(
realmIdentityProvider(slug),
@@ -213,7 +213,10 @@ class RealmDetailScreen extends HookConsumerWidget {
return ChatRoomListTile(
room: rooms[index],
onTap: () {
context.pushNamed('chatRoom', pathParameters: {'id': rooms[index].id});
context.pushNamed(
'chatRoom',
pathParameters: {'id': rooms[index].id},
);
},
);
}, childCount: rooms.length),
@@ -251,7 +254,10 @@ class _RealmActionMenu extends HookConsumerWidget {
if (isModerator)
PopupMenuItem(
onTap: () {
context.pushReplacement('/sphere/realms/$realmSlug/edit');
context.pushReplacementNamed(
'realmEdit',
pathParameters: {'slug': realmSlug},
);
},
child: Row(
children: [
@@ -319,7 +325,7 @@ class _RealmActionMenu extends HookConsumerWidget {
if (confirm) {
final client = ref.watch(apiClientProvider);
client.delete(
'/realms/$realmSlug/members/me',
'/sphere/realms/$realmSlug/members/me',
);
ref.invalidate(realmsJoinedProvider);
if (context.mounted) {
@@ -389,7 +395,7 @@ class RealmMemberListNotifier extends _$RealmMemberListNotifier
final offset = cursor != null ? int.parse(cursor) : 0;
final response = await apiClient.get(
'/realms/$realmSlug/members',
'/sphere/realms/$realmSlug/members',
queryParameters: {'offset': offset, 'take': _pageSize},
);
@@ -432,7 +438,7 @@ class RealmMemberNotifier extends StateNotifier<RealmMemberState> {
try {
final response = await _apiClient.get(
'/realms/$realmSlug/members',
'/sphere/realms/$realmSlug/members',
queryParameters: {'offset': offset, 'take': take},
);
@@ -487,7 +493,7 @@ class _RealmMemberListSheet extends HookConsumerWidget {
try {
final apiClient = ref.watch(apiClientProvider);
await apiClient.post(
'/realms/invites/$realmSlug',
'/sphere/realms/invites/$realmSlug',
data: {'related_user_id': result.id, 'role': 0},
);
// Refresh both providers
@@ -619,7 +625,7 @@ class _RealmMemberListSheet extends HookConsumerWidget {
apiClientProvider,
);
await apiClient.delete(
'/realms/$realmSlug/members/${member.accountId}',
'/sphere/realms/$realmSlug/members/${member.accountId}',
);
// Refresh both providers
memberNotifier.reset();
@@ -769,7 +775,7 @@ class _RealmMemberRoleSheet extends HookConsumerWidget {
final apiClient = ref.read(apiClientProvider);
await apiClient.patch(
'/realms/$realmSlug/members/${member.accountId}/role',
'/sphere/realms/$realmSlug/members/${member.accountId}/role',
data: newRole,
);

View File

@@ -108,7 +108,10 @@ class RealmListScreen extends HookConsumerWidget {
title: Text(value[item].name),
subtitle: Text(value[item].description),
onTap: () {
context.pushNamed('realmDetail', pathParameters: {'slug': value[item].slug});
context.pushNamed(
'realmDetail',
pathParameters: {'slug': value[item].slug},
);
},
contentPadding: const EdgeInsets.only(
left: 16,
@@ -253,7 +256,7 @@ class EditRealmScreen extends HookConsumerWidget {
try {
final client = ref.watch(apiClientProvider);
final resp = await client.request(
slug == null ? '/realms' : '/realms/$slug',
'/sphere${slug == null ? '/realms' : '/realms/$slug'}',
data: {
'slug': slugController.text,
'name': nameController.text,

View File

@@ -51,7 +51,7 @@ class TransactionListNotifier extends _$TransactionListNotifier
final queryParams = {'offset': offset, 'take': _pageSize};
final response = await client.get(
'/wallets/transactions',
'/id/wallets/transactions',
queryParameters: queryParams,
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
@@ -110,7 +110,7 @@ class WalletScreen extends HookConsumerWidget {
),
],
),
);
).center();
}
return Column(

View File

@@ -27,7 +27,10 @@ class CloudFileWidget extends ConsumerWidget {
final serverUrl = ref.watch(serverUrlProvider);
final uri = '$serverUrl/drive/files/${item.id}';
var ratio = double.parse(item.fileMeta?['ratio'] ?? 1);
var ratio =
item.fileMeta?['ratio'] is num
? item.fileMeta!['ratio'].toDouble()
: double.parse(item.fileMeta?['ratio'] ?? 1);
if (ratio == 0) ratio = 1.0;
final content = switch (item.mimeType?.split('/').firstOrNull) {
"image" => AspectRatio(

View File

@@ -34,7 +34,7 @@ class RealmListNotifier extends _$RealmListNotifier
};
final response = await client.get(
'/discovery/realms',
'/sphere/discovery/realms',
queryParameters: queryParams,
);
final total = int.parse(response.headers.value('X-Total') ?? '0');