266 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			266 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
						|
import 'package:island/models/auth.dart';
 | 
						|
import 'package:island/models/file.dart';
 | 
						|
import 'package:island/models/wallet.dart';
 | 
						|
 | 
						|
part 'account.freezed.dart';
 | 
						|
part 'account.g.dart';
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnAccount with _$SnAccount {
 | 
						|
  const factory SnAccount({
 | 
						|
    required String id,
 | 
						|
    required String name,
 | 
						|
    required String nick,
 | 
						|
    required String language,
 | 
						|
    @Default("") String region,
 | 
						|
    required bool isSuperuser,
 | 
						|
    required String? automatedId,
 | 
						|
    required SnAccountProfile profile,
 | 
						|
    required SnWalletSubscriptionRef? perkSubscription,
 | 
						|
    @Default([]) List<SnAccountBadge> badges,
 | 
						|
    @Default([]) List<SnContactMethod> contacts,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnAccount;
 | 
						|
 | 
						|
  factory SnAccount.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnAccountFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class ProfileLink with _$ProfileLink {
 | 
						|
  const factory ProfileLink({required String name, required String url}) =
 | 
						|
      _ProfileLink;
 | 
						|
 | 
						|
  factory ProfileLink.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$ProfileLinkFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
class ProfileLinkConverter
 | 
						|
    implements JsonConverter<List<ProfileLink>, dynamic> {
 | 
						|
  const ProfileLinkConverter();
 | 
						|
 | 
						|
  @override
 | 
						|
  List<ProfileLink> fromJson(dynamic json) {
 | 
						|
    return json is List<dynamic>
 | 
						|
        ? json.map((e) => ProfileLink.fromJson(e)).cast<ProfileLink>().toList()
 | 
						|
        : <ProfileLink>[];
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  List<dynamic> toJson(List<ProfileLink> object) {
 | 
						|
    return object.map((e) => e.toJson()).toList();
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class UsernameColor with _$UsernameColor {
 | 
						|
  const factory UsernameColor({
 | 
						|
    @Default('plain') String type,
 | 
						|
    String? value,
 | 
						|
    String? direction,
 | 
						|
    List<String>? colors,
 | 
						|
  }) = _UsernameColor;
 | 
						|
 | 
						|
  factory UsernameColor.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$UsernameColorFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnAccountProfile with _$SnAccountProfile {
 | 
						|
  const factory SnAccountProfile({
 | 
						|
    required String id,
 | 
						|
    @Default('') String firstName,
 | 
						|
    @Default('') String middleName,
 | 
						|
    @Default('') String lastName,
 | 
						|
    @Default('') String bio,
 | 
						|
    @Default('') String gender,
 | 
						|
    @Default('') String pronouns,
 | 
						|
    @Default('') String location,
 | 
						|
    @Default('') String timeZone,
 | 
						|
    DateTime? birthday,
 | 
						|
    @ProfileLinkConverter() @Default([]) List<ProfileLink> links,
 | 
						|
    DateTime? lastSeenAt,
 | 
						|
    SnAccountBadge? activeBadge,
 | 
						|
    required int experience,
 | 
						|
    required int level,
 | 
						|
    @Default(100) double socialCredits,
 | 
						|
    @Default(0) int socialCreditsLevel,
 | 
						|
    required double levelingProgress,
 | 
						|
    required SnCloudFile? picture,
 | 
						|
    required SnCloudFile? background,
 | 
						|
    required SnVerificationMark? verification,
 | 
						|
    UsernameColor? usernameColor,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnAccountProfile;
 | 
						|
 | 
						|
  factory SnAccountProfile.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnAccountProfileFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnAccountStatus with _$SnAccountStatus {
 | 
						|
  const factory SnAccountStatus({
 | 
						|
    required String id,
 | 
						|
    required int attitude,
 | 
						|
    required bool isOnline,
 | 
						|
    required bool isInvisible,
 | 
						|
    required bool isNotDisturb,
 | 
						|
    required bool isCustomized,
 | 
						|
    @Default("") String label,
 | 
						|
    required Map<String, dynamic>? meta,
 | 
						|
    required DateTime? clearedAt,
 | 
						|
    required String accountId,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnAccountStatus;
 | 
						|
 | 
						|
  factory SnAccountStatus.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnAccountStatusFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnAccountBadge with _$SnAccountBadge {
 | 
						|
  const factory SnAccountBadge({
 | 
						|
    required String id,
 | 
						|
    required String type,
 | 
						|
    required String? label,
 | 
						|
    required String? caption,
 | 
						|
    required Map<String, dynamic> meta,
 | 
						|
    required DateTime? expiredAt,
 | 
						|
    required String accountId,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? activatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnAccountBadge;
 | 
						|
 | 
						|
  factory SnAccountBadge.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnAccountBadgeFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnContactMethod with _$SnContactMethod {
 | 
						|
  const factory SnContactMethod({
 | 
						|
    required String id,
 | 
						|
    required int type,
 | 
						|
    required DateTime? verifiedAt,
 | 
						|
    required bool isPrimary,
 | 
						|
    required bool isPublic,
 | 
						|
    required String content,
 | 
						|
    required String accountId,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnContactMethod;
 | 
						|
 | 
						|
  factory SnContactMethod.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnContactMethodFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnNotification with _$SnNotification {
 | 
						|
  const factory SnNotification({
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
    required String id,
 | 
						|
    required String topic,
 | 
						|
    required String title,
 | 
						|
    @Default('') String subtitle,
 | 
						|
    required String content,
 | 
						|
    @Default({}) Map<String, dynamic> meta,
 | 
						|
    required int priority,
 | 
						|
    required DateTime? viewedAt,
 | 
						|
    required String accountId,
 | 
						|
  }) = _SnNotification;
 | 
						|
 | 
						|
  factory SnNotification.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnNotificationFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnVerificationMark with _$SnVerificationMark {
 | 
						|
  const factory SnVerificationMark({
 | 
						|
    required int type,
 | 
						|
    required String? title,
 | 
						|
    required String? description,
 | 
						|
    required String? verifiedBy,
 | 
						|
  }) = _SnVerificationMark;
 | 
						|
 | 
						|
  factory SnVerificationMark.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnVerificationMarkFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnAuthDevice with _$SnAuthDevice {
 | 
						|
  const factory SnAuthDevice({
 | 
						|
    required String id,
 | 
						|
    required String deviceId,
 | 
						|
    required String deviceName,
 | 
						|
    required String? deviceLabel,
 | 
						|
    required String accountId,
 | 
						|
    required int platform,
 | 
						|
    @Default(false) bool isCurrent,
 | 
						|
  }) = _SnAuthDevice;
 | 
						|
 | 
						|
  factory SnAuthDevice.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnAuthDeviceFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnAuthDeviceWithChallenge with _$SnAuthDeviceWithChallenge {
 | 
						|
  const factory SnAuthDeviceWithChallenge({
 | 
						|
    required String id,
 | 
						|
    required String deviceId,
 | 
						|
    required String deviceName,
 | 
						|
    required String? deviceLabel,
 | 
						|
    required String accountId,
 | 
						|
    required int platform,
 | 
						|
    required List<SnAuthChallenge> challenges,
 | 
						|
    @Default(false) bool isCurrent,
 | 
						|
  }) = _SnAuthDeviceWithChallengee;
 | 
						|
 | 
						|
  factory SnAuthDeviceWithChallenge.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnAuthDeviceWithChallengeFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnExperienceRecord with _$SnExperienceRecord {
 | 
						|
  const factory SnExperienceRecord({
 | 
						|
    required String id,
 | 
						|
    required int delta,
 | 
						|
    required String reasonType,
 | 
						|
    required String reason,
 | 
						|
    @Default(1.0) double? bonusMultiplier,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnExperienceRecord;
 | 
						|
 | 
						|
  factory SnExperienceRecord.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnExperienceRecordFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnSocialCreditRecord with _$SnSocialCreditRecord {
 | 
						|
  const factory SnSocialCreditRecord({
 | 
						|
    required String id,
 | 
						|
    required double delta,
 | 
						|
    required String reasonType,
 | 
						|
    required String reason,
 | 
						|
    required DateTime? expiredAt,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnSocialCreditRecord;
 | 
						|
 | 
						|
  factory SnSocialCreditRecord.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnSocialCreditRecordFromJson(json);
 | 
						|
}
 |