Roadbound-BRR/lib/models/channels/base_channel.dart

67 lines
1.6 KiB
Dart

import "package:supabase_flutter/supabase_flutter.dart";
enum ChannelKind { text, operations, voice, announcement, unknown }
abstract class BaseChannel {
BaseChannel({
required this.client,
required this.id,
required this.organizationId,
required this.name,
required this.description,
required this.slug,
required this.kind,
required this.isPrivate,
required this.position,
});
final SupabaseClient client;
final String id;
final String organizationId;
final String name;
final String description;
final String slug;
final ChannelKind kind;
final bool isPrivate;
final int position;
Map<String, dynamic> toJson() {
return {
"id": id,
"organization_id": organizationId,
"name": name,
"description": description,
"slug": slug,
"type": kind.name,
"is_private": isPrivate,
"position": position,
};
}
static ChannelKind channelKindFromApi(Object? rawType) {
final value = (rawType ?? "").toString().trim().toLowerCase();
switch (value) {
case "text":
return ChannelKind.text;
case "operations":
return ChannelKind.operations;
case "voice":
return ChannelKind.voice;
case "announcement":
return ChannelKind.announcement;
default:
return ChannelKind.unknown;
}
}
static Map<String, dynamic> asMap(Object? value) {
if (value is Map<String, dynamic>) return value;
if (value is Map) return value.cast<String, dynamic>();
return <String, dynamic>{};
}
static List<dynamic> asList(Object? value) {
if (value is List) return value;
return const <dynamic>[];
}
}