OSDN Git Service

だいぶ進んだ、不要なPathInfoがたくさん出てきた
authoryamat0jp <terukohietori@gmail.com>
Fri, 6 Mar 2020 09:22:30 +0000 (18:22 +0900)
committeryamat0jp <terukohietori@gmail.com>
Fri, 6 Mar 2020 09:22:30 +0000 (18:22 +0900)
Unit1.dfm
Unit1.pas
WebModuleUnit1.dfm
WebModuleUnit1.pas

index 55a234a..640195b 100644 (file)
--- a/Unit1.dfm
+++ b/Unit1.dfm
@@ -3,11 +3,11 @@ object DataModule1: TDataModule1
   OnCreate = DataModuleCreate
   Height = 257
   Width = 299
-  object index: TFDTable
+  object database: TFDTable
     IndexFieldNames = 'no'
     Connection = MagazineConnection
-    UpdateOptions.UpdateTableName = 'index'
-    TableName = 'index'
+    UpdateOptions.UpdateTableName = 'database'
+    TableName = 'database'
     Left = 48
     Top = 136
   end
index e155ffc..d3c1dc7 100644 (file)
--- a/Unit1.pas
+++ b/Unit1.pas
@@ -13,7 +13,7 @@ uses
 
 type
   TDataModule1 = class(TDataModule)
-    index: TFDTable;
+    database: TFDTable;
     FDTable2: TFDTable;
     indexTable: TFDTable;
     reader: TFDTable;
@@ -57,23 +57,24 @@ type
     procedure backNumber(id: integer; out Data: TJSONObject);
     function checkUserPassword(id: integer; password: string): Boolean;
     procedure createReaderId(Data: TJSONObject);
-    procedure custData(id: integer; data: TJSONObject);
+    procedure deleteReaderId(Data: TJSONObject);
+    procedure custData(id: integer; Data: TJSONObject);
     procedure custView(id: integer; out Data: TJSONObject);
     procedure deleteMagazine(id: integer);
     procedure deleteNumber(id, num: integer);
-    procedure deleteUser(id: integer);
+    procedure deleteWriter(id: integer);
     procedure getView(id, num: integer; out Data: TJSONObject); overload;
     procedure getView(id: integer; out Data: TJSONObject); overload;
     procedure magazines(id: integer; out Data: TJSONObject);
-    procedure magListAll(out data: TJSONObject);
+    procedure magListAll(out Data: TJSONObject);
     procedure magData(id: integer; out Data: TJSONObject);
     function magid(name: string): integer;
     procedure magIdOff(id, magid: integer);
     procedure magIdOn(id, magid: integer);
-    procedure createMagId(id: integer; out data: TJSONObject);
+    procedure createMagId(id: integer; out Data: TJSONObject);
     procedure postMessage(id: integer; Data: TJSONObject);
     procedure createWriterId(Data: TJSONObject);
-    procedure readuserData(id: integer; out Data: TJSONObject);
+    procedure readerData(id: integer; out Data: TJSONObject);
     procedure titleView(id: integer; Data: TJSONObject);
     procedure updateWriterId(id: integer; Data: TJSONObject);
     procedure userView(id: integer; out Data: TJSONObject);
@@ -86,7 +87,7 @@ implementation
 
 uses System.Variants, System.Generics.Collections;
 
-{%CLASSGROUP 'Vcl.Controls.TControl'}
+{ %CLASSGROUP 'Vcl.Controls.TControl' }
 
 {$R *.dfm}
 
@@ -111,18 +112,15 @@ var
   mem: TStringList;
   blob: TStream;
 begin
-  with FDQuery1.Params do
-  begin
-    Clear;
-    ParamByName('id').AsInteger := id;
-  end;
   Data := TJSONObject.Create;
   d := Data;
   mem := TStringList.Create;
   with FDQuery1 do
   begin
-    Open('select file,enabled from news where magId = :id order by day;');
-    First;
+    SQL.Clear;
+    SQL.Add('select file,enabled from news where magId = :id order by lastDay;');
+    Params.ParamByName('id').AsInteger := id;
+    Open;
     while Eof = false do
     begin
       blob := CreateBlobStream(FieldByName('text'), bmRead);
@@ -143,23 +141,23 @@ begin
   result := writer.Lookup('id', id, 'password') = password;
 end;
 
-procedure TDataModule1.createMagId(id: integer; out data: TJSONObject);
+procedure TDataModule1.createMagId(id: integer; out Data: TJSONObject);
 var
   i: integer;
 begin
   FDQuery1.SQL.Clear;
   FDQuery1.SQL.Add('select MAX(magId) as count from mag;');
   FDQuery1.Open;
-  i:=FDQuery1.FieldByName('count').AsInteger+1;
+  i := FDQuery1.FieldByName('count').AsInteger + 1;
   mag.Append;
-  mag.FieldByName('magId').AsInteger:=i;
-  mag.FieldByName('day').AsDateTime:=Date;
-  mag.FieldByName('lastDay').AsDateTime:=Date;
-  mag.FieldByName('magName').AsString:=data.Values['magName'].Value;
-  mag.FieldByName('comment').AsString:=data.Values['comment'].Value;
-  mag.FieldByName('enable').AsString:=data.Values['enable'].Value;
+  mag.FieldByName('magId').AsInteger := i;
+  mag.FieldByName('day').AsDateTime := Date;
+  mag.FieldByName('lastDay').AsDateTime := Date;
+  mag.FieldByName('magName').AsString := Data.Values['magName'].Value;
+  mag.FieldByName('comment').AsString := Data.Values['comment'].Value;
+  mag.FieldByName('enable').AsString := Data.Values['enable'].Value;
   mag.Post;
-  magList.AppendRecord([id,i]);
+  magList.AppendRecord([id, i]);
 end;
 
 procedure TDataModule1.createReaderId(Data: TJSONObject);
@@ -179,14 +177,20 @@ procedure TDataModule1.DataModuleCreate(Sender: TObject);
 const
   tmp = 'create table if not exists ';
 begin
-//  FDQuery1.ExecSQL(tmp+'index(no int primary key, magId int, readerId int, writeId int);');
-  FDQuery1.ExecSQL(tmp+'mag(magId int primary key, magName varchar(20), comment varchar(50), day date, lastDay date, enable bool);');
-  FDQuery1.ExecSQL(tmp+'writer(writerId int primary key, writer varchar(20), mail varchar(20), password varchar(20));');
-  FDQuery1.ExecSQL(tmp+'reader(readerId int primary key, reader varchar(20), mail varchar(20), password varchar(20));');
-  FDQuery1.ExecSQL(tmp+'news(magId int, no int, day date, changed bool, enabled bool, primary key (magId,no));');
-  FDQuery1.ExecSQL(tmp+'indexTable(readerId int, magId int, primary key (readerId,magId));');
-  FDQuery1.ExecSQL(tmp+'magList(writerId int, magId int, primary key (writerId,magId));');
-//  index.Open;
+  // FDQuery1.ExecSQL(tmp+'index(no int primary key, magId int, readerId int, writeId int);');
+  FDQuery1.ExecSQL
+    (tmp + 'mag(magId int primary key, magName varchar(20), comment varchar(50), day date, lastDay date, enable bool);');
+  FDQuery1.ExecSQL
+    (tmp + 'writer(writerId int primary key, writer varchar(20), mail varchar(20), password varchar(20));');
+  FDQuery1.ExecSQL
+    (tmp + 'reader(readerId int primary key, reader varchar(20), mail varchar(20), password varchar(20));');
+  FDQuery1.ExecSQL
+    (tmp + 'news(magId int, no int, day date, changed bool, enabled bool, primary key (magId,no));');
+  FDQuery1.ExecSQL
+    (tmp + 'indexTable(readerId int, magId int, primary key (readerId,magId));');
+  FDQuery1.ExecSQL
+    (tmp + 'magList(writerId int, magId int, primary key (writerId,magId));');
+  // index.Open;
   mag.Open;
   writer.Open;
   reader.Open;
@@ -222,14 +226,35 @@ begin
     news.Delete;
 end;
 
-procedure TDataModule1.deleteUser(id: integer);
+procedure TDataModule1.deleteReaderId(Data: TJSONObject);
+var
+  id: integer;
+  na, ma, pa: string;
+begin
+  id := Data.Values['id'].Value.ToInteger;
+  na := Data.Values['reader'].Value;
+  ma := Data.Values['mail'].Value;
+  pa := Data.Values['password'].Value;
+  if reader.Locate('readerid;reader;mail;password', VarArrayOf([id, na, ma, pa])
+    ) = true then
+    reader.Delete;
+  FDQuery1.SQL.Clear;
+  FDQuery1.SQL.Add('select * from indextable whrer readerid = :id;');
+  FDQuery1.Params.ParamByName('id').AsInteger := id;
+  FDQuery1.Open;
+  while FDQuery1.Eof = false do
+    FDQuery1.Delete;
+end;
+
+procedure TDataModule1.deleteWriter(id: integer);
 var
   i: integer;
   list: TList<integer>;
 begin
-  FDQuery1.Params.Clear;
+  FDQuery1.SQL.Clear;
+  FDQuery1.SQL.Add('select * from maglist where userid = :id;');
   FDQuery1.Params.ParamByName('id').AsInteger := id;
-  FDQuery1.Open('select * from maglist where userid = :id;');
+  FDQuery1.Open;
   list := TList<integer>.Create;
   while FDQuery1.Eof = false do
   begin
@@ -241,15 +266,13 @@ begin
   list.Free;
 end;
 
-procedure TDataModule1.readuserData(id: integer; out Data: TJSONObject);
-var
-  i: Integer;
+procedure TDataModule1.readerData(id: integer; out Data: TJSONObject);
 begin
   if reader.Locate('readerid', id) = true then
   begin
     Data := TJSONObject.Create;
-    for i := 1 to reader.Fields.Count-1 do
-      Data.AddPair(reader.Fields[i].FieldName, reader.Fields[i].AsString);
+    Data.AddPair('name', reader.FieldByName('reader').AsString);
+    Data.AddPair('mail', reader.FieldByName('mail').AsString);
   end;
 end;
 
@@ -271,14 +294,12 @@ begin
   list.Free;
 end;
 
-procedure TDataModule1.custData(id: integer; data: TJSONObject);
-var
-  i: Integer;
+procedure TDataModule1.custData(id: integer; Data: TJSONObject);
 begin
-  if writer.Locate('writerid',id) = true then
+  if writer.Locate('writerid', id) = true then
   begin
-    data.AddPair('name',writer.FieldByName('writer').AsString);
-    data.AddPair('mail',writer.FieldByName('mail').AsString);
+    Data.AddPair('name', writer.FieldByName('writer').AsString);
+    Data.AddPair('mail', writer.FieldByName('mail').AsString);
   end;
 end;
 
@@ -348,7 +369,10 @@ begin
     Data.AddPair('comment', FDQuery1.FieldByName('comment').AsString);
     Data.AddPair('day', FDQuery1.FieldByName('day').AsString);
     Data.AddPair('last', FDQuery1.FieldByName('lastDay').AsString);
-    FDQuery1.Open('select COUNT(*) as count do mag where magid = :id;');
+    FDQuery1.SQL.Clear;
+    FDQuery1.SQL.Add('select COUNT(*) as count from indextable where magid = :id;');
+    FDQuery1.ParamByName('id').AsInteger:=id;
+    FDQuery1.Open;
     Data.AddPair('count', FDQuery1.FieldByName('count').AsString);
   end;
 end;
@@ -366,40 +390,39 @@ end;
 
 procedure TDataModule1.magIdOn(id, magid: integer);
 begin
-  if (writer.Locate('readerid', id) = true) and (mag.Locate('magid', magid) = true)
-  then
+  if (writer.Locate('readerid', id) = true) and
+    (mag.Locate('magid', magid) = true) then
     indexTable.AppendRecord([id, magid]);
 end;
 
-procedure TDataModule1.magListAll(out data: TJSONObject);
+procedure TDataModule1.magListAll(out Data: TJSONObject);
 var
-  i: Integer;
   js: TJSONObject;
   ar: TJSONArray;
   val: TJSONValue;
 begin
   mag.First;
-  ar:=TJSONArray.Create;
+  ar := TJSONArray.Create;
   while mag.Eof = false do
   begin
-      js:=TJSONObject.Create;
-      js.AddPair('magName',mag.FieldByName('magName').AsString);
-      js.AddPair('comment',mag.FieldByName('comment').AsString);
-      js.AddPair('day',mag.FieldByName('day').AsString);
-      js.AddPair('lastDay',mag.FieldByName('lastDay').AsString);
-      ar.Add(js);
+    js := TJSONObject.Create;
+    js.AddPair('magName', mag.FieldByName('magName').AsString);
+    js.AddPair('comment', mag.FieldByName('comment').AsString);
+    js.AddPair('day', mag.FieldByName('day').AsString);
+    js.AddPair('lastDay', mag.FieldByName('lastDay').AsString);
+    ar.Add(js);
     mag.Next;
   end;
-  data:=TJSONObject.Create;
+  Data := TJSONObject.Create;
   if ar.Count > 0 then
-    data.AddPair('items',ar)
+    Data.AddPair('items', ar)
   else
-    data.AddPair('items',TJSONFalse.Create);
+    Data.AddPair('items', TJSONFalse.Create);
   if mag.FieldByName('enable').AsBoolean = true then
-    val:=TJSONTrue.Create
+    val := TJSONTrue.Create
   else
-    val:=TJSONFalse.Create;
-  data.AddPair('enable',val);
+    val := TJSONFalse.Create;
+  Data.AddPair('enable', val);
 end;
 
 procedure TDataModule1.magazines(id: integer; out Data: TJSONObject);
@@ -407,27 +430,36 @@ var
   d: TJSONObject;
   val: TJSONValue;
   ar: TJSONArray;
+  list: TList<integer>;
+  i: integer;
 begin
+  d:=data;
   FDQuery1.SQL.Clear;
   FDQuery1.SQL.Add('select * from maglist where writerid = :id;');
   FDQuery1.Params.ParamByName('id').AsInteger := id;
   FDQuery1.Open;
-  ar:=TJSONArray.Create;
+  ar := TJSONArray.Create;
+  list:=TList<integer>.Create;
   while FDQuery1.Eof = false do
   begin
-    magData(FDQuery1.FieldByName('magId').AsInteger, d);
-    ar.Add(d);
+    list.Add(FDQuery1.FieldByName('magId').AsInteger);
     FDQuery1.Next;
   end;
+  for i in list do
+  begin
+    magData(i,d);
+    ar.Add(d);
+  end;
+  list.Free;
   if ar.Count = 0 then
   begin
     ar.Free;
-    val:=TJSONFalse.Create;
+    val := TJSONFalse.Create;
   end
   else
-    val:=ar;
+    val := ar;
   Data := TJSONObject.Create;
-  data.AddPair('mag',val);
+  Data.AddPair('mag', val);
 end;
 
 function TDataModule1.makeTable(Sender: TObject): TJSONObject;
@@ -479,7 +511,7 @@ begin
   if writer.Locate('mail', ma) = false then
   begin
     FDQuery1.Open('select MAX(writerId) as id from writer;');
-    i := FDQuery1.FieldByName('id').AsInteger+1;
+    i := FDQuery1.FieldByName('id').AsInteger + 1;
     na := Data.Values['name'].Value;
     ma := Data.Values['mail'].Value;
     pa := Data.Values['password'].Value;
index 610c9e3..3245fc2 100644 (file)
@@ -15,25 +15,15 @@ object WebModule1: TWebModule1
       PathInfo = '/help'
     end
     item
-      Name = 'regist'
-      PathInfo = '/regist'
-      OnAction = WebModule1registAction
-    end
-    item
       MethodType = mtGet
       Name = 'detail'
-      PathInfo = '/data'
+      PathInfo = '/backnumber'
+      OnAction = WebModule1detailAction
     end
     item
-      MethodType = mtGet
-      Name = 'readerTop'
-      PathInfo = '/reader/top'
-      OnAction = WebModule1readerTopAction
-    end
-    item
-      MethodType = mtPut
       Name = 'readerData'
       PathInfo = '/reader/data'
+      OnAction = WebModule1readerDataAction
     end
     item
       Name = 'selection'
@@ -41,12 +31,6 @@ object WebModule1: TWebModule1
       OnAction = WebModule1selectionAction
     end
     item
-      MethodType = mtGet
-      Name = 'writerTop'
-      PathInfo = '/writer/top'
-      OnAction = WebModule1writerTopAction
-    end
-    item
       Name = 'writerData'
       PathInfo = '/writer/data'
       OnAction = WebModule1writerDataAction
@@ -146,12 +130,15 @@ object WebModule1: TWebModule1
       '        </form>'
       '        <p>'#30331#37682#20013#12398#12510#12460#12472#12531#12391#12377
       '        {{#mag}}'
-      '                <p>{{magName}}'
+      '                <hr>'
+      '                <p>'#12479#12452#12488#12523'{{name}}'
       '                <p>{{comment}}'
-      '                <p>{{day}}'
-      '                <p>{{lastDay}}'
-      '                <p>{{enable}}'
-      '                <p>{{count}}'
+      '                <p>'#30331#37682#26085'{{day}}'
+      '                <p>'#26368#32066#26356#26032#26085'{{last}}'
+      '                <p>'#35501#32773#25968'{{count}}'
+      '        {{/mag}}'
+      '        {{^mag}}'
+      '                <p>0'#20874#12398#30330#34892#12391#12377
       '        {{/mag}}'
       '</body>'
       '</html')
@@ -181,4 +168,30 @@ object WebModule1: TWebModule1
     Left = 168
     Top = 80
   end
+  object backnumber: TPageProducer
+    HTMLDoc.Strings = (
+      '<!DOCTYPE html>'
+      '<html lang="en">'
+      '<head>'
+      '    <meta charset="UTF-8">'
+      
+        '    <meta name="viewport" content="width=device-width, initial-s' +
+        'cale=1.0">'
+      '    <title>Document</title>'
+      '</head>'
+      '<body>'
+      '        <p>{{name}}'
+      '        <p>{{comment}}'
+      '        {#data}'
+      '                <hr>'
+      '                {{content}}'
+      '        {/data}'
+      '        <form method=post action=/reader/select>'
+      '        <input type=submit value="'#30331#37682'">'
+      '        </form>'
+      '</body>'
+      '</html>')
+    Left = 112
+    Top = 80
+  end
 end
index 403d2d1..4df1414 100644 (file)
@@ -10,14 +10,9 @@ type
     top: TPageProducer;
     writerTop: TPageProducer;
     writerData: TPageProducer;
+    backnumber: TPageProducer;
     procedure WebModule1DefaultHandlerAction(Sender: TObject;
       Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
-    procedure WebModule1readerTopAction(Sender: TObject; Request: TWebRequest;
-      Response: TWebResponse; var Handled: Boolean);
-    procedure WebModule1registAction(Sender: TObject; Request: TWebRequest;
-      Response: TWebResponse; var Handled: Boolean);
-    procedure WebModule1writerTopAction(Sender: TObject; Request: TWebRequest;
-      Response: TWebResponse; var Handled: Boolean);
     procedure WebModuleCreate(Sender: TObject);
     procedure WebModule1writeMagAction(Sender: TObject; Request: TWebRequest;
       Response: TWebResponse; var Handled: Boolean);
@@ -25,10 +20,14 @@ type
       Response: TWebResponse; var Handled: Boolean);
     procedure WebModule1writerDataAction(Sender: TObject; Request: TWebRequest;
       Response: TWebResponse; var Handled: Boolean);
+    procedure WebModule1readerDataAction(Sender: TObject; Request: TWebRequest;
+      Response: TWebResponse; var Handled: Boolean);
+    procedure WebModule1detailAction(Sender: TObject; Request: TWebRequest;
+      Response: TWebResponse; var Handled: Boolean);
   private
     { private \90é\8c¾ }
     writerId: integer;
-    userId: integer;
+    readerId: integer;
   public
     { public \90é\8c¾ }
   end;
@@ -59,29 +58,33 @@ begin
   data.Free;
 end;
 
-procedure TWebModule1.WebModule1readerTopAction(Sender: TObject;
+procedure TWebModule1.WebModule1detailAction(Sender: TObject;
   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
 var
   data: TJSONObject;
 begin
-  if userId = 0 then
-  begin
-    Handled := false;
-    Exit;
-  end;
+  DataModule1.backnumber(Request.QueryFields.Values['id'].ToInteger, data);
   Response.ContentType := 'text/html;charset=utf-8';
-  DataModule1.userView(userId, data);
-  mustache := TSynMustache.Parse(readerTop.Content);
-  Response.Content := mustache.RenderJSON(data.ToJSON);
+  mustache := TSynMustache.Parse(backnumber.Content);
+  Response.Content := mustache.RenderJSON(data.ToString);
 end;
 
-procedure TWebModule1.WebModule1registAction(Sender: TObject;
+procedure TWebModule1.WebModule1readerDataAction(Sender: TObject;
   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
 var
   data: TJSONObject;
+  num: TJSONNumber;
 begin
   case Request.MethodType of
-    mtPOST:
+    mtGet:
+      if readerId = 0 then
+      begin
+        Handled := false;
+        Exit;
+      end;
+    mtPut:
+      ;
+    mtPost:
       with Request.ContentFields do
       begin
         data := TJSONObject.Create;
@@ -90,9 +93,25 @@ begin
         data.AddPair('name', Values['reader']);
         DataModule1.createReaderId(data);
         data.Free;
-        Response.SendRedirect('/reader/top');
+      end;
+    mtDelete:
+      with Request.ContentFields do
+      begin
+        data := TJSONObject.Create;
+        num := TJSONNumber.Create(readerId);
+        data.AddPair('id', num);
+        data.AddPair('name', Values['reader']);
+        data.AddPair('mail', Values['mail']);
+        data.AddPair('password', Values['password']);
+        DataModule1.deleteReaderId(data);
+        num.Free;
+        data.Free;
       end;
   end;
+  Response.ContentType := 'text/html;charset=utf-8';
+  DataModule1.userView(readerId, data);
+  mustache := TSynMustache.Parse(readerTop.Content);
+  Response.Content := mustache.RenderJSON(data.ToJSON);
 end;
 
 procedure TWebModule1.WebModule1selectionAction(Sender: TObject;
@@ -104,10 +123,10 @@ begin
   case Request.MethodType of
     mtGet:
       Handled := false;
-    mtPOST:
-      DataModule1.magIdOn(userId, id);
+    mtPost:
+      DataModule1.magIdOn(readerId, id);
     mtDelete:
-      DataModule1.magIdOff(userId, id);
+      DataModule1.magIdOff(readerId, id);
   end;
 end;
 
@@ -123,7 +142,7 @@ begin
   data.AddPair('enable', TJSONTrue.Create);
   DataModule1.createMagId(writerId, data);
   data.Free;
-  WebModule1writerTopAction(Sender, Request, Response, Handled);
+  Response.SendRedirect('/writer/data');
 end;
 
 procedure TWebModule1.WebModule1writerDataAction(Sender: TObject;
@@ -131,63 +150,47 @@ procedure TWebModule1.WebModule1writerDataAction(Sender: TObject;
 var
   data: TJSONObject;
 begin
-  if writerId > 0 then
-  begin
-    case Request.MethodType of
-      mtPOST:
+  case Request.MethodType of
+    mtGet:
+      if writerId = 0 then
+      begin
+        Handled := false;
+        Exit;
+      end;
+    mtPost:
+      with Request.ContentFields do
+      begin
+        data := TJSONObject.Create;
+        data.AddPair('mail', Values['mail']);
+        data.AddPair('password', Values['password']);
+        data.AddPair('name', Values['writer']);
+        DataModule1.createWriterId(data);
+        data.Free;
+      end;
+    mtPut:
+      begin
+        data := TJSONObject.Create;
         with Request.ContentFields do
         begin
-          data := TJSONObject.Create;
+          data.AddPair('writer', Values['name']);
           data.AddPair('mail', Values['mail']);
           data.AddPair('password', Values['password']);
-          data.AddPair('name', Values['writer']);
-          DataModule1.createWriterId(data);
-          data.Free;
         end;
-      mtPut:
-        begin
-          data := TJSONObject.Create;
-          with Request.ContentFields do
-          begin
-            data.AddPair('writer', Values['name']);
-            data.AddPair('mail', Values['mail']);
-            data.AddPair('password', Values['password']);
-          end;
-          DataModule1.updateWriterId(writerId, data);
-          data.Free;
-        end;
-    end;
-    data:=TJSONObject.Create;
-    DataModule1.custData(writerId,data);
-    Response.ContentType := 'text/html;charset=utf-8';
-    mustache:=TSynMustache.Parse(writerData.Content);
-    Response.Content := mustache.RenderJSON(data.ToString);
-    data.Free;
-  end
-  else
-    Handled := false;
-end;
-
-procedure TWebModule1.WebModule1writerTopAction(Sender: TObject;
-  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
-var
-  data: TJSONObject;
-begin
-  if writerId = 0 then
-  begin
-    Handled := false;
-    Exit;
+        DataModule1.updateWriterId(writerId, data);
+        data.Free;
+      end;
   end;
+  data := TJSONObject.Create;
   DataModule1.magazines(writerId, data);
   Response.ContentType := 'text/html;charset=utf-8';
   mustache := TSynMustache.Parse(writerTop.Content);
-  Response.Content := mustache.RenderJSON(data.Value);
+  Response.Content := mustache.RenderJSON(data.ToJSON);
   data.Free;
 end;
 
 procedure TWebModule1.WebModuleCreate(Sender: TObject);
 begin
-  userId := 1;
+  readerId := 1;
   writerId := 1;
 end;