- Ajout système complet de gestion des secteurs avec contours géographiques - Import des contours départementaux depuis GeoJSON - API REST pour la gestion des secteurs (/api/sectors) - Service de géolocalisation pour déterminer les secteurs - Migration base de données avec tables x_departements_contours et sectors_adresses - Interface Flutter pour visualisation et gestion des secteurs - Ajout thème sombre dans l'application - Corrections diverses et optimisations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
105 lines
2.8 KiB
Dart
Executable File
105 lines
2.8 KiB
Dart
Executable File
import 'package:equatable/equatable.dart';
|
|
|
|
/// Configuration du module chat
|
|
///
|
|
/// Permet d'adapter le comportement du chat selon l'application
|
|
/// (Geosector ou Resalice)
|
|
|
|
class ChatConfig with EquatableMixin {
|
|
/// Active/désactive les annonces
|
|
final bool enableAnnouncements;
|
|
|
|
/// Active/désactive la sélection de cibles pour les annonces
|
|
final bool enableTargetSelection;
|
|
|
|
/// Active/désactive les statistiques des annonces
|
|
final bool showAnnouncementStats;
|
|
|
|
/// Permission de réponse par défaut
|
|
final String defaultReplyPermission;
|
|
|
|
/// Active/désactive les conversations anonymes
|
|
final bool enableAnonymousConversations;
|
|
|
|
/// Active/désactive les conversations de groupe
|
|
final bool enableGroupConversations;
|
|
|
|
/// Types de conversation autorisés
|
|
final List<String> allowedConversationTypes;
|
|
|
|
/// Taille maximale des fichiers en Mo
|
|
final int maxAttachmentSizeMB;
|
|
|
|
/// Nombre de messages par page
|
|
final int messagePageSize;
|
|
|
|
ChatConfig({
|
|
this.enableAnnouncements = true,
|
|
this.enableTargetSelection = true,
|
|
this.showAnnouncementStats = true,
|
|
this.defaultReplyPermission = 'none',
|
|
this.enableAnonymousConversations = false,
|
|
this.enableGroupConversations = true,
|
|
this.allowedConversationTypes = const [
|
|
'one_to_one',
|
|
'group',
|
|
'announcement',
|
|
'broadcast'
|
|
],
|
|
this.maxAttachmentSizeMB = 10,
|
|
this.messagePageSize = 50,
|
|
});
|
|
|
|
/// Configuration par défaut pour Geosector
|
|
factory ChatConfig.geosector() {
|
|
return ChatConfig(
|
|
enableAnnouncements: true,
|
|
enableTargetSelection: true,
|
|
showAnnouncementStats: true,
|
|
defaultReplyPermission: 'none',
|
|
enableAnonymousConversations: false,
|
|
enableGroupConversations: true,
|
|
allowedConversationTypes: const [
|
|
'one_to_one',
|
|
'group',
|
|
'announcement',
|
|
'broadcast'
|
|
],
|
|
);
|
|
}
|
|
|
|
/// Configuration par défaut pour Resalice
|
|
factory ChatConfig.resalice() {
|
|
return ChatConfig(
|
|
enableAnnouncements: false,
|
|
enableTargetSelection: false,
|
|
showAnnouncementStats: false,
|
|
defaultReplyPermission: 'all',
|
|
enableAnonymousConversations: true,
|
|
enableGroupConversations: false,
|
|
allowedConversationTypes: const [
|
|
'one_to_one',
|
|
'anonymous'
|
|
],
|
|
);
|
|
}
|
|
|
|
/// Vérifie si un type de conversation est autorisé
|
|
bool isConversationTypeAllowed(String type) {
|
|
return allowedConversationTypes.contains(type);
|
|
}
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
enableAnnouncements,
|
|
enableTargetSelection,
|
|
showAnnouncementStats,
|
|
defaultReplyPermission,
|
|
enableAnonymousConversations,
|
|
enableGroupConversations,
|
|
allowedConversationTypes,
|
|
maxAttachmentSizeMB,
|
|
messagePageSize,
|
|
];
|
|
}
|