add Base Controller, Complete Documentation and remove unncessary files ...
This commit is contained in:
@@ -0,0 +1,313 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using xCommons.Configurations;
|
||||||
|
using xCommons.Extensions;
|
||||||
|
using xCommons.Providers;
|
||||||
|
using xExceptions.Constants;
|
||||||
|
using xIdentityService.Controllers;
|
||||||
|
using xIdentityService.Interfaces;
|
||||||
|
using xModels.Base;
|
||||||
|
using xTermsAndConditionsService.Interfaces;
|
||||||
|
|
||||||
|
namespace xTermsAndConditionsService.Controllers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// a Base Controller Implementation for Providing Base Actions of
|
||||||
|
/// Terms and Conditions Provided Actions ...
|
||||||
|
/// </summary>
|
||||||
|
[AllowAnonymous]
|
||||||
|
public abstract class XTermsAndComditionsControllerBase : XBaseIdentityApiV1Controller, IXTermsAndComditionsController
|
||||||
|
{
|
||||||
|
private readonly IXTermsAndComditionsProvider provider;
|
||||||
|
|
||||||
|
protected XTermsAndComditionsControllerBase(
|
||||||
|
ILogger<XTermsAndComditionsControllerBase> logger,
|
||||||
|
XAppConfiguration appConfiguration,
|
||||||
|
IXIdentityProvider identityProvider,
|
||||||
|
IXTermsAndComditionsProvider provider,
|
||||||
|
XValidationProvider validationProvider
|
||||||
|
) : base(
|
||||||
|
logger,
|
||||||
|
appConfiguration,
|
||||||
|
identityProvider,
|
||||||
|
validationProvider
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.provider = provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
#region Actions ...
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieved all Exists Languages Terms and Conditions ...
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("Terms/Languages")]
|
||||||
|
public virtual async Task<ActionResult<IEnumerable<string>>> TermsLanguages(
|
||||||
|
CancellationToken cancellationToken = default
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//
|
||||||
|
var result = await provider.TermsLanguages(
|
||||||
|
cancellationToken: cancellationToken
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return Ok(result.ToDynamicObject());
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
var result = GetExceptionActionResult(ex);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check Has Terms and Conditions based on Specified Language ...
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="language">if null, used Default Language ...</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("Terms/{language}/Has")]
|
||||||
|
public virtual async Task<ActionResult<bool>> HasTerms(
|
||||||
|
[FromRoute] string language = null,
|
||||||
|
CancellationToken cancellationToken = default
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (!ModelState.IsValid)
|
||||||
|
{
|
||||||
|
XException.InvalidArgs.Throw();
|
||||||
|
}
|
||||||
|
await ValidationProvider
|
||||||
|
.GroupValidationBuilder()
|
||||||
|
.AddNotEmpty(language)
|
||||||
|
.ValidateGroupAsync();
|
||||||
|
|
||||||
|
//
|
||||||
|
var result = await provider.HasTerms(
|
||||||
|
language: language,
|
||||||
|
cancellationToken: cancellationToken
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
var result = GetExceptionActionResult(ex);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieve Terms and Conditions for Specified Language ...
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="language">if null, used Default Language ...</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("Terms/{language}")]
|
||||||
|
public virtual async Task<ActionResult<string>> GetTerms(
|
||||||
|
[FromRoute] string language = null,
|
||||||
|
CancellationToken cancellationToken = default
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (!ModelState.IsValid)
|
||||||
|
{
|
||||||
|
XException.InvalidArgs.Throw();
|
||||||
|
}
|
||||||
|
await ValidationProvider
|
||||||
|
.GroupValidationBuilder()
|
||||||
|
.AddNotEmpty(language)
|
||||||
|
.ValidateGroupAsync();
|
||||||
|
|
||||||
|
//
|
||||||
|
var result = await provider.GetTerms(
|
||||||
|
language: language,
|
||||||
|
cancellationToken: cancellationToken
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
var result = GetExceptionActionResult(ex);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Add Terms and Conditions for Specified Language ...
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="language"></param>
|
||||||
|
/// <param name="terms"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("Terms/{language}")]
|
||||||
|
public virtual async Task<ActionResult<string>> AddTerms(
|
||||||
|
[FromRoute] string language,
|
||||||
|
[FromBody] XBaseValueContainer<string> terms,
|
||||||
|
CancellationToken cancellationToken = default
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (!ModelState.IsValid)
|
||||||
|
{
|
||||||
|
XException.InvalidArgs.Throw();
|
||||||
|
}
|
||||||
|
await ValidationProvider
|
||||||
|
.GroupValidationBuilder()
|
||||||
|
.AddNotEmpty(language)
|
||||||
|
.AddNotNull(terms)
|
||||||
|
.AddNotEmpty(terms.Value)
|
||||||
|
.ValidateGroupAsync();
|
||||||
|
|
||||||
|
//
|
||||||
|
var userInfo = await GetUserInfo();
|
||||||
|
var connectionId = GetConnectionId();
|
||||||
|
|
||||||
|
//
|
||||||
|
var result = await provider.AddTerms(
|
||||||
|
language: language,
|
||||||
|
terms: terms.Value,
|
||||||
|
userInfo: userInfo,
|
||||||
|
connectionId: connectionId,
|
||||||
|
cancellationToken: cancellationToken
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
var result = GetExceptionActionResult(ex);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Remove Terms and Conditions of Specified Language ...
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="language"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpDelete("Terms/{language}")]
|
||||||
|
public virtual async Task<ActionResult<bool>> RemoveTerms(
|
||||||
|
[FromRoute] string language,
|
||||||
|
CancellationToken cancellationToken = default
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (!ModelState.IsValid)
|
||||||
|
{
|
||||||
|
XException.InvalidArgs.Throw();
|
||||||
|
}
|
||||||
|
await ValidationProvider
|
||||||
|
.GroupValidationBuilder()
|
||||||
|
.AddNotEmpty(language)
|
||||||
|
.ValidateGroupAsync();
|
||||||
|
|
||||||
|
//
|
||||||
|
var userInfo = await GetUserInfo();
|
||||||
|
var connectionId = GetConnectionId();
|
||||||
|
|
||||||
|
//
|
||||||
|
var result = await provider.RemoveTerms(
|
||||||
|
language: language,
|
||||||
|
userInfo: userInfo,
|
||||||
|
connectionId: connectionId,
|
||||||
|
cancellationToken: cancellationToken
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
var result = GetExceptionActionResult(ex);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Update Terms and Conditions of Specified Language ...
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="language"></param>
|
||||||
|
/// <param name="terms"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPut("Terms/{language}")]
|
||||||
|
public virtual async Task<ActionResult<bool>> UpdateTerms(
|
||||||
|
[FromRoute] string language,
|
||||||
|
[FromBody] XBaseValueContainer<string> terms,
|
||||||
|
CancellationToken cancellationToken = default
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (!ModelState.IsValid)
|
||||||
|
{
|
||||||
|
XException.InvalidArgs.Throw();
|
||||||
|
}
|
||||||
|
await ValidationProvider
|
||||||
|
.GroupValidationBuilder()
|
||||||
|
.AddNotEmpty(language)
|
||||||
|
.AddNotNull(terms)
|
||||||
|
.AddNotEmpty(terms.Value)
|
||||||
|
.ValidateGroupAsync();
|
||||||
|
|
||||||
|
//
|
||||||
|
var userInfo = await GetUserInfo();
|
||||||
|
var connectionId = GetConnectionId();
|
||||||
|
|
||||||
|
//
|
||||||
|
var result = await provider.UpdateTerms(
|
||||||
|
language: language,
|
||||||
|
terms: terms.Value,
|
||||||
|
userInfo: userInfo,
|
||||||
|
connectionId: connectionId,
|
||||||
|
cancellationToken: cancellationToken
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
var result = GetExceptionActionResult(ex);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,9 +6,12 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using xCommons.Configurations;
|
using xCommons.Configurations;
|
||||||
using xCommons.Extensions;
|
using xCommons.Extensions;
|
||||||
using xExceptions.Constants;
|
using xExceptions.Constants;
|
||||||
|
using xPushService.DI;
|
||||||
|
using xPushService.Helpers;
|
||||||
using xStringService.Interfaces.Dtos;
|
using xStringService.Interfaces.Dtos;
|
||||||
using xTermsAndConditionsService.Configuration;
|
using xTermsAndConditionsService.Configuration;
|
||||||
using xTermsAndConditionsService.Constants;
|
using xTermsAndConditionsService.Constants;
|
||||||
|
using xTermsAndConditionsService.Hubs;
|
||||||
using xTermsAndConditionsService.Interfaces;
|
using xTermsAndConditionsService.Interfaces;
|
||||||
using xTermsAndConditionsService.Providers;
|
using xTermsAndConditionsService.Providers;
|
||||||
|
|
||||||
@@ -123,6 +126,12 @@ namespace xTermsAndConditionsService.DI
|
|||||||
var stringProvider = scope.ServiceProvider.GetService<IXStringServiceProvider>();
|
var stringProvider = scope.ServiceProvider.GetService<IXStringServiceProvider>();
|
||||||
var serviceConfiguration = scope.ServiceProvider.GetService<XTermsAndConditionsServiceConfiguration>();
|
var serviceConfiguration = scope.ServiceProvider.GetService<XTermsAndConditionsServiceConfiguration>();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Using XTerms Hub ...
|
||||||
|
var pushHelper = new XPushServiceHelper();
|
||||||
|
pushHelper.AddHub<XTermsHub>("termsHub");
|
||||||
|
app.UseXPushService(pushHelper);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validate Requirements Exists ...
|
// Validate Requirements Exists ...
|
||||||
var isValid =
|
var isValid =
|
||||||
|
|||||||
@@ -6,6 +6,107 @@ its depends on:
|
|||||||
|
|
||||||
- **xStringService**
|
- **xStringService**
|
||||||
|
|
||||||
|
## Providers
|
||||||
|
|
||||||
|
in this module all requirements tools for manage Terms and Conditions Integrated and Provided.
|
||||||
|
|
||||||
|
- **IXTermsAndComditionsProvider**: an Interface for Describe Provided Actions for Terms and Conditions Management.
|
||||||
|
- **XTermsAndComditionsProvider**: an Implementation of Provided Actions for Terms and Conditions Management.
|
||||||
|
- **XTermsHub**: a Hub Implementation for Notifing Terms Changes to Connected Clients.
|
||||||
|
- **IXTermsAndComditionsController**: an Interface for Describe base Terms and Conditions Management Controller Actions.
|
||||||
|
- **XTermsAndComditionsControllerBase**: an Abstract Base Implementation of base Terms and Conditions Management Controller Actions.
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
|
||||||
|
you have to follow these steps for using this Module.
|
||||||
|
|
||||||
|
### Configure Service
|
||||||
|
|
||||||
|
all of Requirements for Terms and Conditions must be Configured using appSettings and provided by IConfiguration to Modules.
|
||||||
|
|
||||||
|
fo using Service you Have to Configure the Service in you appSettings.json file.
|
||||||
|
|
||||||
|
this configurations mapped to **XTermsAndConditionsServiceConfiguration** class.
|
||||||
|
|
||||||
|
```C#
|
||||||
|
/// <summary>
|
||||||
|
/// Terms and Conditions Configuration ...
|
||||||
|
/// </summary>
|
||||||
|
public class XTermsAndConditionsServiceConfiguration
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Terms And Conditions Resource Title in XString Table ...
|
||||||
|
/// </summary>
|
||||||
|
public string ResourceTitle { get; set; } = "terms_and_conditions";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Seeding Mode for Terms and Conditions ...
|
||||||
|
/// </summary>
|
||||||
|
public XDbSeedingMode SeedingMode { get; set; } = XDbSeedingMode.AddIfNotExists;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Default Terms and Conditions for Add to Databse on App Startup ...
|
||||||
|
/// </summary>
|
||||||
|
public List<XStringDto> TermsAndConditions { get; set; } = null;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
a sample Configuration must like this:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
...
|
||||||
|
"TermsAndConditionsService": {
|
||||||
|
"ResourceTitle": "terms_and_conditions",
|
||||||
|
"SeedingMode": "AddIfNotExists",
|
||||||
|
"TermsAndConditions": [
|
||||||
|
{
|
||||||
|
"Language": "fa-IR",
|
||||||
|
"TranslatedValue": "شرایط و ضوابط ثبت نام در سامانه"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Register Service
|
||||||
|
|
||||||
|
after preparation of all requirements, final steps is Register Service.
|
||||||
|
|
||||||
|
there are two main step:
|
||||||
|
|
||||||
|
- **DI Registration**: in this phase, all Provided Services Registered in DI.
|
||||||
|
- **Middleware Usage**: in this phase, if any Terms and Conditions Provided in Configuration, Seeded in Data Persist System using Provided Services.
|
||||||
|
|
||||||
|
```C#
|
||||||
|
public class Startup
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public void ConfigureServices(IServiceCollection services)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
//
|
||||||
|
// Register Terms and Conditions Service ...
|
||||||
|
services.AddXTermsConditionsService(
|
||||||
|
lifeTime: lifeTime,
|
||||||
|
configuration: configuration
|
||||||
|
);
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
//
|
||||||
|
// Using Terms and Conditions Service ...
|
||||||
|
app.UseXTermsAndConditionsService();
|
||||||
|
...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Maintainer
|
## Maintainer
|
||||||
|
|
||||||
Hadi Khazaee asl
|
Hadi Khazaee asl
|
||||||
|
|||||||
Reference in New Issue
Block a user