#106 site banner api is now complete

This commit is contained in:
Hamid Reza Mohammadi 2021-04-22 16:07:26 +04:30
parent 728e1e8008
commit a3d82ad01f
4 changed files with 193 additions and 12 deletions

View File

@ -932,13 +932,13 @@ namespace RMuseum.Controllers
}
/// <summary>
/// add site banner (send form) with these feilds: filename, alt, url and an image attachment
/// add site banner (send form) with these fields: filename, 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(GanjoorSiteBanner))]
[AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorSiteBannerViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
public async Task<IActionResult> AddSiteBanner()
@ -965,15 +965,13 @@ namespace RMuseum.Controllers
return BadRequest("a single image is not provided");
}
using Stream stream = Request.Form.Files[0].OpenReadStream();
RServiceResult<GanjoorSiteBanner> res = await _ganjoorService.AddSiteBanner(stream, filename.ToString(), alt.ToString(), alt.ToString(), false);
RServiceResult<GanjoorSiteBannerViewModel> res = await _ganjoorService.AddSiteBanner(stream, filename.ToString(), alt.ToString(), alt.ToString(), false);
if (!string.IsNullOrEmpty(res.ExceptionString))
{
return BadRequest(res.ExceptionString);
}
return Ok(res.Result);
}
catch (Exception exp)
@ -1057,6 +1055,70 @@ namespace RMuseum.Controllers
}
}
/// <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")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.Banners)]
[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);
}
if(res.Result == null)
{
return NotFound();
}
return Ok(res.Result);
}
catch (Exception exp)
{
return BadRequest(exp.ToString());
}
}
/// <summary>
/// Ganjoor Service
/// </summary>

View File

@ -885,7 +885,7 @@
</member>
<member name="M:RMuseum.Controllers.GanjoorController.AddSiteBanner">
<summary>
add site banner (send form) with these feilds: filename, alt, url and an image attachment
add site banner (send form) with these fields: filename, alt, url and an image attachment
</summary>
<returns></returns>
</member>
@ -904,6 +904,18 @@
<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="F:RMuseum.Controllers.GanjoorController._ganjoorService">
<summary>
Ganjoor Service
@ -6768,6 +6780,18 @@
<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">
<summary>
get a random poem from hafez
@ -7816,6 +7840,18 @@
<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="F:RMuseum.Services.Implementation.GanjoorService._context">
<summary>
Database Context

View File

@ -267,7 +267,7 @@ namespace RMuseum.Services
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorSiteBanner>> AddSiteBanner(Stream imageStream, string fileName, string alternateText, string targetUrl, bool active);
Task<RServiceResult<GanjoorSiteBannerViewModel>> AddSiteBanner(Stream imageStream, string fileName, string alternateText, string targetUrl, bool active);
/// <summary>
/// modify site banner
@ -286,6 +286,18 @@ namespace RMuseum.Services
/// <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 from hafez
/// </summary>

View File

@ -1888,7 +1888,7 @@ namespace RMuseum.Services.Implementation
/// <param name="targetUrl"></param>
/// <param name="active"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorSiteBanner>> AddSiteBanner(Stream imageStream, string fileName, string alternateText, string targetUrl, bool active)
public async Task<RServiceResult<GanjoorSiteBannerViewModel>> AddSiteBanner(Stream imageStream, string fileName, string alternateText, string targetUrl, bool active)
{
try
{
@ -1896,7 +1896,7 @@ namespace RMuseum.Services.Implementation
if (!string.IsNullOrEmpty(image.ExceptionString))
{
return new RServiceResult<GanjoorSiteBanner>(null, image.ExceptionString);
return new RServiceResult<GanjoorSiteBannerViewModel>(null, image.ExceptionString);
}
GanjoorSiteBanner banner = new GanjoorSiteBanner()
@ -1910,12 +1910,22 @@ namespace RMuseum.Services.Implementation
_context.GanjoorSiteBanners.Add(banner);
await _context.SaveChangesAsync();
return new RServiceResult<GanjoorSiteBanner>(banner);
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<GanjoorSiteBanner>(null, exp.ToString());
return new RServiceResult<GanjoorSiteBannerViewModel>(null, exp.ToString());
}
}
@ -1978,6 +1988,67 @@ namespace RMuseum.Services.Implementation
}
}
/// <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
{
int[] idSet = await _context.GanjoorSiteBanners.Where(b => b.Active == true).Select(b => b.Id).ToArrayAsync();
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 - 1)];
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
}).SingleAsync()
);
}
catch (Exception exp)
{
return new RServiceResult<GanjoorSiteBannerViewModel>(null, exp.ToString());
}
}
/// <summary>
/// Database Context
/// </summary>