Surface/lib/models/user.dart
LittleSheep a2053aa772 🐛 Fixes and optimzation on post
♻️ Replace freezed abstract classes with sealed
2025-05-24 22:38:07 +08:00

110 lines
3.0 KiB
Dart

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:island/models/file.dart';
part 'user.freezed.dart';
part 'user.g.dart';
@freezed
sealed class SnAccount with _$SnAccount {
const factory SnAccount({
required String id,
required String name,
required String nick,
required String language,
required bool isSuperuser,
required SnAccountProfile profile,
@Default([]) List<SnAccountBadge> badges,
required DateTime createdAt,
required DateTime updatedAt,
required DateTime? deletedAt,
}) = _SnAccount;
factory SnAccount.fromJson(Map<String, dynamic> json) =>
_$SnAccountFromJson(json);
}
@freezed
sealed class SnAccountProfile with _$SnAccountProfile {
const factory SnAccountProfile({
required String id,
required String? firstName,
required String? middleName,
required String? lastName,
@Default('') String bio,
required String? pictureId,
required int experience,
required int level,
required double levelingProgress,
required SnCloudFile? picture,
required String? backgroundId,
required SnCloudFile? background,
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 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? deletedAt,
}) = _SnAccountBadge;
factory SnAccountBadge.fromJson(Map<String, dynamic> json) =>
_$SnAccountBadgeFromJson(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);
}