@@ -7,39 +7,75 @@ def subscribed
77 end
88 end
99
10- def speak ( data )
11- messageable = params [ :messageable_type ] . constantize . find ( params [ :messageable_id ] )
10+ # Méthode de classe pour diffuser un message existant
11+ def self . broadcast_message ( message )
12+ payload = {
13+ message : message . content ,
14+ user : message . user . email ,
15+ full_name : message . full_name ,
16+ sent_at : message . created_at . strftime ( "%d/%m à %H:%M" ) ,
17+ document_urls : if message . documents . attached?
18+ message . documents . map do |doc |
19+ if doc . blob . content_type . start_with? ( 'image' )
20+ {
21+ thumbnail_url : Rails . application . routes . url_helpers . url_for (
22+ doc . variant ( resize_to_limit : [ 100 , 100 ] ) . processed
23+ ) ,
24+ original_url : Rails . application . routes . url_helpers . url_for ( doc ) ,
25+ is_image : true
26+ }
27+ else
28+ {
29+ thumbnail_url : nil ,
30+ original_url : Rails . application . routes . url_helpers . url_for ( doc ) ,
31+ is_image : false
32+ }
33+ end
34+ end
35+ else
36+ [ ]
37+ end
38+ }
1239
13- # Déterminer le nom complet en fonction du rôle de l'utilisateur connecté
14- full_name =
15- if connection . current_user . role == 'employee'
16- employee_record = ::Employee . find_by ( user_id : connection . current_user . id )
17- employee_record ? "#{ employee_record . firstname } #{ employee_record . lastname } " : connection . current_user . email
18- elsif connection . current_user . role == 'customer'
19- client_record = ::Client . find_by ( email : connection . current_user . email )
20- client_record ? "#{ client_record . firstname } #{ client_record . lastname } " : connection . current_user . email
21- elsif connection . current_user . role == 'admin'
22- employee_record = ::Employee . find_by ( email : connection . current_user . email )
23- employee_record ? "#{ employee_record . firstname } #{ employee_record . lastname } " : connection . current_user . email
24- else
25- connection . current_user . name rescue connection . current_user . email
26- end
40+ Rails . logger . info "CommunicationChannel.broadcast_message => Payload: #{ payload . inspect } "
2741
28- # Crée le message en incluant le full_name
42+ # Diffuser sur le canal
43+ channel_name = "#{ message . messageable_type . downcase } _#{ message . messageable_id } _channel"
44+ ActionCable . server . broadcast ( channel_name , payload )
45+ end
46+
47+ # Méthode speak pour gérer le cas "perform('speak', { message: ... })" côté client
48+ def speak ( data )
49+ messageable = params [ :messageable_type ] . constantize . find ( params [ :messageable_id ] )
50+ full_name = determine_full_name ( connection . current_user )
51+ # Créer le message (uniquement texte, par exemple)
2952 message = Message . create! (
3053 content : data [ 'message' ] ,
3154 user : connection . current_user ,
3255 messageable : messageable ,
3356 full_name : full_name
3457 )
35- Rails . logger . info "Message sauvegardé : #{ message . inspect } "
3658
37- payload = {
38- message : message . content ,
39- user : connection . current_user . email ,
40- full_name : message . full_name , # On utilise ici la valeur persistée
41- sent_at : message . created_at . strftime ( "%d/%m à %H:%M" )
42- }
43- ActionCable . server . broadcast ( "#{ params [ :messageable_type ] . downcase } _#{ params [ :messageable_id ] } _channel" , payload )
59+ Rails . logger . info "Message créé via speak => #{ message . inspect } "
60+ # Diffuser via la méthode de classe
61+ self . class . broadcast_message ( message )
62+ end
63+
64+ private
65+
66+ def determine_full_name ( user )
67+ case user . role
68+ when 'employee'
69+ emp = ::Employee . find_by ( user_id : user . id )
70+ emp ? "#{ emp . firstname } #{ emp . lastname } " : user . email
71+ when 'customer'
72+ cli = ::Client . find_by ( email : user . email )
73+ cli ? "#{ cli . firstname } #{ cli . lastname } " : user . email
74+ when 'admin'
75+ emp = ::Employee . find_by ( email : user . email )
76+ emp ? "#{ emp . firstname } #{ emp . lastname } " : user . email
77+ else
78+ user . name rescue user . email
79+ end
4480 end
4581end
0 commit comments