@@ -6,16 +6,20 @@ interface
66 System.SysUtils,
77 System.Classes,
88 System.JSON,
9+ Rest.JSON,
910 DelphiAIDev.Utils,
1011 DelphiAIDev.DefaultsQuestions.Interfaces,
1112 DelphiAIDev.DefaultsQuestions.Model;
1213
1314type
1415 TDelphiAIDevDefaultsQuestionsDao = class (TInterfacedObject, IDelphiAIDevDefaultsQuestionsDao)
1516 private
17+ procedure SaveData (const AModel: TDelphiAIDevDefaultsQuestionsModel);
18+ procedure EditData (const AModel: TDelphiAIDevDefaultsQuestionsModel);
1619 protected
1720 procedure ReadData (AProc: TProc<TDelphiAIDevDefaultsQuestionsModel>);
18- function SaveOrEditData (AModel: TDelphiAIDevDefaultsQuestionsModel): IDelphiAIDevDefaultsQuestionsDao;
21+ procedure SaveOrEditData (const AModel: TDelphiAIDevDefaultsQuestionsModel);
22+ procedure RemoveData (const AGuid: string);
1923 public
2024 class function New : IDelphiAIDevDefaultsQuestionsDao;
2125 constructor Create;
@@ -64,7 +68,6 @@ procedure TDelphiAIDevDefaultsQuestionsDao.ReadData(AProc: TProc<TDelphiAIDevDef
6468 Continue;
6569
6670 LJSONObjItem := LJSONArray.Items[i] as TJSONObject;
67-
6871 LModel.Guid := LJSONObjItem.GetValue<string>(' guid' );
6972 LModel.GuidMenuMaster := LJSONObjItem.GetValue<string>(' guid_menu_master' );
7073 LModel.Question := LJSONObjItem.GetValue<string>(' question' );
@@ -81,14 +84,20 @@ procedure TDelphiAIDevDefaultsQuestionsDao.ReadData(AProc: TProc<TDelphiAIDevDef
8184 end ;
8285end ;
8386
84- function TDelphiAIDevDefaultsQuestionsDao.SaveOrEditData (AModel: TDelphiAIDevDefaultsQuestionsModel): IDelphiAIDevDefaultsQuestionsDao;
87+ procedure TDelphiAIDevDefaultsQuestionsDao.SaveOrEditData (const AModel: TDelphiAIDevDefaultsQuestionsModel);
88+ begin
89+ if AModel.Guid.Trim.IsEmpty then
90+ Self.SaveData(AModel)
91+ else
92+ Self.EditData(AModel);
93+ end ;
94+
95+ procedure TDelphiAIDevDefaultsQuestionsDao.SaveData (const AModel: TDelphiAIDevDefaultsQuestionsModel);
8596var
8697 LStringList: TStringList;
8798 LJSONArray: TJSONArray;
8899 LJSONObject: TJSONObject;
89100begin
90- Result := Self;
91-
92101 LStringList := TStringList.Create;
93102 try
94103 if FileExists(TUtils.GetPathFileJSONDefaultsQuestions) then
@@ -97,23 +106,18 @@ function TDelphiAIDevDefaultsQuestionsDao.SaveOrEditData(AModel: TDelphiAIDevDef
97106 LJSONArray := TJSONArray.Create;
98107 try
99108 if string(LStringList.Text).Trim.StartsWith(' [' ) then
100- begin
101109 LJSONArray := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(LStringList.Text), 0 ) as TJSONArray;
102- end ;
103-
104- if AModel.Guid.Trim.IsEmpty then
105- AModel.Guid := TUtils.GetGuidStr;
106110
107111 LJSONObject := TJSONObject.Create;
108- LJSONObject.AddPair(' guid' , AModel.Guid );
112+ LJSONObject.AddPair(' guid' , TUtils.GetGuidStr );
109113 LJSONObject.AddPair(' guid_menu_master' , AModel.GuidMenuMaster);
110114 LJSONObject.AddPair(' question' , AModel.Question);
111115 LJSONObject.AddPair(' order' , TJSONNumber.Create(AModel.Order));
112116 LJSONObject.AddPair(' visible' , TJSONBool.Create(AModel.Visible));
113117 LJSONObject.AddPair(' code_only' , TJSONBool.Create(AModel.CodeOnly));
114118 LJSONArray.AddElement(LJSONObject);
115119
116- LStringList.Text := LJSONArray.Format(2 )
120+ LStringList.Text := LJSONArray.Format(2 );
117121 finally
118122 LJSONArray.Free;
119123 end ;
@@ -122,32 +126,106 @@ function TDelphiAIDevDefaultsQuestionsDao.SaveOrEditData(AModel: TDelphiAIDevDef
122126 finally
123127 LStringList.Free;
124128 end ;
129+ end ;
125130
131+ procedure TDelphiAIDevDefaultsQuestionsDao.EditData (const AModel: TDelphiAIDevDefaultsQuestionsModel);
132+ var
133+ LStringList: TStringList;
134+ LJSONArray: TJSONArray;
135+ LJSONObjItem: TJSONObject;
136+ i: Integer;
137+ begin
138+ LStringList := TStringList.Create;
139+ try
140+ if FileExists(TUtils.GetPathFileJSONDefaultsQuestions) then
141+ LStringList.LoadFromFile(TUtils.GetPathFileJSONDefaultsQuestions);
126142
127- // FQuery.CloseClear.ExecSQL('CREATE TABLE IF NOT EXISTS defaults_questions(id INTEGER PRIMARY KEY, '+
128- // 'id_parent Integer, question TEXT, order_display Integer, name TEXT)');
129- //
130- // FQuery.CloseClear
131- // .Add('CREATE TABLE IF NOT EXISTS defaults_questions(')
132- // .Add(' id INTEGER PRIMARY KEY,')
133- // .Add(' id_parent INTEGER,')
134- // .Add(' question TEXT,')
135- // .Add(' order_display INTEGER,')
136- // .Add(' visible TEXT,')
137- // .Add(' code_only TEXT')
138- // .Add(') ')
139- // .ExecSQL;
140- //
141- // FQuery.CloseClear
142- // .Add('insert into defaults_questions(id_parent, question, order_display, visible, code_only)')
143- // .Add('values(:id_parent, :question, :order_display, :visible, :code_only)')
144- // .AddParam('id_parent', AModel.IdParent)
145- // .AddParam('question', AModel.Question)
146- // .AddParam('order_display', AModel.Order)
147- // .AddParam('visible', TUtils.BoolToStrC4D(AModel.Visible))
148- // .AddParam('code_only', TUtils.BoolToStrC4D(AModel.CodeOnly))
149- // .ExecSQL;
143+ LJSONArray := TJSONArray.Create;
144+ try
145+ if string(LStringList.Text).Trim.StartsWith(' [' ) then
146+ LJSONArray := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(LStringList.Text), 0 ) as TJSONArray;
147+
148+ for i := 0 to Pred(LJSONArray.Count) do
149+ begin
150+ if not (LJSONArray.Items[i] is TJSONObject) then
151+ Continue;
152+
153+ LJSONObjItem := LJSONArray.Items[i] as TJSONObject;
154+
155+ if LJSONObjItem.GetValue<string>(' guid' ) = AModel.Guid then
156+ begin
157+ LJSONObjItem.RemovePair(' guid_menu_master' ).Free;
158+ LJSONObjItem.AddPair(' guid_menu_master' , AModel.GuidMenuMaster);
159+
160+ LJSONObjItem.RemovePair(' question' ).Free;
161+ LJSONObjItem.AddPair(' question' , AModel.Question);
162+
163+ LJSONObjItem.RemovePair(' order' ).Free;
164+ LJSONObjItem.AddPair(' order' , TJSONNumber.Create(AModel.Order));
165+
166+ LJSONObjItem.RemovePair(' visible' ).Free;
167+ LJSONObjItem.AddPair(' visible' , TJSONBool.Create(AModel.Visible));
168+
169+ LJSONObjItem.RemovePair(' code_only' ).Free;
170+ LJSONObjItem.AddPair(' code_only' , TJSONBool.Create(AModel.CodeOnly));
171+ Break;
172+ end ;
173+ end ;
174+
175+ LStringList.Text := LJSONArray.Format(2 );
176+ finally
177+ LJSONArray.Free;
178+ end ;
179+
180+ LStringList.SaveToFile(TUtils.GetPathFileJSONDefaultsQuestions);
181+ finally
182+ LStringList.Free;
183+ end ;
150184end ;
151185
152- end .
186+ procedure TDelphiAIDevDefaultsQuestionsDao.RemoveData (const AGuid: string);
187+ var
188+ LStringList: TStringList;
189+ LJSONArray: TJSONArray;
190+ LJSONObjItem: TJSONObject;
191+ i: Integer;
192+ begin
193+ if AGuid.Trim.IsEmpty then
194+ Exit;
195+
196+ if not FileExists(TUtils.GetPathFileJSONDefaultsQuestions) then
197+ Exit;
198+
199+ LStringList := TStringList.Create;
200+ try
201+ LStringList.LoadFromFile(TUtils.GetPathFileJSONDefaultsQuestions);
202+ if not string(LStringList.Text).Trim.StartsWith(' [' ) then
203+ Exit;
204+
205+ LJSONArray := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(LStringList.Text), 0 ) as TJSONArray;
206+ try
207+ for i := 0 to Pred(LJSONArray.Count) do
208+ begin
209+ if not (LJSONArray.Items[i] is TJSONObject) then
210+ Continue;
211+
212+ LJSONObjItem := LJSONArray.Items[i] as TJSONObject;
213+ if LJSONObjItem.GetValue<string>(' guid' ) = AGuid then
214+ begin
215+ LJSONArray.Remove(i);
216+ Break;
217+ end ;
218+ end ;
219+
220+ LStringList.Text := LJSONArray.Format(2 );
221+ finally
222+ LJSONArray.Free;
223+ end ;
153224
225+ LStringList.SaveToFile(TUtils.GetPathFileJSONDefaultsQuestions);
226+ finally
227+ LStringList.Free;
228+ end ;
229+ end ;
230+
231+ end .
0 commit comments