Skip to content

Commit edf4fea

Browse files
committed
feat: wallet coins filter
1 parent 93fe436 commit edf4fea

22 files changed

Lines changed: 643 additions & 44 deletions
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading

drift_schemas/wallets_database/drift_schema_v24.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// SPDX-License-Identifier: ice License 1.0
2+
3+
import 'package:freezed_annotation/freezed_annotation.dart';
4+
5+
part 'tokenized_community_token_type.f.g.dart';
6+
7+
@JsonEnum(alwaysCreate: true)
8+
enum TokenizedCommunityTokenType {
9+
@JsonValue('profile')
10+
tokenTypeProfile,
11+
12+
@JsonValue('post')
13+
tokenTypePost,
14+
15+
@JsonValue('article')
16+
tokenTypeArticle,
17+
18+
@JsonValue('video')
19+
tokenTypeVideo,
20+
21+
@JsonValue('xcom')
22+
tokenTypeXcom,
23+
24+
@JsonValue('undefined')
25+
tokenTypeUndefined;
26+
27+
factory TokenizedCommunityTokenType.fromJson(String json) =>
28+
_$TokenizedCommunityTokenTypeEnumMap.map((key, value) => MapEntry(value, key))[json] ??
29+
TokenizedCommunityTokenType.tokenTypeUndefined;
30+
31+
String toJson() => _$TokenizedCommunityTokenTypeEnumMap[this]!;
32+
}

lib/app/features/tokenized_communities/providers/community_token_trade_notifier_provider.r.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,9 +321,7 @@ class CommunityTokenTradeNotifier extends _$CommunityTokenTradeNotifier {
321321

322322
await coinsRepository.updateCoins(
323323
[
324-
coinData.toDB(
325-
isCreatorToken: true,
326-
),
324+
coinData.toDB(),
327325
],
328326
);
329327

lib/app/features/wallets/data/database/tables/coins_table.d.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ class CoinsTable extends Table {
2323
Column<Duration> get syncFrequency => customType(const DurationType())();
2424
BoolColumn get native => boolean()();
2525
BoolColumn get prioritized => boolean()();
26-
BoolColumn get isCreatorToken => boolean()();
26+
TextColumn get tokenizedCommunityExternalAddress => text().nullable()();
27+
TextColumn get tokenizedCommunityTokenType => text().nullable()();
2728

2829
@override
2930
Set<Column> get primaryKey => {id};

lib/app/features/wallets/data/database/wallets_database.m.dart

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class WalletsDatabase extends _$WalletsDatabase {
7171
final String? appGroupId;
7272

7373
@override
74-
int get schemaVersion => 23;
74+
int get schemaVersion => 24;
7575

7676
/// Opens a connection to the database with the given pubkey
7777
/// Uses app group container for iOS extensions if appGroupId is provided
@@ -285,6 +285,40 @@ class WalletsDatabase extends _$WalletsDatabase {
285285
);
286286
}
287287
},
288+
from23To24: (Migrator m, Schema24 schema) async {
289+
// Remove deprecated is_creator_token column if present
290+
final isCreatorTokenExists = await isColumnExists(
291+
tableName: schema.coinsTable.actualTableName,
292+
columnName: 'is_creator_token',
293+
);
294+
if (isCreatorTokenExists) {
295+
await m.dropColumn(schema.coinsTable, 'is_creator_token');
296+
}
297+
298+
// Add tokenized_community_external_address column if missing
299+
final tokenizedCommunityExternalAddressExists = await isColumnExists(
300+
tableName: schema.coinsTable.actualTableName,
301+
columnName: 'tokenized_community_external_address',
302+
);
303+
if (!tokenizedCommunityExternalAddressExists) {
304+
await m.addColumn(
305+
schema.coinsTable,
306+
schema.coinsTable.tokenizedCommunityExternalAddress,
307+
);
308+
}
309+
310+
// Add tokenized_community_token_type column if missing
311+
final tokenizedCommunityTokenTypeExists = await isColumnExists(
312+
tableName: schema.coinsTable.actualTableName,
313+
columnName: 'tokenized_community_token_type',
314+
);
315+
if (!tokenizedCommunityTokenTypeExists) {
316+
await m.addColumn(
317+
schema.coinsTable,
318+
schema.coinsTable.tokenizedCommunityTokenType,
319+
);
320+
}
321+
},
288322
),
289323
);
290324
}

lib/app/features/wallets/data/database/wallets_database.m.steps.dart

Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4461,6 +4461,241 @@ i1.GeneratedColumn<bool> _column_75(String aliasedName) =>
44614461
type: i1.DriftSqlType.bool,
44624462
defaultConstraints:
44634463
i1.GeneratedColumn.constraintIsAlways('CHECK ("is_creator_token" IN (0, 1))'));
4464+
4465+
final class Schema24 extends i0.VersionedSchema {
4466+
Schema24({required super.database}) : super(version: 24);
4467+
@override
4468+
late final List<i1.DatabaseSchemaEntity> entities = [
4469+
coinsTable,
4470+
syncCoinsTable,
4471+
networksTable,
4472+
transactionsTableV2,
4473+
transactionVisibilityStatusTable,
4474+
cryptoWalletsTable,
4475+
fundsRequestsTable,
4476+
nftsTable,
4477+
];
4478+
late final Shape23 coinsTable = Shape23(
4479+
source: i0.VersionedTable(
4480+
entityName: 'coins_table',
4481+
withoutRowId: false,
4482+
isStrict: false,
4483+
tableConstraints: [
4484+
'PRIMARY KEY(id)',
4485+
],
4486+
columns: [
4487+
_column_0,
4488+
_column_1,
4489+
_column_2,
4490+
_column_3,
4491+
_column_4,
4492+
_column_5,
4493+
_column_6,
4494+
_column_7,
4495+
_column_8,
4496+
_column_9,
4497+
_column_54,
4498+
_column_57,
4499+
_column_76,
4500+
_column_77,
4501+
],
4502+
attachedDatabase: database,
4503+
),
4504+
alias: null);
4505+
late final Shape1 syncCoinsTable = Shape1(
4506+
source: i0.VersionedTable(
4507+
entityName: 'sync_coins_table',
4508+
withoutRowId: false,
4509+
isStrict: false,
4510+
tableConstraints: [
4511+
'PRIMARY KEY(coin_id)',
4512+
],
4513+
columns: [
4514+
_column_10,
4515+
_column_11,
4516+
],
4517+
attachedDatabase: database,
4518+
),
4519+
alias: null);
4520+
late final Shape6 networksTable = Shape6(
4521+
source: i0.VersionedTable(
4522+
entityName: 'networks_table',
4523+
withoutRowId: false,
4524+
isStrict: false,
4525+
tableConstraints: [
4526+
'PRIMARY KEY(id)',
4527+
],
4528+
columns: [
4529+
_column_0,
4530+
_column_12,
4531+
_column_13,
4532+
_column_14,
4533+
_column_15,
4534+
_column_47,
4535+
],
4536+
attachedDatabase: database,
4537+
),
4538+
alias: null);
4539+
late final Shape21 transactionsTableV2 = Shape21(
4540+
source: i0.VersionedTable(
4541+
entityName: 'transactions_table_v2',
4542+
withoutRowId: false,
4543+
isStrict: false,
4544+
tableConstraints: [
4545+
'PRIMARY KEY(tx_hash, wallet_view_id, type)',
4546+
],
4547+
columns: [
4548+
_column_16,
4549+
_column_17,
4550+
_column_5,
4551+
_column_18,
4552+
_column_72,
4553+
_column_49,
4554+
_column_50,
4555+
_column_51,
4556+
_column_58,
4557+
_column_74,
4558+
_column_21,
4559+
_column_22,
4560+
_column_23,
4561+
_column_24,
4562+
_column_25,
4563+
_column_26,
4564+
_column_27,
4565+
_column_28,
4566+
_column_29,
4567+
_column_62,
4568+
_column_73,
4569+
_column_30,
4570+
_column_31,
4571+
_column_52,
4572+
],
4573+
attachedDatabase: database,
4574+
),
4575+
alias: null);
4576+
late final Shape16 transactionVisibilityStatusTable = Shape16(
4577+
source: i0.VersionedTable(
4578+
entityName: 'transaction_visibility_status_table',
4579+
withoutRowId: false,
4580+
isStrict: false,
4581+
tableConstraints: [
4582+
'PRIMARY KEY(tx_hash, wallet_view_id)',
4583+
],
4584+
columns: [
4585+
_column_17,
4586+
_column_51,
4587+
_column_61,
4588+
],
4589+
attachedDatabase: database,
4590+
),
4591+
alias: null);
4592+
late final Shape4 cryptoWalletsTable = Shape4(
4593+
source: i0.VersionedTable(
4594+
entityName: 'crypto_wallets_table',
4595+
withoutRowId: false,
4596+
isStrict: false,
4597+
tableConstraints: [
4598+
'PRIMARY KEY(id)',
4599+
],
4600+
columns: [
4601+
_column_0,
4602+
_column_33,
4603+
_column_5,
4604+
_column_34,
4605+
],
4606+
attachedDatabase: database,
4607+
),
4608+
alias: null);
4609+
late final Shape15 fundsRequestsTable = Shape15(
4610+
source: i0.VersionedTable(
4611+
entityName: 'funds_requests_table',
4612+
withoutRowId: false,
4613+
isStrict: false,
4614+
tableConstraints: [
4615+
'PRIMARY KEY(event_id)',
4616+
],
4617+
columns: [
4618+
_column_35,
4619+
_column_36,
4620+
_column_59,
4621+
_column_5,
4622+
_column_38,
4623+
_column_39,
4624+
_column_40,
4625+
_column_41,
4626+
_column_42,
4627+
_column_28,
4628+
_column_29,
4629+
_column_43,
4630+
_column_44,
4631+
_column_53,
4632+
_column_46,
4633+
_column_60,
4634+
],
4635+
attachedDatabase: database,
4636+
),
4637+
alias: null);
4638+
late final Shape18 nftsTable = Shape18(
4639+
source: i0.VersionedTable(
4640+
entityName: 'nfts_table',
4641+
withoutRowId: false,
4642+
isStrict: false,
4643+
tableConstraints: [
4644+
'PRIMARY KEY(contract, token_id, wallet_id)',
4645+
],
4646+
columns: [
4647+
_column_63,
4648+
_column_64,
4649+
_column_65,
4650+
_column_66,
4651+
_column_4,
4652+
_column_5,
4653+
_column_7,
4654+
_column_67,
4655+
_column_68,
4656+
_column_69,
4657+
_column_70,
4658+
_column_37,
4659+
_column_71,
4660+
],
4661+
attachedDatabase: database,
4662+
),
4663+
alias: null);
4664+
}
4665+
4666+
class Shape23 extends i0.VersionedTable {
4667+
Shape23({required super.source, required super.alias}) : super.aliased();
4668+
i1.GeneratedColumn<String> get id => columnsByName['id']! as i1.GeneratedColumn<String>;
4669+
i1.GeneratedColumn<String> get contractAddress =>
4670+
columnsByName['contract_address']! as i1.GeneratedColumn<String>;
4671+
i1.GeneratedColumn<int> get decimals => columnsByName['decimals']! as i1.GeneratedColumn<int>;
4672+
i1.GeneratedColumn<String> get iconURL =>
4673+
columnsByName['icon_u_r_l']! as i1.GeneratedColumn<String>;
4674+
i1.GeneratedColumn<String> get name => columnsByName['name']! as i1.GeneratedColumn<String>;
4675+
i1.GeneratedColumn<String> get networkId =>
4676+
columnsByName['network_id']! as i1.GeneratedColumn<String>;
4677+
i1.GeneratedColumn<double> get priceUSD =>
4678+
columnsByName['price_u_s_d']! as i1.GeneratedColumn<double>;
4679+
i1.GeneratedColumn<String> get symbol => columnsByName['symbol']! as i1.GeneratedColumn<String>;
4680+
i1.GeneratedColumn<String> get symbolGroup =>
4681+
columnsByName['symbol_group']! as i1.GeneratedColumn<String>;
4682+
i1.GeneratedColumn<int> get syncFrequency =>
4683+
columnsByName['sync_frequency']! as i1.GeneratedColumn<int>;
4684+
i1.GeneratedColumn<bool> get native => columnsByName['native']! as i1.GeneratedColumn<bool>;
4685+
i1.GeneratedColumn<bool> get prioritized =>
4686+
columnsByName['prioritized']! as i1.GeneratedColumn<bool>;
4687+
i1.GeneratedColumn<String> get tokenizedCommunityExternalAddress =>
4688+
columnsByName['tokenized_community_external_address']! as i1.GeneratedColumn<String>;
4689+
i1.GeneratedColumn<String> get tokenizedCommunityTokenType =>
4690+
columnsByName['tokenized_community_token_type']! as i1.GeneratedColumn<String>;
4691+
}
4692+
4693+
i1.GeneratedColumn<String> _column_76(String aliasedName) =>
4694+
i1.GeneratedColumn<String>('tokenized_community_external_address', aliasedName, true,
4695+
type: i1.DriftSqlType.string);
4696+
i1.GeneratedColumn<String> _column_77(String aliasedName) =>
4697+
i1.GeneratedColumn<String>('tokenized_community_token_type', aliasedName, true,
4698+
type: i1.DriftSqlType.string);
44644699
i0.MigrationStepWithVersion migrationSteps({
44654700
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
44664701
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
@@ -4484,6 +4719,7 @@ i0.MigrationStepWithVersion migrationSteps({
44844719
required Future<void> Function(i1.Migrator m, Schema21 schema) from20To21,
44854720
required Future<void> Function(i1.Migrator m, Schema22 schema) from21To22,
44864721
required Future<void> Function(i1.Migrator m, Schema23 schema) from22To23,
4722+
required Future<void> Function(i1.Migrator m, Schema24 schema) from23To24,
44874723
}) {
44884724
return (currentVersion, database) async {
44894725
switch (currentVersion) {
@@ -4597,6 +4833,11 @@ i0.MigrationStepWithVersion migrationSteps({
45974833
final migrator = i1.Migrator(database, schema);
45984834
await from22To23(migrator, schema);
45994835
return 23;
4836+
case 23:
4837+
final schema = Schema24(database: database);
4838+
final migrator = i1.Migrator(database, schema);
4839+
await from23To24(migrator, schema);
4840+
return 24;
46004841
default:
46014842
throw ArgumentError.value('Unknown migration from $currentVersion');
46024843
}
@@ -4626,6 +4867,7 @@ i1.OnUpgrade stepByStep({
46264867
required Future<void> Function(i1.Migrator m, Schema21 schema) from20To21,
46274868
required Future<void> Function(i1.Migrator m, Schema22 schema) from21To22,
46284869
required Future<void> Function(i1.Migrator m, Schema23 schema) from22To23,
4870+
required Future<void> Function(i1.Migrator m, Schema24 schema) from23To24,
46294871
}) =>
46304872
i0.VersionedSchema.stepByStepHelper(
46314873
step: migrationSteps(
@@ -4651,4 +4893,5 @@ i1.OnUpgrade stepByStep({
46514893
from20To21: from20To21,
46524894
from21To22: from21To22,
46534895
from22To23: from22To23,
4896+
from23To24: from23To24,
46544897
));

lib/app/features/wallets/domain/coins/coins_mapper.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ class CoinsMapper {
1919
syncFrequency: coin.syncFrequency,
2020
native: coin.native ?? false,
2121
prioritized: coin.prioritized ?? false,
22-
isCreatorToken: false,
22+
tokenizedCommunityExternalAddress: coin.tokenizedCommunityExternalAddress,
23+
tokenizedCommunityTokenType: coin.tokenizedCommunityTokenType,
2324
),
2425
];
2526
}

0 commit comments

Comments
 (0)