Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions assets/svg/icon_filter_arrow_down.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions assets/svg/icon_filter_arrow_up.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions drift_schemas/wallets_database/drift_schema_v24.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// SPDX-License-Identifier: ice License 1.0

import 'package:freezed_annotation/freezed_annotation.dart';

part 'tokenized_community_token_type.f.g.dart';

@JsonEnum(alwaysCreate: true)
enum TokenizedCommunityTokenType {
@JsonValue('profile')
tokenTypeProfile,

@JsonValue('post')
tokenTypePost,

@JsonValue('article')
tokenTypeArticle,

@JsonValue('video')
tokenTypeVideo,

@JsonValue('xcom')
tokenTypeXcom,

@JsonValue('undefined')
tokenTypeUndefined;

factory TokenizedCommunityTokenType.fromJson(String json) =>
_$TokenizedCommunityTokenTypeEnumMap.map((key, value) => MapEntry(value, key))[json] ??
TokenizedCommunityTokenType.tokenTypeUndefined;

String toJson() => _$TokenizedCommunityTokenTypeEnumMap[this]!;
}
Original file line number Diff line number Diff line change
Expand Up @@ -321,9 +321,7 @@ class CommunityTokenTradeNotifier extends _$CommunityTokenTradeNotifier {

await coinsRepository.updateCoins(
[
coinData.toDB(
isCreatorToken: true,
),
coinData.toDB(),
],
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ class CoinsTable extends Table {
Column<Duration> get syncFrequency => customType(const DurationType())();
BoolColumn get native => boolean()();
BoolColumn get prioritized => boolean()();
BoolColumn get isCreatorToken => boolean()();
TextColumn get tokenizedCommunityExternalAddress => text().nullable()();
TextColumn get tokenizedCommunityTokenType => text().nullable()();

@override
Set<Column> get primaryKey => {id};
Expand Down
36 changes: 35 additions & 1 deletion lib/app/features/wallets/data/database/wallets_database.m.dart
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class WalletsDatabase extends _$WalletsDatabase {
final String? appGroupId;

@override
int get schemaVersion => 23;
int get schemaVersion => 24;

/// Opens a connection to the database with the given pubkey
/// Uses app group container for iOS extensions if appGroupId is provided
Expand Down Expand Up @@ -285,6 +285,40 @@ class WalletsDatabase extends _$WalletsDatabase {
);
}
},
from23To24: (Migrator m, Schema24 schema) async {
// Remove deprecated is_creator_token column if present
final isCreatorTokenExists = await isColumnExists(
tableName: schema.coinsTable.actualTableName,
columnName: 'is_creator_token',
);
if (isCreatorTokenExists) {
await m.dropColumn(schema.coinsTable, 'is_creator_token');
}

// Add tokenized_community_external_address column if missing
final tokenizedCommunityExternalAddressExists = await isColumnExists(
tableName: schema.coinsTable.actualTableName,
columnName: 'tokenized_community_external_address',
);
if (!tokenizedCommunityExternalAddressExists) {
await m.addColumn(
schema.coinsTable,
schema.coinsTable.tokenizedCommunityExternalAddress,
);
}

// Add tokenized_community_token_type column if missing
final tokenizedCommunityTokenTypeExists = await isColumnExists(
tableName: schema.coinsTable.actualTableName,
columnName: 'tokenized_community_token_type',
);
if (!tokenizedCommunityTokenTypeExists) {
await m.addColumn(
schema.coinsTable,
schema.coinsTable.tokenizedCommunityTokenType,
);
}
Comment on lines +315 to +320
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we write migration script to set token type for exist rows?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As we haven't released the issue no user in prod has tokens, so no need to migrate yet. Also coin sync happens once a day, so it will overwrite the values

},
),
);
}
Expand Down
243 changes: 243 additions & 0 deletions lib/app/features/wallets/data/database/wallets_database.m.steps.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4461,6 +4461,241 @@ i1.GeneratedColumn<bool> _column_75(String aliasedName) =>
type: i1.DriftSqlType.bool,
defaultConstraints:
i1.GeneratedColumn.constraintIsAlways('CHECK ("is_creator_token" IN (0, 1))'));

final class Schema24 extends i0.VersionedSchema {
Schema24({required super.database}) : super(version: 24);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
coinsTable,
syncCoinsTable,
networksTable,
transactionsTableV2,
transactionVisibilityStatusTable,
cryptoWalletsTable,
fundsRequestsTable,
nftsTable,
];
late final Shape23 coinsTable = Shape23(
source: i0.VersionedTable(
entityName: 'coins_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY(id)',
],
columns: [
_column_0,
_column_1,
_column_2,
_column_3,
_column_4,
_column_5,
_column_6,
_column_7,
_column_8,
_column_9,
_column_54,
_column_57,
_column_76,
_column_77,
],
attachedDatabase: database,
),
alias: null);
late final Shape1 syncCoinsTable = Shape1(
source: i0.VersionedTable(
entityName: 'sync_coins_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY(coin_id)',
],
columns: [
_column_10,
_column_11,
],
attachedDatabase: database,
),
alias: null);
late final Shape6 networksTable = Shape6(
source: i0.VersionedTable(
entityName: 'networks_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY(id)',
],
columns: [
_column_0,
_column_12,
_column_13,
_column_14,
_column_15,
_column_47,
],
attachedDatabase: database,
),
alias: null);
late final Shape21 transactionsTableV2 = Shape21(
source: i0.VersionedTable(
entityName: 'transactions_table_v2',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY(tx_hash, wallet_view_id, type)',
],
columns: [
_column_16,
_column_17,
_column_5,
_column_18,
_column_72,
_column_49,
_column_50,
_column_51,
_column_58,
_column_74,
_column_21,
_column_22,
_column_23,
_column_24,
_column_25,
_column_26,
_column_27,
_column_28,
_column_29,
_column_62,
_column_73,
_column_30,
_column_31,
_column_52,
],
attachedDatabase: database,
),
alias: null);
late final Shape16 transactionVisibilityStatusTable = Shape16(
source: i0.VersionedTable(
entityName: 'transaction_visibility_status_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY(tx_hash, wallet_view_id)',
],
columns: [
_column_17,
_column_51,
_column_61,
],
attachedDatabase: database,
),
alias: null);
late final Shape4 cryptoWalletsTable = Shape4(
source: i0.VersionedTable(
entityName: 'crypto_wallets_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY(id)',
],
columns: [
_column_0,
_column_33,
_column_5,
_column_34,
],
attachedDatabase: database,
),
alias: null);
late final Shape15 fundsRequestsTable = Shape15(
source: i0.VersionedTable(
entityName: 'funds_requests_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY(event_id)',
],
columns: [
_column_35,
_column_36,
_column_59,
_column_5,
_column_38,
_column_39,
_column_40,
_column_41,
_column_42,
_column_28,
_column_29,
_column_43,
_column_44,
_column_53,
_column_46,
_column_60,
],
attachedDatabase: database,
),
alias: null);
late final Shape18 nftsTable = Shape18(
source: i0.VersionedTable(
entityName: 'nfts_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [
'PRIMARY KEY(contract, token_id, wallet_id)',
],
columns: [
_column_63,
_column_64,
_column_65,
_column_66,
_column_4,
_column_5,
_column_7,
_column_67,
_column_68,
_column_69,
_column_70,
_column_37,
_column_71,
],
attachedDatabase: database,
),
alias: null);
}

class Shape23 extends i0.VersionedTable {
Shape23({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<String> get id => columnsByName['id']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get contractAddress =>
columnsByName['contract_address']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get decimals => columnsByName['decimals']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get iconURL =>
columnsByName['icon_u_r_l']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get name => columnsByName['name']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get networkId =>
columnsByName['network_id']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<double> get priceUSD =>
columnsByName['price_u_s_d']! as i1.GeneratedColumn<double>;
i1.GeneratedColumn<String> get symbol => columnsByName['symbol']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get symbolGroup =>
columnsByName['symbol_group']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get syncFrequency =>
columnsByName['sync_frequency']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<bool> get native => columnsByName['native']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<bool> get prioritized =>
columnsByName['prioritized']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<String> get tokenizedCommunityExternalAddress =>
columnsByName['tokenized_community_external_address']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get tokenizedCommunityTokenType =>
columnsByName['tokenized_community_token_type']! as i1.GeneratedColumn<String>;
}

i1.GeneratedColumn<String> _column_76(String aliasedName) =>
i1.GeneratedColumn<String>('tokenized_community_external_address', aliasedName, true,
type: i1.DriftSqlType.string);
i1.GeneratedColumn<String> _column_77(String aliasedName) =>
i1.GeneratedColumn<String>('tokenized_community_token_type', aliasedName, true,
type: i1.DriftSqlType.string);
i0.MigrationStepWithVersion migrationSteps({
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
Expand All @@ -4484,6 +4719,7 @@ i0.MigrationStepWithVersion migrationSteps({
required Future<void> Function(i1.Migrator m, Schema21 schema) from20To21,
required Future<void> Function(i1.Migrator m, Schema22 schema) from21To22,
required Future<void> Function(i1.Migrator m, Schema23 schema) from22To23,
required Future<void> Function(i1.Migrator m, Schema24 schema) from23To24,
}) {
return (currentVersion, database) async {
switch (currentVersion) {
Expand Down Expand Up @@ -4597,6 +4833,11 @@ i0.MigrationStepWithVersion migrationSteps({
final migrator = i1.Migrator(database, schema);
await from22To23(migrator, schema);
return 23;
case 23:
final schema = Schema24(database: database);
final migrator = i1.Migrator(database, schema);
await from23To24(migrator, schema);
return 24;
default:
throw ArgumentError.value('Unknown migration from $currentVersion');
}
Expand Down Expand Up @@ -4626,6 +4867,7 @@ i1.OnUpgrade stepByStep({
required Future<void> Function(i1.Migrator m, Schema21 schema) from20To21,
required Future<void> Function(i1.Migrator m, Schema22 schema) from21To22,
required Future<void> Function(i1.Migrator m, Schema23 schema) from22To23,
required Future<void> Function(i1.Migrator m, Schema24 schema) from23To24,
}) =>
i0.VersionedSchema.stepByStepHelper(
step: migrationSteps(
Expand All @@ -4651,4 +4893,5 @@ i1.OnUpgrade stepByStep({
from20To21: from20To21,
from21To22: from21To22,
from22To23: from22To23,
from23To24: from23To24,
));
3 changes: 2 additions & 1 deletion lib/app/features/wallets/domain/coins/coins_mapper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ class CoinsMapper {
syncFrequency: coin.syncFrequency,
native: coin.native ?? false,
prioritized: coin.prioritized ?? false,
isCreatorToken: false,
tokenizedCommunityExternalAddress: coin.tokenizedCommunityExternalAddress,
tokenizedCommunityTokenType: coin.tokenizedCommunityTokenType,
),
];
}
Loading