using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using CodeDocu.Models;
namespace CodeDocu.Controllers
{
//------------< Namespace >------------
[Route("api/articles")]
[ApiController]
public class ArticlesController : ControllerBase
{
//--------<
Controller: ArticlesController >--------
#region init
private readonly Data.ApplicationDbContext _dbContext;
public ArticlesController(Data.ApplicationDbContext
context)
{
_dbContext = context; //*get database context
}
#endregion /init
// GET:
api/Articles ============
[Route("List")]
[HttpGet]
public async
Task<ActionResult<IEnumerable<ApiArticleListModel>>> List()
{
//-------------< Liste: GetArticles
>-------------
//< get Data from SQL-Server >
var query = new List<ArticleModel>();
try
{
var data =
_dbContext.tbl_Articles.Take(10);
query = await data.ToListAsync();
}
catch (Exception err)
{
return BadRequest(err.Message);
}
//</ get Data from SQL-Server >
//----< fill Data_to_Output >----📜📜📜
List<ApiArticleListModel>
dataList = new
List<ApiArticleListModel>();
//---< @Loop: Rows >---
foreach (var row in query)
{
//--< Row to Data >--
//< correct >
string sShort = row.TextContent;
if (sShort.Length > 255) { sShort =
sShort.Substring(0, 255); }
row.TextContent = sShort;
//</ correct >
//< Data >
ApiArticleListModel item = new ApiArticleListModel();
item.idarticle =
row.IDArticle;
item.title = row.Title;
item.textcontent = sShort;
item.folder = row.Folder;
item.imagepath = "/User_Files/Articles/Images/Image_144_0_pad.jpg"; //*144 " + item.IDArticle + "
//</ Data >
//< add >
dataList.Add(item);
//</ add >
//--</ Row to Data >--
}
//---</ @Loop: Rows >---
//----</ fill Data_to_Output >----
return dataList;
//-------------</ Liste: GetArticles
>-------------
}
// GET: api/Articles/5 ============👁👁👁
//
EventsController
[HttpGet("Read/{id}")]
public async
Task<ActionResult<ApiArticleModel>> Read(long? id)
{
//-------------< Liste: GetArticles
>-------------
if (!(id > 0))
{
return NotFound();
}
long IDArticle = System.Convert.ToInt64(id);
//--< Get User ID >--
//internal referenz-Number for tracking
in tables
String sIDUser = Request.Headers["sub"]; //*ID in aspUsers wie: 1428ca0b-186c..
//--</ Get User ID >--
//--< Get Data >--
var article = await
_dbContext.tbl_Articles.SingleOrDefaultAsync(article => article.IDArticle
== IDArticle);
if (article == null)
{
return NotFound(); //:break
}
//--</ Get Data >--
//----< fill Data_to_Output >----
//< Data >
ApiArticleModel apiArticle = new ApiArticleModel();
apiArticle.idarticle =
article.IDArticle;
if (sIDUser == article.IDUser) {
apiArticle.isowner = true; } else { apiArticle.isowner = false; }
apiArticle.iduser =
article.IDUser;
apiArticle.title = article.Title;
apiArticle.htmlcontent =
article.HtmlContent;
apiArticle.folder =
article.Folder;
apiArticle.keywords = article.Keywords;
apiArticle.imagepath = "/User_Files/Articles/Images/Image_144_0_pad.jpg"; //*144 " + item.IDArticle + "
//</ Data >
//----</ fill Data_to_Output >----
return apiArticle;
//-------------</
Liste: GetArticles >-------------
}
// PUT:
api/tbl_Articles/5 ============== ✍✍✍
[HttpPut("Save/{id}")] //*ok
//[HttpPut("{id}")] //*ok
[Authorize]
[ValidateAntiForgeryToken]
public async
Task<ActionResult<ApiArticleModel>> Save(int id, ApiArticleModel apiArticle)
{
//int IDArticle = id;
var test = Request.Path;
// -------------< Edit_Postback()
> -------------
if (id != apiArticle.idarticle)
{
return BadRequest("Bad");
}
//--< Get User ID >--
//internal referenz-Number for tracking
in tables
String sIDUser =
User.getUserId(); //*ID in aspUsers wie:
1428ca0b-186c..
if (sIDUser == "") return BadRequest();
//--</ Get User ID >--
//< get_database >
ArticleModel article;
if (id > 0)
{
article = await
_dbContext.tbl_Articles.SingleOrDefaultAsync(a => a.IDArticle == id); //#changed to async 09.02.2021
if (article== null) { return Content("No Record found for ID=" + id); }
//< check Owner >
String IDOwner =
article.IDUser;
if (IDOwner != sIDUser) {
return
StatusCode(StatusCodes.Status403Forbidden,"user is not owner.");
}
//</ check Owner >
}
else
{
article = new ArticleModel();
article.IDUser = sIDUser;
}
//</ get_database >
//----< Save Note-Data >----
//< get >
string sHTML = apiArticle.htmlcontent;
string sTitle = apiArticle.title;
string sFolder = apiArticle.folder;
string sKeywords = apiArticle.keywords;
//</ get >
//< correct >
//*SQL injection, script blocks..
sTitle =
Correct_Methods.correct_In_String_Strong(sTitle);
sFolder =
Correct_Methods.correct_In_String_Strong(sFolder);
sKeywords =
Correct_Methods.correct_In_String_Strong(sKeywords);
sHTML =
Correct_Methods.correct_In_String_Minimal(sHTML);
//</ correct >
//< Convert >
sHTML =
Correct_Methods.replace_Text_To_Links(sHTML);
sHTML =
Correct_Methods.replace_Youtube(sHTML);
string sText =
Html_Methods.HTML_to_Text(sHTML);
//</
Convert >
//--<
data >--
//article.IDUser
= *oben gesetzt
article.Title = sTitle;
article.HtmlContent = sHTML;
article.TextContent = sText;
article.Folder = sFolder;
article.Keywords = sKeywords;
apiArticle.isowner = true;
article.DtEdit = DateTime.Now;
//note.IsDraft = false; //try allways on
//--</ data >--
try
{
if (id > 0)
{
//< update Server >
_dbContext.Update(article);
//</ update Server >
}
else
{
//< Add on Server >
_dbContext.tbl_Articles.Add(article);
_dbContext.SaveChanges();
id = article.IDArticle;
//</ Add on Server >
}
//await _dbContext.SaveChangesAsync(true);
}
catch (DbUpdateConcurrencyException)
{
return Content("Error in saving Note with
ID=" + id);
}
//----</ Save Note-Data >----
//----< Delete Images not in HTML
>----
//List<Note_Image_Model>
list_Images = _dbContext.tbl_Notes_Images.Where(img => img.IDNote ==
IDNote).ToList();
//foreach (Note_Image_Model image in
list_Images)
//{
//
string sImage_BaseTag = "Image_" + IDNote + "_" +
image.ImageNr;
//
if (sHTML.IndexOf(sImage_BaseTag) < 0)
//
{
//
//< delete Image_sized >
//
//--< Image >--
//
string folder_Path_Images = _hostingEnvironment.WebRootPath +
"\\User_Files\\Notes\\Images\\";
//
File_Methods.Delete_File(folder_Path_Images + "\\" +
sImage_BaseTag + "_mini.jpg");
//
File_Methods.Delete_File(folder_Path_Images + "\\" +
sImage_BaseTag + "_pad.jpg");
//
File_Methods.Delete_File(folder_Path_Images + "\\" +
sImage_BaseTag + "_blog.jpg");
//
File_Methods.Delete_File(folder_Path_Images + "\\" +
sImage_BaseTag + ".jpg");
//
//</ delete Image_sized >
//
_dbContext.tbl_Notes_Images.Remove(image);
//
}
//}
//----</ Delete Images not in HTML
>----
//< save note+images >
await _dbContext.SaveChangesAsync(true);
//</ save note+images >
//< load Output-Data >
//ApiArticleModel apiData = new
ApiArticleModel();
apiArticle.idarticle =
article.IDArticle;
apiArticle.iduser = sIDUser; //#todo: check
apiArticle.title = article.Title;
apiArticle.htmlcontent = article.HtmlContent;
apiArticle.folder =
article.Folder;
apiArticle.keywords =
article.Keywords;
apiArticle.dtcreated = article.DtCreated;
apiArticle.dtedit =
article.DtEdit;
//</ load Output-Data >
// -------------</ Edit_Postback()
> -------------
return apiArticle;
}
[HttpGet("images/{id}")]
public async
Task<ActionResult<ApiArticleModel>> Images(long id)
{
Console.WriteLine("Images " + Request.Path);
return new JsonResult(new { route = "Images" });
}
//----< Delete Images not in HTML
>----
//List<Note_Image_Model>
list_Images = _dbContext.tbl_Notes_Images.Where(img => img.IDNote ==
IDNote).ToList();
//foreach (Note_Image_Model image in
list_Images)
//{
//
string sImage_BaseTag = "Image_" + IDNote + "_" +
image.ImageNr;
//
if (sHTML.IndexOf(sImage_BaseTag) < 0)
//
{
//
//< delete Image_sized >
//
//--< Image >--
//
string folder_Path_Images = _hostingEnvironment.WebRootPath +
"\\User_Files\\Notes\\Images\\";
//
File_Methods.Delete_File(folder_Path_Images + "\\" +
sImage_BaseTag + "_mini.jpg");
//
File_Methods.Delete_File(folder_Path_Images + "\\" +
sImage_BaseTag + "_pad.jpg");
//
File_Methods.Delete_File(folder_Path_Images + "\\" +
sImage_BaseTag + "_blog.jpg");
//
File_Methods.Delete_File(folder_Path_Images + "\\" +
sImage_BaseTag + ".jpg");
//
//</ delete Image_sized >
//
_dbContext.tbl_Notes_Images.Remove(image);
//
}
//}
//----</ Delete Images not in HTML
>----
//< save note+images >
await _dbContext.SaveChangesAsync(true);
//</ save note+images >
//< load Output-Data >
//ApiArticleModel apiData = new
ApiArticleModel();
apiArticle.idarticle =
article.IDArticle;
apiArticle.iduser = sIDUser; //#todo: check
apiArticle.title = article.Title;
apiArticle.htmlcontent = article.HtmlContent;
apiArticle.folder =
article.Folder;
apiArticle.keywords =
article.Keywords;
apiArticle.dtcreated =
article.DtCreated;
apiArticle.dtedit = article.DtEdit;
//</ load Output-Data >
//
-------------</ Edit_Postback() > -------------
return apiArticle;
}
[HttpGet("images/{id}")]
public async
Task<ActionResult<ApiArticleModel>> Images(long id)
{
Console.WriteLine("Images " + Request.Path);
return new JsonResult(new { route = "Images" });
}
// DELETE:
api/tbl_Articles/5
[HttpDelete]
//[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int id)
{
var tblContent = await _dbContext.tbl_Articles.FindAsync(id);
if (tblContent == null)
{
return NotFound();
}
_dbContext.tbl_Articles.Remove(tblContent);
await _dbContext.SaveChangesAsync();
return NoContent();
}
private bool TblContentExists(int id)
{
return _dbContext.tbl_Articles.Any(e =>
e.IDArticle == id);
}
//----------</
Controller: ArticlesController >--------
}
//------------</
Namespace >------------
}
|