Files
SashegDev 096c4d0a2d Initial commit: JustAMessenger v0.1.0
Серверная часть (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 — спецификация протокола
2026-06-06 22:39:14 +00:00

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(),
};
}