@@ -6,99 +6,30 @@ class AiFeaturesController < ::Admin::AdminController
6
6
requires_plugin ::DiscourseAi ::PLUGIN_NAME
7
7
8
8
def index
9
- render json : persona_backed_features
9
+ render json : serialize_features ( DiscourseAi :: Features . features )
10
10
end
11
11
12
12
def edit
13
13
raise Discourse ::InvalidParameters . new ( :id ) if params [ :id ] . blank?
14
- render json : find_feature_by_id ( params [ :id ] . to_i )
14
+ render json : serialize_feature ( DiscourseAi :: Features . find_feature_by_id ( params [ :id ] . to_i ) )
15
15
end
16
16
17
- def update
18
- raise Discourse ::InvalidParameters . new ( :id ) if params [ :id ] . blank?
19
- raise Discourse ::InvalidParameters . new ( :ai_feature ) if params [ :ai_feature ] . blank?
20
- if params [ :ai_feature ] [ :persona_id ] . blank?
21
- raise Discourse ::InvalidParameters . new ( :persona_id )
22
- end
23
- raise Discourse ::InvalidParameters . new ( :enabled ) if params [ :ai_feature ] [ :enabled ] . nil?
24
-
25
- feature = find_feature_by_id ( params [ :id ] . to_i )
26
- enable_value = params [ :ai_feature ] [ :enabled ]
27
- persona_id = params [ :ai_feature ] [ :persona_id ]
28
-
29
- SiteSetting . set_and_log ( feature [ :enable_setting ] [ :name ] , enable_value , guardian . user )
30
- SiteSetting . set_and_log ( feature [ :persona_setting ] [ :name ] , persona_id , guardian . user )
17
+ private
31
18
32
- render json : find_feature_by_id ( params [ :id ] . to_i )
19
+ def serialize_features ( features )
20
+ features . map { |feature | feature . merge ( persona : serialize_persona ( feature [ :persona ] ) ) }
33
21
end
34
22
35
- private
23
+ def serialize_feature ( feature )
24
+ return nil if feature . blank?
36
25
37
- # Eventually we may move this all to an active record model
38
- # but for now we are just using a hash
39
- # to store the features and their corresponding settings
40
- def feature_config
41
- [
42
- {
43
- id : 1 ,
44
- name_key : "discourse_ai.features.summarization.name" ,
45
- description_key : "discourse_ai.features.summarization.description" ,
46
- persona_setting_name : "ai_summarization_persona" ,
47
- enable_setting_name : "ai_summarization_enabled" ,
48
- } ,
49
- {
50
- id : 2 ,
51
- name_key : "discourse_ai.features.gists.name" ,
52
- description_key : "discourse_ai.features.gists.description" ,
53
- persona_setting_name : "ai_summary_gists_persona" ,
54
- enable_setting_name : "ai_summary_gists_enabled" ,
55
- } ,
56
- {
57
- id : 3 ,
58
- name_key : "discourse_ai.features.discoveries.name" ,
59
- description_key : "discourse_ai.features.discoveries.description" ,
60
- persona_setting_name : "ai_bot_discover_persona" ,
61
- enable_setting_name : "ai_bot_enabled" ,
62
- } ,
63
- {
64
- id : 4 ,
65
- name_key : "discourse_ai.features.discord_search.name" ,
66
- description_key : "discourse_ai.features.discord_search.description" ,
67
- persona_setting_name : "ai_discord_search_persona" ,
68
- enable_setting_name : "ai_discord_search_enabled" ,
69
- } ,
70
- ]
26
+ feature . merge ( persona : serialize_persona ( feature [ :persona ] ) )
71
27
end
72
28
73
- def persona_backed_features
74
- feature_config . map do |feature |
75
- {
76
- id : feature [ :id ] ,
77
- name : I18n . t ( feature [ :name_key ] ) ,
78
- description : I18n . t ( feature [ :description_key ] ) ,
79
- persona :
80
- serialize_data (
81
- AiPersona . find_by ( id : SiteSetting . get ( feature [ :persona_setting_name ] ) ) ,
82
- AiFeaturesPersonaSerializer ,
83
- root : false ,
84
- ) ,
85
- persona_setting : {
86
- name : feature [ :persona_setting_name ] ,
87
- value : SiteSetting . get ( feature [ :persona_setting_name ] ) ,
88
- type : SiteSetting . type_supervisor . get_type ( feature [ :persona_setting_name ] ) ,
89
- } ,
90
- enable_setting : {
91
- name : feature [ :enable_setting_name ] ,
92
- value : SiteSetting . get ( feature [ :enable_setting_name ] ) ,
93
- type : SiteSetting . type_supervisor . get_type ( feature [ :enable_setting_name ] ) ,
94
- } ,
95
- }
96
- end
97
- end
29
+ def serialize_persona ( persona )
30
+ return nil if persona . blank?
98
31
99
- def find_feature_by_id ( id )
100
- lookup = persona_backed_features . index_by { |feature | feature [ :id ] }
101
- lookup [ id ]
32
+ serialize_data ( persona , AiFeaturesPersonaSerializer , root : false )
102
33
end
103
34
end
104
35
end
0 commit comments