OSDN Git Service

エラーが解決できないので再起動してコミット
authoryamat0jp <terukohietori@gmail.com>
Sat, 7 Mar 2020 11:15:32 +0000 (20:15 +0900)
committeryamat0jp <terukohietori@gmail.com>
Sat, 7 Mar 2020 11:15:32 +0000 (20:15 +0900)
Unit1.dfm
Unit1.pas
WebModuleUnit1.dfm
WebModuleUnit1.pas

index 4a1b41f..e19a88d 100644 (file)
--- a/Unit1.dfm
+++ b/Unit1.dfm
@@ -9,7 +9,7 @@ object DataModule1: TDataModule1
     UpdateOptions.UpdateTableName = 'database'
     TableName = 'database'
     Left = 48
-    Top = 136
+    Top = 128
   end
   object indexTable: TFDTable
     IndexFieldNames = 'readerId;magId'
@@ -94,7 +94,7 @@ object DataModule1: TDataModule1
     Top = 80
   end
   object news: TFDTable
-    IndexFieldNames = 'magId;no'
+    IndexFieldNames = 'no;magId'
     Connection = MagazineConnection
     UpdateOptions.UpdateTableName = 'news'
     TableName = 'news'
@@ -106,11 +106,10 @@ object DataModule1: TDataModule1
       ProviderFlags = [pfInUpdate, pfInWhere, pfInKey]
       Required = True
     end
-    object newsno: TIntegerField
-      FieldName = 'no'
-      Origin = 'no'
-      ProviderFlags = [pfInUpdate, pfInWhere, pfInKey]
-      Required = True
+    object newsnewsId: TIntegerField
+      FieldKind = fkCalculated
+      FieldName = 'newsId'
+      Calculated = True
     end
     object newsday: TDateField
       AutoGenerateValue = arDefault
@@ -202,4 +201,12 @@ object DataModule1: TDataModule1
       Origin = '`enable`'
     end
   end
+  object image: TFDTable
+    IndexFieldNames = 'id'
+    Connection = MagazineConnection
+    UpdateOptions.UpdateTableName = 'image'
+    TableName = 'image'
+    Left = 48
+    Top = 184
+  end
 end
index 45a83a9..c0cbd97 100644 (file)
--- a/Unit1.pas
+++ b/Unit1.pas
@@ -29,7 +29,6 @@ type
     magListwriterId: TIntegerField;
     magListmagId: TIntegerField;
     newsmagId: TIntegerField;
-    newsno: TIntegerField;
     newsday: TDateField;
     newschanged: TBooleanField;
     newsenabled: TBooleanField;
@@ -46,6 +45,8 @@ type
     magday: TDateField;
     maglastDay: TDateField;
     magenable: TBooleanField;
+    image: TFDTable;
+    newsnewsId: TIntegerField;
     procedure DataModuleCreate(Sender: TObject);
   private
     { Private \90é\8c¾ }
@@ -66,6 +67,7 @@ type
     procedure deleteWriter(id: integer);
     procedure getView(id, num: integer; out Data: TJSONObject); overload;
     procedure getView(id: integer; out Data: TJSONObject); overload;
+    procedure viewList(id: integer; out Data: TJSONObject);
     procedure magazines(id: integer; out Data: TJSONObject);
     procedure magListAll(out Data: TJSONObject);
     procedure magData(id: integer; out Data: TJSONObject);
@@ -81,6 +83,9 @@ type
     procedure userView(id: integer; out Data: TJSONObject);
     function loginReader(data: TJSONObject): integer;
     function loginWriter(data: TJSONObject): integer;
+    procedure mainView(id: integer; out data: TJSONObject);
+    procedure imageView(id: integer; out data: TJSONObject);
+    function imageId(data: TJSONObject): integer;
   end;
 
 var
@@ -188,24 +193,26 @@ const
 begin
 //  FDQuery1.ExecSQL(tmp+'database(number 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);');
+    (tmp + 'mag(magId int primary key, magNum varchar(10), 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));');
+    (tmp + 'news(magId int, newsId int, day date, changed bool, enabled bool, primary key (magId,newsId));');
   FDQuery1.ExecSQL
     (tmp + 'indexTable(readerId int, magId int, primary key (readerId,magId));');
   FDQuery1.ExecSQL
     (tmp + 'magList(writerId int, magId int, primary key (writerId,magId));');
-//  database.Open;
+  FDQuery1.ExecSQL(tmp+'image(id int primary key, writerId int, number int, name varchar(20), data text);');
+//  database.Open;      \83V\83\83\83b\83t\83\8b\89Â\94\\82É\82·\82é\82½\82ß\92Ê\82µ\94Ô\8d\86\82ð\95t\82¯\82½\82Ù\82¤\82ª\97Ç\82¢\82ç\82µ\82¢
   mag.Open;
   writer.Open;
   reader.Open;
   news.Open;
   indexTable.Open;
   magList.Open;
+  image.Open;
 end;
 
 procedure TDataModule1.deleteMagazine(id: integer);
@@ -299,6 +306,11 @@ begin
   data.AddPair('mag',ar);
 end;
 
+procedure TDataModule1.viewList(id: integer; out Data: TJSONObject);
+begin
+
+end;
+
 procedure TDataModule1.custData(id: integer; Data: TJSONObject);
 begin
   if writer.Locate('writerid', id) = true then
@@ -361,6 +373,26 @@ begin
   Data := makeTable(FDQuery1);
 end;
 
+function TDataModule1.imageId(data: TJSONObject): integer;
+var
+  writerId, number: integer;
+begin
+  writerId:=data.Values['id'].Value.ToInteger;
+  number:=data.Values['number'].Value.ToInteger;
+  if image.Locate('writerId;number',VarArrayOf([writerId,number])) = true then
+    result:=image.FieldByName('id').AsInteger;
+end;
+
+procedure TDataModule1.imageView(id: integer; out data: TJSONObject);
+begin
+  data:=TJSONObject.Create;
+  if image.Locate('id',id) = true then
+  begin
+    data.AddPair('name',image.FieldByName('name').AsString);
+    data.AddPair('data',image.FieldByName('data').AsString);
+  end;
+end;
+
 function TDataModule1.loginReader(data: TJSONObject): integer;
 var
   ma,pa: string;
@@ -462,6 +494,25 @@ begin
   Data.AddPair('enable', val);
 end;
 
+procedure TDataModule1.mainView(id: integer; out data: TJSONObject);
+begin
+  data:=TJSONObject.Create;
+  FDQuery1.SQL.Clear;
+  FDQuery1.SQL.Add('select * from news,magId where news.magId = magName.magId');
+  FDQuery1.SQL.Add(' and magId = :id order by day;');
+  FDQUery1.Params.ParamByName('id').AsInteger:=id;
+  while FDQUery1.Eof = false do
+  begin
+    if FDQuery1.FieldByName('enebled').AsBoolean = true then
+    begin
+      if FDQuery1.FieldByName('changed').AsBoolean = true then
+        data.AddPair('changed',TJSONTrue.Create);
+      data.AddPair('',FDQuery1.FieldByName('').AsString);
+    end;
+    FDQuery1.Next;
+  end;
+end;
+
 procedure TDataModule1.magazines(id: integer; out Data: TJSONObject);
 var
   d: TJSONObject;
@@ -501,27 +552,35 @@ end;
 
 function TDataModule1.makeTable(Sender: TObject): TJSONObject;
 var
+  day: string;
   blob: TStream;
   mem: TStringList;
+  ar: TJSONArray;
+  d: TJSONObject;
 begin
-  result := TJSONObject.Create;
+  ar:=TJSONArray.Create;
   mem := TStringList.Create;
   with Sender as TFDQuery do
   begin
     First;
     while Eof = false do
     begin
+      d:=TJSONObject.Create;
+      ar.Add(d);
+      day := FieldByName('day').AsString;
       if FieldByName('updated').AsBoolean = true then
-        result.AddPair('hint', Format('\82±\82Ì\8bL\8e\96\82Í\8dX\90V\82³\82ê\82Ü\82µ\82½:(%s)\93ú.',
-          [FieldByName('day').AsString]));
+        d.AddPair('hint', Format('\82±\82Ì\8bL\8e\96\82Í\8dX\90V\82³\82ê\82Ü\82µ\82½:(%s)\93ú.',[day]));
       blob := CreateBlobStream(FieldByName('file'), bmRead);
       mem.LoadFromStream(blob);
       blob.Free;
-      result.AddPair('text', mem.Text);
+      d.AddPair('text',mem.Text);
+      d.AddPair('day',day);
       Next;
     end;
   end;
   mem.Free;
+  result := TJSONObject.Create;
+  result.AddPair('news',ar);
 end;
 
 procedure TDataModule1.postMessage(id: integer; Data: TJSONObject);
index 6d74260..ff9f2be 100644 (file)
@@ -21,14 +21,19 @@ object WebModule1: TWebModule1
       OnAction = WebModule1detailAction
     end
     item
+      Name = 'selection'
+      PathInfo = '/reader/select'
+      OnAction = WebModule1selectionAction
+    end
+    item
       Name = 'readerData'
       PathInfo = '/reader/data'
       OnAction = WebModule1readerDataAction
     end
     item
-      Name = 'selection'
-      PathInfo = '/reader/select'
-      OnAction = WebModule1selectionAction
+      Name = 'readerTop'
+      PathInfo = '/reader/top'
+      OnAction = WebModule1readerTopAction
     end
     item
       Name = 'writerData'
@@ -36,17 +41,17 @@ object WebModule1: TWebModule1
       OnAction = WebModule1writerDataAction
     end
     item
+      Name = 'writerTop'
+      PathInfo = '/writer/top'
+      OnAction = WebModule1writerTopAction
+    end
+    item
       MethodType = mtPost
       Name = 'writeMag'
       PathInfo = '/writer/regist'
       OnAction = WebModule1writeMagAction
     end
     item
-      Name = 'writerTop'
-      PathInfo = '/writer/top'
-      OnAction = WebModule1writerTopAction
-    end
-    item
       MethodType = mtPost
       Name = 'login'
       PathInfo = '/reader/login'
@@ -57,6 +62,22 @@ object WebModule1: TWebModule1
       Name = 'logout'
       PathInfo = '/logout'
       OnAction = WebModule1logoutAction
+    end
+    item
+      Name = 'mainView'
+      PathInfo = '/reader/top'
+      OnAction = WebModule1mainViewAction
+    end
+    item
+      MethodType = mtGet
+      Name = 'image'
+      PathInfo = '/img'
+      OnAction = WebModule1imageAction
+    end
+    item
+      Enabled = False
+      Name = 'sumbnail'
+      PathInfo = '/sum'
     end>
   Height = 225
   Width = 415
@@ -253,4 +274,30 @@ object WebModule1: TWebModule1
     Left = 112
     Top = 80
   end
+  object mainView: TPageProducer
+    HTMLDoc.Strings = (
+      '<!DOCTYPE html>'
+      '<html lang="ja">'
+      '<head>'
+      '    <meta charset="UTF-8">'
+      
+        '    <meta name="viewport" content="width=device-width, initial-s' +
+        'cale=1.0">'
+      '    <title>Document</title>'
+      '</head>'
+      '<body>'
+      '        <p>'#12491#12517#12540#12473#12398#25968#12293#12434#12362#27005#12375#12415#12367#12384#12373#12356
+      '        {{#news}}'
+      '        <hr>'
+      '                <p>[{{magName}}] ({{day}})'
+      '                {{text}}'
+      '                {{#updated}}'
+      '                        <p>{{hint}}'
+      '                {{/updated}}'
+      '        {{/news}}'
+      '</body>'
+      '</html>')
+    Left = 240
+    Top = 24
+  end
 end
index a7767f0..f9bdddc 100644 (file)
@@ -11,6 +11,7 @@ type
     writerTop: TPageProducer;
     writerData: TPageProducer;
     backnumber: TPageProducer;
+    mainView: TPageProducer;
     procedure WebModule1DefaultHandlerAction(Sender: TObject;
       Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
     procedure WebModuleCreate(Sender: TObject);
@@ -30,6 +31,12 @@ type
       Response: TWebResponse; var Handled: Boolean);
     procedure WebModule1logoutAction(Sender: TObject; Request: TWebRequest;
       Response: TWebResponse; var Handled: Boolean);
+    procedure WebModule1mainViewAction(Sender: TObject; Request: TWebRequest;
+      Response: TWebResponse; var Handled: Boolean);
+    procedure WebModule1imageAction(Sender: TObject; Request: TWebRequest;
+      Response: TWebResponse; var Handled: Boolean);
+    procedure WebModule1readerTopAction(Sender: TObject; Request: TWebRequest;
+      Response: TWebResponse; var Handled: Boolean);
   private
     { private \90é\8c¾ }
     writerId: integer;
@@ -43,7 +50,7 @@ var
 
 implementation
 
-uses SynMustache, SynCommons, System.JSON, Unit1;
+uses SynMustache, SynCommons, System.JSON, Unit1, System.NetEncoding;
 
 { %CLASSGROUP 'Vcl.Controls.TControl' }
 
@@ -83,6 +90,28 @@ begin
   Response.Content := mustache.RenderJSON(data.ToString);
 end;
 
+procedure TWebModule1.WebModule1imageAction(Sender: TObject;
+  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+var
+  id: integer;
+  data: TJSONObject;
+  mem: TMemoryStream;
+  raw: TBytes;
+begin
+  data:=TJSONObject.Create;
+  data.AddPair('id',TJSONNumber.Create(Request.QueryFields.Values['id']));
+  data.AddPair('number',TJSONNumber.Create(Request.QueryFields.Values['num']));
+  id :=DataModule1.imageId(data);
+  DataModule1.imageView(id,data);
+  mem:=TMemoryStream.Create;
+  raw:=TNetEncoding.Base64.DecodeStringToBytes(data.Values['data'].Value);
+  mem.WriteBuffer(raw,Length(raw));
+  mem.Position:=0;
+  Finalize(raw);
+  Response.ContentType:='jpeg/image';
+  Response.ContentStream:=mem;
+end;
+
 procedure TWebModule1.WebModule1loginAction(Sender: TObject;
   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
 var
@@ -107,6 +136,17 @@ begin
   Handled:=false;
 end;
 
+procedure TWebModule1.WebModule1mainViewAction(Sender: TObject;
+  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+var
+  data: TJSONObject;
+begin
+  Response.ContentType:='text/html;charset=utf-8';
+  DataModule1.mainView(readerId,data);
+  mustache:=TSynMustache.Parse(mainView.Content);
+  Response.Content := mustache.RenderJSON(data.ToJSON);
+end;
+
 procedure TWebModule1.WebModule1readerDataAction(Sender: TObject;
   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
 var
@@ -160,6 +200,17 @@ begin
   Response.Content := mustache.RenderJSON(data.ToJSON);
 end;
 
+procedure TWebModule1.WebModule1readerTopAction(Sender: TObject;
+  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+var
+  data: TJSONObject;
+begin
+  Response.ContentType:='text/html;charset=utf-8';
+  DataModule1.getView(readerId,data);
+  mustache:=TSynMustache.Parse(mainView.Content);
+  Response.Content:=mustache.RenderJSON(data.ToJSON);
+end;
+
 procedure TWebModule1.WebModule1selectionAction(Sender: TObject;
   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
 var