096c4d0a2d
Серверная часть (Go): - WebSocket сервер с бинарным протоколом - XChaCha20-Poly1305 шифрование - zstd сжатие с дедупликацией (64KB чанки) - SQLite хранилище (WAL режим) - Управление гильдиями, каналами, ролями - Федерация между серверами (ed25519) - REST API + WebSocket endpoints Клиентская часть (Flutter): - Material Design 3 тёмная тема (Discord-like) - WebSocket соединение с сервером - Экраны: сплэш, логин, домашний, гильдии, чат - Модели: пользователи, гильдии, каналы, сообщения, роли - Сервисы: соединение, API, криптография, тема - Виджеты: иконки гильдий, сообщения, ввод чата - Web сборка (PWA) Документация: - AGENTS.md — контекст для ИИ ассистентов - docs/protocol.md — спецификация протокола
40 lines
979 B
Dart
40 lines
979 B
Dart
class User {
|
|
final String id;
|
|
final String username;
|
|
final String? avatar;
|
|
final String? bio;
|
|
final String? publicKey;
|
|
final DateTime createdAt;
|
|
|
|
User({
|
|
required this.id,
|
|
required this.username,
|
|
this.avatar,
|
|
this.bio,
|
|
this.publicKey,
|
|
DateTime? createdAt,
|
|
}) : createdAt = createdAt ?? DateTime.now();
|
|
|
|
factory User.fromJson(Map<String, dynamic> json) {
|
|
return User(
|
|
id: json['id'] as String,
|
|
username: json['username'] as String,
|
|
avatar: json['avatar'] as String?,
|
|
bio: json['bio'] as String?,
|
|
publicKey: json['public_key'] as String?,
|
|
createdAt: json['created_at'] != null
|
|
? DateTime.parse(json['created_at'] as String)
|
|
: DateTime.now(),
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
'id': id,
|
|
'username': username,
|
|
'avatar': avatar,
|
|
'bio': bio,
|
|
'public_key': publicKey,
|
|
'created_at': createdAt.toIso8601String(),
|
|
};
|
|
}
|