moving banner sites code out of GanjoorService/Controller

This commit is contained in:
Hamid Reza Mohammadi 2021-05-18 21:28:26 +04:30
parent d0dc5972ae
commit afb21e566a
11 changed files with 642 additions and 510 deletions

View File

@ -40,7 +40,7 @@ namespace GanjooRazor.Areas.Admin.Pages
{
if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
{
var response = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/site/banners");
var response = await secureClient.GetAsync($"{APIRoot.Url}/api/banners");
if (!response.IsSuccessStatusCode)
{
LastMessage = await response.Content.ReadAsStringAsync();
@ -78,7 +78,7 @@ namespace GanjooRazor.Areas.Admin.Pages
TargetUrl = url,
Active = active
};
HttpResponseMessage response = await secureClient.PutAsync($"{APIRoot.Url}/api/ganjoor/site/banner/{id}", new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json"));
HttpResponseMessage response = await secureClient.PutAsync($"{APIRoot.Url}/api/banners/{id}", new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json"));
if (!response.IsSuccessStatusCode)
{
LastMessage = await response.Content.ReadAsStringAsync();
@ -102,7 +102,7 @@ namespace GanjooRazor.Areas.Admin.Pages
{
if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
{
var response = await secureClient.DeleteAsync($"{APIRoot.Url}/api/ganjoor/site/banner?id={id}");
var response = await secureClient.DeleteAsync($"{APIRoot.Url}/api/banners?id={id}");
if (response.StatusCode != HttpStatusCode.OK)
{
@ -133,7 +133,7 @@ namespace GanjooRazor.Areas.Admin.Pages
var fileContent = stream.ToArray();
form.Add(new ByteArrayContent(fileContent, 0, fileContent.Length), Upload.Image.FileName, Upload.Image.FileName);
HttpResponseMessage response = await secureClient.PostAsync($"{APIRoot.Url}/api/ganjoor/site/banner", form);
HttpResponseMessage response = await secureClient.PostAsync($"{APIRoot.Url}/api/banners", form);
if (!response.IsSuccessStatusCode)
{
LastMessage = await response.Content.ReadAsStringAsync();

View File

@ -530,7 +530,7 @@ namespace GanjooRazor.Pages
if (IsPoemPage)
{
var bannerQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/site/banner");
var bannerQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/banners/random");
bannerQuery.EnsureSuccessStatusCode();
string bannerResponse = await bannerQuery.Content.ReadAsStringAsync();
if (!string.IsNullOrEmpty(bannerResponse))

View File

@ -8,7 +8,7 @@
},
"AllowedHosts": "*",
"GoogleAnalyticsCode": "",
"APIRoot": "https://ganjgah.ir",
"APIRoot": "http://localhost:3439",
"GlobalAPIRoot": "https://ganjgah.ir",
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=museum;Trusted_Connection=True;MultipleActiveResultSets=true"

View File

@ -1000,179 +1000,7 @@ namespace RMuseum.Controllers
return Ok(res.Result);
}
/// <summary>
/// add site banner (send form) with these fields: alt, url and an image attachment
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("site/banner")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.Banners)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorSiteBannerViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
public async Task<IActionResult> AddSiteBanner()
{
try
{
if (!Request.Form.TryGetValue("alt", out Microsoft.Extensions.Primitives.StringValues alt))
{
return BadRequest("alt is null");
}
if (!Request.Form.TryGetValue("url", out Microsoft.Extensions.Primitives.StringValues url))
{
return BadRequest("url is null");
}
if(Request.Form.Files.Count != 1)
{
return BadRequest("a single image is not provided");
}
using Stream stream = Request.Form.Files[0].OpenReadStream();
RServiceResult<GanjoorSiteBannerViewModel> res = await _ganjoorService.AddSiteBanner(stream, Request.Form.Files[0].FileName, alt.ToString(), url.ToString(), false);
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
return Ok(res.Result);
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// modify site banner
/// </summary>
/// <param name="id"></param>
/// <param name="model"></param>
/// <returns></returns>
[HttpPut]
[Route("site/banner/{id}")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.Banners)]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> ModifySiteBanner(int id, [FromBody] GanjoorSiteBannerModifyViewModel model)
{
try
{
RServiceResult<bool> res = await _ganjoorService.ModifySiteBanner(id, model.AlternateText, model.TargetUrl, model.Active);
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
if(!res.Result)
{
return NotFound();
}
return Ok();
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// delete site banner
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete]
[Route("site/banner")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.Banners)]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> DeleteSiteBanner(int id)
{
try
{
RServiceResult<bool> res = await _ganjoorService.DeleteSiteBanner(id);
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
if (!res.Result)
{
return NotFound();
}
return Ok();
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// get all defined site banners
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("site/banners")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.Banners)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorSiteBannerViewModel[]))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
public async Task<IActionResult> GetSiteBanners()
{
try
{
RServiceResult<GanjoorSiteBannerViewModel[]> res = await _ganjoorService.GetSiteBanners();
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
return Ok(res.Result);
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// get a random active site banner
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("site/banner")]
[AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorSiteBannerViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetARandomActiveSiteBanner()
{
try
{
RServiceResult<GanjoorSiteBannerViewModel> res = await _ganjoorService.GetARandomActiveSiteBanner();
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
return Ok(res.Result); //this might be null
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// examine site pages for broken links

View File

@ -0,0 +1,203 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using RMuseum.Models.Auth.Memory;
using RMuseum.Models.Ganjoor.ViewModels;
using RMuseum.Services;
using RSecurityBackend.Models.Generic;
using System;
using System.IO;
using System.Net;
using System.Threading.Tasks;
namespace RMuseum.Controllers
{
[Produces("application/json")]
[Route("api/banners")]
public class SiteBannersController : Controller
{
/// <summary>
/// add site banner (send form) with these fields: alt, url and an image attachment
/// </summary>
/// <returns></returns>
[HttpPost]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.Banners)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorSiteBannerViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
public async Task<IActionResult> AddSiteBanner()
{
try
{
if (!Request.Form.TryGetValue("alt", out Microsoft.Extensions.Primitives.StringValues alt))
{
return BadRequest("alt is null");
}
if (!Request.Form.TryGetValue("url", out Microsoft.Extensions.Primitives.StringValues url))
{
return BadRequest("url is null");
}
if (Request.Form.Files.Count != 1)
{
return BadRequest("a single image is not provided");
}
using Stream stream = Request.Form.Files[0].OpenReadStream();
RServiceResult<GanjoorSiteBannerViewModel> res = await _bannersService.AddSiteBanner(stream, Request.Form.Files[0].FileName, alt.ToString(), url.ToString(), false);
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
return Ok(res.Result);
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// modify site banner
/// </summary>
/// <param name="id"></param>
/// <param name="model"></param>
/// <returns></returns>
[HttpPut("{id}")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.Banners)]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> ModifySiteBanner(int id, [FromBody] GanjoorSiteBannerModifyViewModel model)
{
try
{
RServiceResult<bool> res = await _bannersService.ModifySiteBanner(id, model.AlternateText, model.TargetUrl, model.Active);
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
if (!res.Result)
{
return NotFound();
}
return Ok();
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// delete site banner
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.Banners)]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> DeleteSiteBanner(int id)
{
try
{
RServiceResult<bool> res = await _bannersService.DeleteSiteBanner(id);
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
if (!res.Result)
{
return NotFound();
}
return Ok();
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// get all defined site banners
/// </summary>
/// <returns></returns>
[HttpGet]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.Banners)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorSiteBannerViewModel[]))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
public async Task<IActionResult> GetSiteBanners()
{
try
{
RServiceResult<GanjoorSiteBannerViewModel[]> res = await _bannersService.GetSiteBanners();
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
return Ok(res.Result);
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// get a random active site banner
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("random")]
[AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorSiteBannerViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetARandomActiveSiteBanner()
{
try
{
RServiceResult<GanjoorSiteBannerViewModel> res = await _bannersService.GetARandomActiveSiteBanner();
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
return Ok(res.Result); //this might be null
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// Ganjoor Service
/// </summary>
protected readonly ISiteBannersService _bannersService;
/// <summary>
/// constructor
/// </summary>
/// <param name="bannersService"></param>
public SiteBannersController(ISiteBannersService bannersService)
{
_bannersService = bannersService;
}
}
}

View File

@ -885,39 +885,6 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.AddSiteBanner">
<summary>
add site banner (send form) with these fields: alt, url and an image attachment
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.ModifySiteBanner(System.Int32,RMuseum.Models.Ganjoor.ViewModels.GanjoorSiteBannerModifyViewModel)">
<summary>
modify site banner
</summary>
<param name="id"></param>
<param name="model"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.DeleteSiteBanner(System.Int32)">
<summary>
delete site banner
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetSiteBanners">
<summary>
get all defined site banners
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetARandomActiveSiteBanner">
<summary>
get a random active site banner
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.HealthCheckContents">
<summary>
examine site pages for broken links
@ -1288,6 +1255,50 @@
</summary>
<param name="roleService"></param>
</member>
<member name="M:RMuseum.Controllers.SiteBannersController.AddSiteBanner">
<summary>
add site banner (send form) with these fields: alt, url and an image attachment
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.SiteBannersController.ModifySiteBanner(System.Int32,RMuseum.Models.Ganjoor.ViewModels.GanjoorSiteBannerModifyViewModel)">
<summary>
modify site banner
</summary>
<param name="id"></param>
<param name="model"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.SiteBannersController.DeleteSiteBanner(System.Int32)">
<summary>
delete site banner
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.SiteBannersController.GetSiteBanners">
<summary>
get all defined site banners
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.SiteBannersController.GetARandomActiveSiteBanner">
<summary>
get a random active site banner
</summary>
<returns></returns>
</member>
<member name="F:RMuseum.Controllers.SiteBannersController._bannersService">
<summary>
Ganjoor Service
</summary>
</member>
<member name="M:RMuseum.Controllers.SiteBannersController.#ctor(RMuseum.Services.ISiteBannersService)">
<summary>
constructor
</summary>
<param name="bannersService"></param>
</member>
<member name="T:RMuseum.DbContext.RMuseumDbContext">
<summary>
Museum Database Context
@ -6785,46 +6796,6 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.AddSiteBanner(System.IO.Stream,System.String,System.String,System.String,System.Boolean)">
<summary>
Add site banner
</summary>
<param name="imageStream"></param>
<param name="fileName"></param>
<param name="alternateText"></param>
<param name="targetUrl"></param>
<param name="active"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.ModifySiteBanner(System.Int32,System.String,System.String,System.Boolean)">
<summary>
modify site banner
</summary>
<param name="id"></param>
<param name="alternateText"></param>
<param name="targetUrl"></param>
<param name="active"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.DeleteSiteBanner(System.Int32)">
<summary>
delete site banner
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.GetSiteBanners">
<summary>
get site banners
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.GetARandomActiveSiteBanner">
<summary>
get a random site banner
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.Faal(System.Int32,System.Boolean)">
<summary>
get a random poem (2 = from hafez)
@ -7937,46 +7908,6 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.AddSiteBanner(System.IO.Stream,System.String,System.String,System.String,System.Boolean)">
<summary>
Add site banner
</summary>
<param name="imageStream"></param>
<param name="fileName"></param>
<param name="alternateText"></param>
<param name="targetUrl"></param>
<param name="active"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.ModifySiteBanner(System.Int32,System.String,System.String,System.Boolean)">
<summary>
modify site banner
</summary>
<param name="id"></param>
<param name="alternateText"></param>
<param name="targetUrl"></param>
<param name="active"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.DeleteSiteBanner(System.Int32)">
<summary>
delete site banner
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetSiteBanners">
<summary>
get site banners
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetARandomActiveSiteBanner">
<summary>
get a random site banner
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.HealthCheckContents">
<summary>
examine site pages for broken links
@ -8280,6 +8211,74 @@
</summary>
<param name="roleManager"></param>
</member>
<member name="T:RMuseum.Services.Implementation.SiteBannersService">
<summary>
ganjoor.net banners service
</summary>
</member>
<member name="M:RMuseum.Services.Implementation.SiteBannersService.AddSiteBanner(System.IO.Stream,System.String,System.String,System.String,System.Boolean)">
<summary>
Add site banner
</summary>
<param name="imageStream"></param>
<param name="fileName"></param>
<param name="alternateText"></param>
<param name="targetUrl"></param>
<param name="active"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.SiteBannersService.ModifySiteBanner(System.Int32,System.String,System.String,System.Boolean)">
<summary>
modify site banner
</summary>
<param name="id"></param>
<param name="alternateText"></param>
<param name="targetUrl"></param>
<param name="active"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.SiteBannersService.DeleteSiteBanner(System.Int32)">
<summary>
delete site banner
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.SiteBannersService.GetSiteBanners">
<summary>
get site banners
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.SiteBannersService.GetARandomActiveSiteBanner">
<summary>
get a random site banner
</summary>
<returns></returns>
</member>
<member name="F:RMuseum.Services.Implementation.SiteBannersService._context">
<summary>
Database Context
</summary>
</member>
<member name="F:RMuseum.Services.Implementation.SiteBannersService._imageFileService">
<summary>
Image File Service
</summary>
</member>
<member name="F:RMuseum.Services.Implementation.SiteBannersService._memoryCache">
<summary>
IMemoryCache
</summary>
</member>
<member name="M:RMuseum.Services.Implementation.SiteBannersService.#ctor(RMuseum.DbContext.RMuseumDbContext,RSecurityBackend.Services.IImageFileService,Microsoft.Extensions.Caching.Memory.IMemoryCache)">
<summary>
constructor
</summary>
<param name="context"></param>
<param name="imageFileService"></param>
<param name="memoryCache"></param>
</member>
<member name="T:RMuseum.Services.Implementationa.RecitationService">
<summary>
Audio Narration Service Implementation
@ -8829,6 +8828,46 @@
Upload Enabled (temporary switch off/on for upload)
</summary>
</member>
<member name="M:RMuseum.Services.ISiteBannersService.AddSiteBanner(System.IO.Stream,System.String,System.String,System.String,System.Boolean)">
<summary>
Add site banner
</summary>
<param name="imageStream"></param>
<param name="fileName"></param>
<param name="alternateText"></param>
<param name="targetUrl"></param>
<param name="active"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.ISiteBannersService.ModifySiteBanner(System.Int32,System.String,System.String,System.Boolean)">
<summary>
modify site banner
</summary>
<param name="id"></param>
<param name="alternateText"></param>
<param name="targetUrl"></param>
<param name="active"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.ISiteBannersService.DeleteSiteBanner(System.Int32)">
<summary>
delete site banner
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.ISiteBannersService.GetSiteBanners">
<summary>
get site banners
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.ISiteBannersService.GetARandomActiveSiteBanner">
<summary>
get a random site banner
</summary>
<returns></returns>
</member>
<member name="T:RMuseum.Swashbuckle.SecurityRequirementsOperationFilter">
<summary>
//https://mattfrear.com/2018/07/21/add-an-authorization-header-to-your-swagger-ui-with-swashbuckle-revisited/

View File

@ -3,7 +3,6 @@ using RMuseum.Models.Ganjoor.ViewModels;
using RMuseum.Models.GanjoorAudio.ViewModels;
using RSecurityBackend.Models.Generic;
using System;
using System.IO;
using System.Threading.Tasks;
namespace RMuseum.Services
@ -258,45 +257,6 @@ namespace RMuseum.Services
/// <returns></returns>
Task<RServiceResult<GanjoorMetre[]>> GetGanjoorMetres();
/// <summary>
/// Add site banner
/// </summary>
/// <param name="imageStream"></param>
/// <param name="fileName"></param>
/// <param name="alternateText"></param>
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorSiteBannerViewModel>> AddSiteBanner(Stream imageStream, string fileName, string alternateText, string targetUrl, bool active);
/// <summary>
/// modify site banner
/// </summary>
/// <param name="id"></param>
/// <param name="alternateText"></param>
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
Task<RServiceResult<bool>> ModifySiteBanner(int id, string alternateText, string targetUrl, bool active);
/// <summary>
/// delete site banner
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<RServiceResult<bool>> DeleteSiteBanner(int id);
/// <summary>
/// get site banners
/// </summary>
/// <returns></returns>
Task<RServiceResult<GanjoorSiteBannerViewModel[]>> GetSiteBanners();
/// <summary>
/// get a random site banner
/// </summary>
/// <returns></returns>
Task<RServiceResult<GanjoorSiteBannerViewModel>> GetARandomActiveSiteBanner();
/// <summary>
/// get a random poem (2 = from hafez)

View File

@ -0,0 +1,50 @@
using RMuseum.Models.Ganjoor.ViewModels;
using RSecurityBackend.Models.Generic;
using System.IO;
using System.Threading.Tasks;
namespace RMuseum.Services
{
public interface ISiteBannersService
{
/// <summary>
/// Add site banner
/// </summary>
/// <param name="imageStream"></param>
/// <param name="fileName"></param>
/// <param name="alternateText"></param>
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorSiteBannerViewModel>> AddSiteBanner(Stream imageStream, string fileName, string alternateText, string targetUrl, bool active);
/// <summary>
/// modify site banner
/// </summary>
/// <param name="id"></param>
/// <param name="alternateText"></param>
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
Task<RServiceResult<bool>> ModifySiteBanner(int id, string alternateText, string targetUrl, bool active);
/// <summary>
/// delete site banner
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<RServiceResult<bool>> DeleteSiteBanner(int id);
/// <summary>
/// get site banners
/// </summary>
/// <returns></returns>
Task<RServiceResult<GanjoorSiteBannerViewModel[]>> GetSiteBanners();
/// <summary>
/// get a random site banner
/// </summary>
/// <returns></returns>
Task<RServiceResult<GanjoorSiteBannerViewModel>> GetARandomActiveSiteBanner();
}
}

View File

@ -17,8 +17,6 @@ using System.Threading.Tasks;
using RMuseum.Models.Artifact;
using RSecurityBackend.Services.Implementation;
using DNTPersianUtils.Core;
using System.IO;
using RSecurityBackend.Models.Image;
using Microsoft.Extensions.Caching.Memory;
namespace RMuseum.Services.Implementation
@ -2212,182 +2210,6 @@ namespace RMuseum.Services.Implementation
}
}
/// <summary>
/// Add site banner
/// </summary>
/// <param name="imageStream"></param>
/// <param name="fileName"></param>
/// <param name="alternateText"></param>
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorSiteBannerViewModel>> AddSiteBanner(Stream imageStream, string fileName, string alternateText, string targetUrl, bool active)
{
try
{
RServiceResult<RImage> image = await _imageFileService.Add(null, imageStream, fileName, "SiteBanners");
if (!string.IsNullOrEmpty(image.ExceptionString))
{
return new RServiceResult<GanjoorSiteBannerViewModel>(null, image.ExceptionString);
}
GanjoorSiteBanner banner = new GanjoorSiteBanner()
{
RImage = image.Result,
AlternateText = alternateText,
TargetUrl = targetUrl,
Active = active
};
_context.GanjoorSiteBanners.Add(banner);
await _context.SaveChangesAsync();
return new RServiceResult<GanjoorSiteBannerViewModel>
(
new GanjoorSiteBannerViewModel()
{
Id = banner.Id,
ImageUrl = $"api/rimages/{banner.RImageId}.jpg",
AlternateText = banner.AlternateText,
TargetUrl = banner.TargetUrl,
Active = banner.Active
}
);
}
catch(Exception exp)
{
return new RServiceResult<GanjoorSiteBannerViewModel>(null, exp.ToString());
}
}
/// <summary>
/// modify site banner
/// </summary>
/// <param name="id"></param>
/// <param name="alternateText"></param>
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
public async Task<RServiceResult<bool>> ModifySiteBanner(int id, string alternateText, string targetUrl, bool active)
{
try
{
GanjoorSiteBanner target = await _context.GanjoorSiteBanners.Where(b => b.Id == id).SingleOrDefaultAsync();
if(target == null)
return new RServiceResult<bool>(false);//not found
target.AlternateText = alternateText;
target.TargetUrl = targetUrl;
target.Active = active;
_context.GanjoorSiteBanners.Update(target);
await _context.SaveChangesAsync();
return new RServiceResult<bool>(true);
}
catch (Exception exp)
{
return new RServiceResult<bool>(false, exp.ToString());
}
}
/// <summary>
/// delete site banner
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<RServiceResult<bool>> DeleteSiteBanner(int id)
{
try
{
GanjoorSiteBanner target = await _context.GanjoorSiteBanners.Where(b => b.Id == id).SingleOrDefaultAsync();
if (target == null)
return new RServiceResult<bool>(false);//not found
_context.GanjoorSiteBanners.Remove(target);
await _context.SaveChangesAsync();
return new RServiceResult<bool>(true);
}
catch (Exception exp)
{
return new RServiceResult<bool>(false, exp.ToString());
}
}
/// <summary>
/// get site banners
/// </summary>
/// <returns></returns>
public async Task<RServiceResult<GanjoorSiteBannerViewModel[]>> GetSiteBanners()
{
try
{
return new RServiceResult<GanjoorSiteBannerViewModel[]>(
await _context.GanjoorSiteBanners
.Select(b => new GanjoorSiteBannerViewModel()
{
Id = b.Id,
ImageUrl = $"api/rimages/{b.RImageId}.jpg",
AlternateText = b.AlternateText,
TargetUrl = b.TargetUrl,
Active = b.Active
}).ToArrayAsync()
);
}
catch(Exception exp)
{
return new RServiceResult<GanjoorSiteBannerViewModel[]>(null, exp.ToString());
}
}
/// <summary>
/// get a random site banner
/// </summary>
/// <returns></returns>
public async Task<RServiceResult<GanjoorSiteBannerViewModel>> GetARandomActiveSiteBanner()
{
try
{
var cacheKeyForIdSet = $"GetARandomActiveSiteBanner::idSet";
if(!_memoryCache.TryGetValue(cacheKeyForIdSet, out int[] idSet))
{
idSet = await _context.GanjoorSiteBanners.Where(b => b.Active == true).Select(b => b.Id).ToArrayAsync();
_memoryCache.Set(cacheKeyForIdSet, idSet);
}
if (idSet.Length == 0)
return new RServiceResult<GanjoorSiteBannerViewModel>(null);//not found
Random rnd = new Random(DateTime.Now.Millisecond);
int id = idSet[rnd.Next(0, idSet.Length)];
return new RServiceResult<GanjoorSiteBannerViewModel>(
await _context.GanjoorSiteBanners
.Where(b => b.Id == id)
.Select(b => new GanjoorSiteBannerViewModel()
{
Id = b.Id,
ImageUrl = $"api/rimages/{b.RImageId}.jpg",
AlternateText = b.AlternateText,
TargetUrl = b.TargetUrl,
Active = b.Active
}).AsNoTracking().SingleAsync()
);
}
catch (Exception exp)
{
return new RServiceResult<GanjoorSiteBannerViewModel>(null, exp.ToString());
}
}
/// <summary>
/// examine site pages for broken links
/// </summary>

View File

@ -0,0 +1,227 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory;
using RMuseum.DbContext;
using RMuseum.Models.Ganjoor;
using RMuseum.Models.Ganjoor.ViewModels;
using RSecurityBackend.Models.Generic;
using RSecurityBackend.Models.Image;
using RSecurityBackend.Services;
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace RMuseum.Services.Implementation
{
/// <summary>
/// ganjoor.net banners service
/// </summary>
public class SiteBannersService : ISiteBannersService
{
/// <summary>
/// Add site banner
/// </summary>
/// <param name="imageStream"></param>
/// <param name="fileName"></param>
/// <param name="alternateText"></param>
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorSiteBannerViewModel>> AddSiteBanner(Stream imageStream, string fileName, string alternateText, string targetUrl, bool active)
{
try
{
RServiceResult<RImage> image = await _imageFileService.Add(null, imageStream, fileName, "SiteBanners");
if (!string.IsNullOrEmpty(image.ExceptionString))
{
return new RServiceResult<GanjoorSiteBannerViewModel>(null, image.ExceptionString);
}
GanjoorSiteBanner banner = new GanjoorSiteBanner()
{
RImage = image.Result,
AlternateText = alternateText,
TargetUrl = targetUrl,
Active = active
};
_context.GanjoorSiteBanners.Add(banner);
await _context.SaveChangesAsync();
return new RServiceResult<GanjoorSiteBannerViewModel>
(
new GanjoorSiteBannerViewModel()
{
Id = banner.Id,
ImageUrl = $"api/rimages/{banner.RImageId}.jpg",
AlternateText = banner.AlternateText,
TargetUrl = banner.TargetUrl,
Active = banner.Active
}
);
}
catch (Exception exp)
{
return new RServiceResult<GanjoorSiteBannerViewModel>(null, exp.ToString());
}
}
/// <summary>
/// modify site banner
/// </summary>
/// <param name="id"></param>
/// <param name="alternateText"></param>
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
public async Task<RServiceResult<bool>> ModifySiteBanner(int id, string alternateText, string targetUrl, bool active)
{
try
{
GanjoorSiteBanner target = await _context.GanjoorSiteBanners.Where(b => b.Id == id).SingleOrDefaultAsync();
if (target == null)
return new RServiceResult<bool>(false);//not found
target.AlternateText = alternateText;
target.TargetUrl = targetUrl;
target.Active = active;
_context.GanjoorSiteBanners.Update(target);
await _context.SaveChangesAsync();
return new RServiceResult<bool>(true);
}
catch (Exception exp)
{
return new RServiceResult<bool>(false, exp.ToString());
}
}
/// <summary>
/// delete site banner
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<RServiceResult<bool>> DeleteSiteBanner(int id)
{
try
{
GanjoorSiteBanner target = await _context.GanjoorSiteBanners.Where(b => b.Id == id).SingleOrDefaultAsync();
if (target == null)
return new RServiceResult<bool>(false);//not found
_context.GanjoorSiteBanners.Remove(target);
await _context.SaveChangesAsync();
return new RServiceResult<bool>(true);
}
catch (Exception exp)
{
return new RServiceResult<bool>(false, exp.ToString());
}
}
/// <summary>
/// get site banners
/// </summary>
/// <returns></returns>
public async Task<RServiceResult<GanjoorSiteBannerViewModel[]>> GetSiteBanners()
{
try
{
return new RServiceResult<GanjoorSiteBannerViewModel[]>(
await _context.GanjoorSiteBanners
.Select(b => new GanjoorSiteBannerViewModel()
{
Id = b.Id,
ImageUrl = $"api/rimages/{b.RImageId}.jpg",
AlternateText = b.AlternateText,
TargetUrl = b.TargetUrl,
Active = b.Active
}).ToArrayAsync()
);
}
catch (Exception exp)
{
return new RServiceResult<GanjoorSiteBannerViewModel[]>(null, exp.ToString());
}
}
/// <summary>
/// get a random site banner
/// </summary>
/// <returns></returns>
public async Task<RServiceResult<GanjoorSiteBannerViewModel>> GetARandomActiveSiteBanner()
{
try
{
var cacheKeyForIdSet = $"GetARandomActiveSiteBanner::idSet";
if (!_memoryCache.TryGetValue(cacheKeyForIdSet, out int[] idSet))
{
idSet = await _context.GanjoorSiteBanners.Where(b => b.Active == true).Select(b => b.Id).ToArrayAsync();
_memoryCache.Set(cacheKeyForIdSet, idSet);
}
if (idSet.Length == 0)
return new RServiceResult<GanjoorSiteBannerViewModel>(null);//not found
Random rnd = new Random(DateTime.Now.Millisecond);
int id = idSet[rnd.Next(0, idSet.Length)];
return new RServiceResult<GanjoorSiteBannerViewModel>(
await _context.GanjoorSiteBanners
.Where(b => b.Id == id)
.Select(b => new GanjoorSiteBannerViewModel()
{
Id = b.Id,
ImageUrl = $"api/rimages/{b.RImageId}.jpg",
AlternateText = b.AlternateText,
TargetUrl = b.TargetUrl,
Active = b.Active
}).AsNoTracking().SingleAsync()
);
}
catch (Exception exp)
{
return new RServiceResult<GanjoorSiteBannerViewModel>(null, exp.ToString());
}
}
/// <summary>
/// Database Context
/// </summary>
protected readonly RMuseumDbContext _context;
/// <summary>
/// Image File Service
/// </summary>
protected readonly IImageFileService _imageFileService;
/// <summary>
/// IMemoryCache
/// </summary>
protected readonly IMemoryCache _memoryCache;
/// <summary>
/// constructor
/// </summary>
/// <param name="context"></param>
/// <param name="imageFileService"></param>
/// <param name="memoryCache"></param>
public SiteBannersService(RMuseumDbContext context,IImageFileService imageFileService, IMemoryCache memoryCache)
{
_context = context;
_imageFileService = imageFileService;
_memoryCache = memoryCache;
}
}
}

View File

@ -274,6 +274,9 @@ namespace RMuseum
//long running job service
services.AddTransient<ILongRunningJobProgressService, LongRunningJobProgressServiceEF>();
//site banner service
services.AddTransient<ISiteBannersService, SiteBannersService>();
//upload limit for IIS
services.Configure<IISServerOptions>(options =>
{