make module creator templates extensible
This commit is contained in:
		| @ -1,100 +0,0 @@ | ||||
| @using Oqtane.Modules.Controls | ||||
| @using [Owner].[Module].Services | ||||
| @using [Owner].[Module].Models | ||||
|  | ||||
| @namespace [Owner].[Module] | ||||
| @inherits ModuleBase | ||||
| @inject I[Module]Service [Module]Service | ||||
| @inject NavigationManager NavigationManager | ||||
|  | ||||
| <table class="table table-borderless"> | ||||
|     <tr> | ||||
|         <td> | ||||
|             <Label For="name" HelpText="Enter a name">Name: </Label> | ||||
|         </td> | ||||
|         <td> | ||||
|             <input id="name" class="form-control" @bind="@_name" /> | ||||
|         </td> | ||||
|     </tr> | ||||
| </table> | ||||
| <button type="button" class="btn btn-success" @onclick="Save">Save</button> | ||||
| <NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink> | ||||
| <br /> | ||||
| <br /> | ||||
| @if (PageState.Action == "Edit") | ||||
| { | ||||
|     <AuditInfo CreatedBy="@_createdby" CreatedOn="@_createdon" ModifiedBy="@_modifiedby" ModifiedOn="@_modifiedon"></AuditInfo> | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Edit; | ||||
|  | ||||
|     public override string Actions => "Add,Edit"; | ||||
|  | ||||
|     public override string Title => "Manage [Module]"; | ||||
|  | ||||
|     public override List<Resource> Resources => new List<Resource>() | ||||
|     { | ||||
|         new Resource { ResourceType = ResourceType.Stylesheet, Url = ModulePath() + "Module.css" } | ||||
|     }; | ||||
|  | ||||
|     int _id; | ||||
|     string _name; | ||||
|     string _createdby; | ||||
|     DateTime _createdon; | ||||
|     string _modifiedby; | ||||
|     DateTime _modifiedon; | ||||
|  | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             if (PageState.Action == "Edit") | ||||
|             { | ||||
|                 _id = Int32.Parse(PageState.QueryString["id"]); | ||||
|                 [Module] [Module] = await [Module]Service.Get[Module]Async(_id, ModuleState.ModuleId); | ||||
|                 if ([Module] != null) | ||||
|                 { | ||||
|                     _name = [Module].Name; | ||||
|                     _createdby = [Module].CreatedBy; | ||||
|                     _createdon = [Module].CreatedOn; | ||||
|                     _modifiedby = [Module].ModifiedBy; | ||||
|                     _modifiedon = [Module].ModifiedOn; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Loading [Module] {[Module]Id} {Error}", _id, ex.Message); | ||||
|             AddModuleMessage("Error Loading [Module]", MessageType.Error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async Task Save() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             if (PageState.Action == "Add") | ||||
|             { | ||||
|                 [Module] [Module] = new [Module](); | ||||
|                 [Module].ModuleId = ModuleState.ModuleId; | ||||
|                 [Module].Name = _name; | ||||
|                 [Module] = await [Module]Service.Add[Module]Async([Module]); | ||||
|                 await logger.LogInformation("[Module] Added {[Module]}", [Module]); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 [Module] [Module] = await [Module]Service.Get[Module]Async(_id, ModuleState.ModuleId); | ||||
|                 [Module].Name = _name; | ||||
|                 await [Module]Service.Update[Module]Async([Module]); | ||||
|                 await logger.LogInformation("[Module] Updated {[Module]}", [Module]); | ||||
|             } | ||||
|             NavigationManager.NavigateTo(NavigateUrl()); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Saving [Module] {Error}", ex.Message); | ||||
|             AddModuleMessage("Error Saving [Module]", MessageType.Error); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,100 +0,0 @@ | ||||
| @using [Owner].[Module].Services | ||||
| @using [Owner].[Module].Models | ||||
|  | ||||
| @namespace [Owner].[Module] | ||||
| @inherits ModuleBase | ||||
| @inject I[Module]Service [Module]Service | ||||
| @inject NavigationManager NavigationManager | ||||
|  | ||||
| @if (_[Module]s == null) | ||||
| { | ||||
|     <p><em>Loading...</em></p> | ||||
| } | ||||
| else | ||||
| { | ||||
|     <ActionLink Action="Add" Security="SecurityAccessLevel.Edit" Text="Add [Module]" /> | ||||
|     <br /> | ||||
|     <br /> | ||||
|     @if (@_[Module]s.Count != 0) | ||||
|     { | ||||
|         <Pager Items="@_[Module]s"> | ||||
|             <Header> | ||||
|                 <th style="width: 1px;"> </th> | ||||
|                 <th style="width: 1px;"> </th> | ||||
|                 <th>Name</th> | ||||
|             </Header> | ||||
|             <Row> | ||||
|                 <td><ActionLink Action="Edit" Parameters="@($"id=" + context.[Module]Id.ToString())" /></td> | ||||
|                 <td><ActionDialog Header="Delete [Module]" Message="@("Are You Sure You Wish To Delete The " + context.Name + " [Module]?")" Action="Delete" Security="SecurityAccessLevel.Edit" Class="btn btn-danger" OnClick="@(async () => await Delete(context))" /></td> | ||||
|                 <td>@context.Name</td> | ||||
|             </Row> | ||||
|         </Pager> | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         <p>No [Module]s To Display</p> | ||||
|     } | ||||
| } | ||||
|  | ||||
| <!-- The content below is for informational purposes only and can be safely removed --> | ||||
|  | ||||
| <hr /> | ||||
| [Module] Module Created Successfully. Use Edit Mode To Add A [Module]. You Can Access The Files At The Following Locations:<br /><br /> | ||||
| [RootPath]Oqtane.Client\Modules\[Module]\<br /> | ||||
| - Edit.razor - component for adding or editing content<br /> | ||||
| - Index.razor - main component for your module **the content you are reading is in this file**<br /> | ||||
| - ModuleInfo.cs - implements IModule interface to provide configuration settings for your module<br /> | ||||
| - Settings.razor - component for managing module settings<br /> | ||||
| - Services\I[Module]Service.cs - interface for defining service API methods<br /> | ||||
| - Services\[Module]Service.cs - implements service API interface methods<br /><br /> | ||||
| [RootPath]Oqtane.Server\Modules\[Module]\<br /> | ||||
| - Controllers\[Module]Controller.cs - API methods implemented using a REST pattern<br /> | ||||
| - Manager\[Module]Manager.cs - implements optional module interfaces for features such as import/export of content<br /> | ||||
| - Repository\I[Module]Repository.cs - interface for defining repository methods<br /> | ||||
| - Repository\[Module]Respository.cs - implements repository interface methods for data access using EF Core<br /> | ||||
| - Repository\[Module]Context.cs - provides a DB Context for data access<br /> | ||||
| - Scripts\[Owner].[Module]s.1.0.0.sql - database schema definition script<br /> | ||||
| - Scripts\[Owner].[Module]s.Uninstall.sql - database uninstall script<br /><br /> | ||||
| [RootPath]Oqtane.Shared\Modules\[Module]\<br /> | ||||
| - Models\[Module].cs - model definition<br /><br /> | ||||
|  | ||||
| <!-- The content above is for informational purposes only and can be safely removed --> | ||||
|  | ||||
| @code { | ||||
|     public override List<Resource> Resources => new List<Resource>() | ||||
|     { | ||||
|         new Resource { ResourceType = ResourceType.Stylesheet, Url = ModulePath() + "Module.css" }, | ||||
|         new Resource { ResourceType = ResourceType.Script, Url = ModulePath() + "Module.js" } | ||||
|     }; | ||||
|  | ||||
|     List<[Module]> _[Module]s; | ||||
|  | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             _[Module]s = await [Module]Service.Get[Module]sAsync(ModuleState.ModuleId); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Loading [Module] {Error}", ex.Message); | ||||
|             AddModuleMessage("Error Loading [Module]", MessageType.Error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async Task Delete([Module] [Module]) | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             await [Module]Service.Delete[Module]Async([Module].[Module]Id, ModuleState.ModuleId); | ||||
|             await logger.LogInformation("[Module] Deleted {[Module]}", [Module]); | ||||
|             _[Module]s = await [Module]Service.Get[Module]sAsync(ModuleState.ModuleId); | ||||
|             StateHasChanged(); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             await logger.LogError(ex, "Error Deleting [Module] {[Module]} {Error}", [Module], ex.Message); | ||||
|             AddModuleMessage("Error Deleting [Module]", MessageType.Error); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,15 +0,0 @@ | ||||
| using Microsoft.JSInterop; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace [Owner].[Module] | ||||
| { | ||||
|     public class Interop | ||||
|     { | ||||
|         private readonly IJSRuntime _jsRuntime; | ||||
|  | ||||
|         public Interop(IJSRuntime jsRuntime) | ||||
|         { | ||||
|             _jsRuntime = jsRuntime; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,17 +0,0 @@ | ||||
| using Oqtane.Models; | ||||
| using Oqtane.Modules; | ||||
|  | ||||
| namespace [Owner].[Module] | ||||
| { | ||||
|     public class ModuleInfo : IModule | ||||
|     { | ||||
|         public ModuleDefinition ModuleDefinition => new ModuleDefinition | ||||
|         { | ||||
|             Name = "[Module]", | ||||
|             Description = "[Module]", | ||||
|             Version = "1.0.0", | ||||
|             ServerManagerType = "[ServerManagerType]", | ||||
|             ReleaseVersions = "1.0.0" | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| @ -1,19 +0,0 @@ | ||||
| using System.Collections.Generic; | ||||
| using System.Threading.Tasks; | ||||
| using [Owner].[Module].Models; | ||||
|  | ||||
| namespace [Owner].[Module].Services | ||||
| { | ||||
|     public interface I[Module]Service  | ||||
|     { | ||||
|         Task<List<Models.[Module]>> Get[Module]sAsync(int ModuleId); | ||||
|  | ||||
|         Task<Models.[Module]> Get[Module]Async(int [Module]Id, int ModuleId); | ||||
|  | ||||
|         Task<Models.[Module]> Add[Module]Async(Models.[Module] [Module]); | ||||
|  | ||||
|         Task<Models.[Module]> Update[Module]Async(Models.[Module] [Module]); | ||||
|  | ||||
|         Task Delete[Module]Async(int [Module]Id, int ModuleId); | ||||
|     } | ||||
| } | ||||
| @ -1,49 +0,0 @@ | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Net.Http; | ||||
| using System.Threading.Tasks; | ||||
| using Oqtane.Modules; | ||||
| using Oqtane.Services; | ||||
| using Oqtane.Shared; | ||||
| using [Owner].[Module].Models; | ||||
|  | ||||
| namespace [Owner].[Module].Services | ||||
| { | ||||
|     public class [Module]Service : ServiceBase, I[Module]Service, IService | ||||
|     { | ||||
|         private readonly SiteState _siteState; | ||||
|  | ||||
|         public [Module]Service(HttpClient http, SiteState siteState) : base(http) | ||||
|         { | ||||
|             _siteState = siteState; | ||||
|         } | ||||
|  | ||||
|          private string Apiurl => CreateApiUrl(_siteState.Alias, "[Module]"); | ||||
|  | ||||
|         public async Task<List<Models.[Module]>> Get[Module]sAsync(int ModuleId) | ||||
|         { | ||||
|             List<Models.[Module]> [Module]s = await GetJsonAsync<List<Models.[Module]>>(CreateAuthorizationPolicyUrl($"{Apiurl}?moduleid={ModuleId}", ModuleId)); | ||||
|             return [Module]s.OrderBy(item => item.Name).ToList(); | ||||
|         } | ||||
|  | ||||
|         public async Task<Models.[Module]> Get[Module]Async(int [Module]Id, int ModuleId) | ||||
|         { | ||||
|             return await GetJsonAsync<Models.[Module]>(CreateAuthorizationPolicyUrl($"{Apiurl}/{[Module]Id}", ModuleId)); | ||||
|         } | ||||
|  | ||||
|         public async Task<Models.[Module]> Add[Module]Async(Models.[Module] [Module]) | ||||
|         { | ||||
|             return await PostJsonAsync<Models.[Module]>(CreateAuthorizationPolicyUrl($"{Apiurl}", [Module].ModuleId), [Module]); | ||||
|         } | ||||
|  | ||||
|         public async Task<Models.[Module]> Update[Module]Async(Models.[Module] [Module]) | ||||
|         { | ||||
|             return await PutJsonAsync<Models.[Module]>(CreateAuthorizationPolicyUrl($"{Apiurl}/{[Module].[Module]Id}", [Module].ModuleId), [Module]); | ||||
|         } | ||||
|  | ||||
|         public async Task Delete[Module]Async(int [Module]Id, int ModuleId) | ||||
|         { | ||||
|             await DeleteAsync(CreateAuthorizationPolicyUrl($"{Apiurl}/{[Module]Id}", ModuleId)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,47 +0,0 @@ | ||||
| @namespace [Owner].[Module] | ||||
| @inherits ModuleBase | ||||
| @inject ISettingService SettingService | ||||
|  | ||||
| <table class="table table-borderless"> | ||||
|     <tr> | ||||
|         <td> | ||||
|             <Label For="value" HelpText="Enter a value">Name: </Label> | ||||
|         </td> | ||||
|         <td> | ||||
|             <input id="value" type="text" class="form-control" @bind="@_value" /> | ||||
|         </td> | ||||
|     </tr> | ||||
| </table> | ||||
|  | ||||
| @code { | ||||
|     public override string Title => "[Module] Settings"; | ||||
|  | ||||
|     string _value; | ||||
|  | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             Dictionary<string, string> settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); | ||||
|             _value = SettingService.GetSetting(settings, "SettingName", ""); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public async Task UpdateSettings() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             Dictionary<string, string> settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); | ||||
|             SettingService.SetSetting(settings, "SettingName", _value); | ||||
|             await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,91 +0,0 @@ | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| using System.Collections.Generic; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Oqtane.Shared; | ||||
| using Oqtane.Enums; | ||||
| using Oqtane.Infrastructure; | ||||
| using [Owner].[Module].Models; | ||||
| using [Owner].[Module].Repository; | ||||
|  | ||||
| namespace [Owner].[Module].Controllers | ||||
| { | ||||
|     [Route(ControllerRoutes.Default)] | ||||
|     public class [Module]Controller : Controller | ||||
|     { | ||||
|         private readonly I[Module]Repository _[Module]Repository; | ||||
|         private readonly ILogManager _logger; | ||||
|         protected int _entityId = -1; | ||||
|  | ||||
|         public [Module]Controller(I[Module]Repository [Module]Repository, ILogManager logger, IHttpContextAccessor accessor) | ||||
|         { | ||||
|             _[Module]Repository = [Module]Repository; | ||||
|             _logger = logger; | ||||
|  | ||||
|             if (accessor.HttpContext.Request.Query.ContainsKey("entityid")) | ||||
|             { | ||||
|                 _entityId = int.Parse(accessor.HttpContext.Request.Query["entityid"]); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // GET: api/<controller>?moduleid=x | ||||
|         [HttpGet] | ||||
|         [Authorize(Policy = PolicyNames.ViewModule)] | ||||
|         public IEnumerable<Models.[Module]> Get(string moduleid) | ||||
|         { | ||||
|             return _[Module]Repository.Get[Module]s(int.Parse(moduleid)); | ||||
|         } | ||||
|  | ||||
|         // GET api/<controller>/5 | ||||
|         [HttpGet("{id}")] | ||||
|         [Authorize(Policy = PolicyNames.ViewModule)] | ||||
|         public Models.[Module] Get(int id) | ||||
|         { | ||||
|             Models.[Module] [Module] = _[Module]Repository.Get[Module](id); | ||||
|             if ([Module] != null && [Module].ModuleId != _entityId) | ||||
|             { | ||||
|                 [Module] = null; | ||||
|             } | ||||
|             return [Module]; | ||||
|         } | ||||
|  | ||||
|         // POST api/<controller> | ||||
|         [HttpPost] | ||||
|         [Authorize(Policy = PolicyNames.EditModule)] | ||||
|         public Models.[Module] Post([FromBody] Models.[Module] [Module]) | ||||
|         { | ||||
|             if (ModelState.IsValid && [Module].ModuleId == _entityId) | ||||
|             { | ||||
|                 [Module] = _[Module]Repository.Add[Module]([Module]); | ||||
|                 _logger.Log(LogLevel.Information, this, LogFunction.Create, "[Module] Added {[Module]}", [Module]); | ||||
|             } | ||||
|             return [Module]; | ||||
|         } | ||||
|  | ||||
|         // PUT api/<controller>/5 | ||||
|         [HttpPut("{id}")] | ||||
|         [Authorize(Policy = PolicyNames.EditModule)] | ||||
|         public Models.[Module] Put(int id, [FromBody] Models.[Module] [Module]) | ||||
|         { | ||||
|             if (ModelState.IsValid && [Module].ModuleId == _entityId) | ||||
|             { | ||||
|                 [Module] = _[Module]Repository.Update[Module]([Module]); | ||||
|                 _logger.Log(LogLevel.Information, this, LogFunction.Update, "[Module] Updated {[Module]}", [Module]); | ||||
|             } | ||||
|             return [Module]; | ||||
|         } | ||||
|  | ||||
|         // DELETE api/<controller>/5 | ||||
|         [HttpDelete("{id}")] | ||||
|         [Authorize(Policy = PolicyNames.EditModule)] | ||||
|         public void Delete(int id) | ||||
|         { | ||||
|             Models.[Module] [Module] = _[Module]Repository.Get[Module](id); | ||||
|             if ([Module] != null && [Module].ModuleId == _entityId) | ||||
|             { | ||||
|                 _[Module]Repository.Delete[Module](id); | ||||
|                 _logger.Log(LogLevel.Information, this, LogFunction.Delete, "[Module] Deleted {[Module]Id}", id); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,61 +0,0 @@ | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text.Json; | ||||
| using Oqtane.Modules; | ||||
| using Oqtane.Models; | ||||
| using Oqtane.Infrastructure; | ||||
| using Oqtane.Repository; | ||||
| using [Owner].[Module].Models; | ||||
| using [Owner].[Module].Repository; | ||||
|  | ||||
| namespace [Owner].[Module].Manager | ||||
| { | ||||
|     public class [Module]Manager : IInstallable, IPortable | ||||
|     { | ||||
|         private I[Module]Repository _[Module]Repository; | ||||
|         private ISqlRepository _sql; | ||||
|  | ||||
|         public [Module]Manager(I[Module]Repository [Module]Repository, ISqlRepository sql) | ||||
|         { | ||||
|             _[Module]Repository = [Module]Repository; | ||||
|             _sql = sql; | ||||
|         } | ||||
|  | ||||
|         public bool Install(Tenant tenant, string version) | ||||
|         { | ||||
|             return _sql.ExecuteScript(tenant, GetType().Assembly, "[Owner].[Module]." + version + ".sql"); | ||||
|         } | ||||
|  | ||||
|         public bool Uninstall(Tenant tenant) | ||||
|         { | ||||
|             return _sql.ExecuteScript(tenant, GetType().Assembly, "[Owner].[Module].Uninstall.sql"); | ||||
|         } | ||||
|  | ||||
|         public string ExportModule(Module module) | ||||
|         { | ||||
|             string content = ""; | ||||
|             List<Models.[Module]> [Module]s = _[Module]Repository.Get[Module]s(module.ModuleId).ToList(); | ||||
|             if ([Module]s != null) | ||||
|             { | ||||
|                 content = JsonSerializer.Serialize([Module]s); | ||||
|             } | ||||
|             return content; | ||||
|         } | ||||
|  | ||||
|         public void ImportModule(Module module, string content, string version) | ||||
|         { | ||||
|             List<Models.[Module]> [Module]s = null; | ||||
|             if (!string.IsNullOrEmpty(content)) | ||||
|             { | ||||
|                 [Module]s = JsonSerializer.Deserialize<List<Models.[Module]>>(content); | ||||
|             } | ||||
|             if ([Module]s != null) | ||||
|             { | ||||
|                 foreach(var [Module] in [Module]s) | ||||
|                 { | ||||
|                     _[Module]Repository.Add[Module](new Models.[Module] { ModuleId = module.ModuleId, Name = [Module].Name }); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,14 +0,0 @@ | ||||
| using System.Collections.Generic; | ||||
| using [Owner].[Module].Models; | ||||
|  | ||||
| namespace [Owner].[Module].Repository | ||||
| { | ||||
|     public interface I[Module]Repository | ||||
|     { | ||||
|         IEnumerable<Models.[Module]> Get[Module]s(int ModuleId); | ||||
|         Models.[Module] Get[Module](int [Module]Id); | ||||
|         Models.[Module] Add[Module](Models.[Module] [Module]); | ||||
|         Models.[Module] Update[Module](Models.[Module] [Module]); | ||||
|         void Delete[Module](int [Module]Id); | ||||
|     } | ||||
| } | ||||
| @ -1,18 +0,0 @@ | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Oqtane.Modules; | ||||
| using Oqtane.Repository; | ||||
| using [Owner].[Module].Models; | ||||
|  | ||||
| namespace [Owner].[Module].Repository | ||||
| { | ||||
|     public class [Module]Context : DBContextBase, IService | ||||
|     { | ||||
|         public virtual DbSet<Models.[Module]> [Module] { get; set; } | ||||
|  | ||||
|         public [Module]Context(ITenantResolver tenantResolver, IHttpContextAccessor accessor) : base(tenantResolver, accessor) | ||||
|         { | ||||
|             // ContextBase handles multi-tenant database connections | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,49 +0,0 @@ | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using System.Linq; | ||||
| using System.Collections.Generic; | ||||
| using Oqtane.Modules; | ||||
| using [Owner].[Module].Models; | ||||
|  | ||||
| namespace [Owner].[Module].Repository | ||||
| { | ||||
|     public class [Module]Repository : I[Module]Repository, IService | ||||
|     { | ||||
|         private readonly [Module]Context _db; | ||||
|  | ||||
|         public [Module]Repository([Module]Context context) | ||||
|         { | ||||
|             _db = context; | ||||
|         } | ||||
|  | ||||
|         public IEnumerable<Models.[Module]> Get[Module]s(int ModuleId) | ||||
|         { | ||||
|             return _db.[Module].Where(item => item.ModuleId == ModuleId); | ||||
|         } | ||||
|  | ||||
|         public Models.[Module] Get[Module](int [Module]Id) | ||||
|         { | ||||
|             return _db.[Module].Find([Module]Id); | ||||
|         } | ||||
|  | ||||
|         public Models.[Module] Add[Module](Models.[Module] [Module]) | ||||
|         { | ||||
|             _db.[Module].Add([Module]); | ||||
|             _db.SaveChanges(); | ||||
|             return [Module]; | ||||
|         } | ||||
|  | ||||
|         public Models.[Module] Update[Module](Models.[Module] [Module]) | ||||
|         { | ||||
|             _db.Entry([Module]).State = EntityState.Modified; | ||||
|             _db.SaveChanges(); | ||||
|             return [Module]; | ||||
|         } | ||||
|  | ||||
|         public void Delete[Module](int [Module]Id) | ||||
|         { | ||||
|             Models.[Module] [Module] = _db.[Module].Find([Module]Id); | ||||
|             _db.[Module].Remove([Module]); | ||||
|             _db.SaveChanges(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,26 +0,0 @@ | ||||
| /*   | ||||
| Create [Owner][Module] table | ||||
| */ | ||||
|  | ||||
| CREATE TABLE [dbo].[[Owner][Module]]( | ||||
| 	[[Module]Id] [int] IDENTITY(1,1) NOT NULL, | ||||
| 	[ModuleId] [int] NOT NULL, | ||||
| 	[Name] [nvarchar](256) NOT NULL, | ||||
| 	[CreatedBy] [nvarchar](256) NOT NULL, | ||||
| 	[CreatedOn] [datetime] NOT NULL, | ||||
| 	[ModifiedBy] [nvarchar](256) NOT NULL, | ||||
| 	[ModifiedOn] [datetime] NOT NULL, | ||||
|   CONSTRAINT [PK_[Owner][Module]] PRIMARY KEY CLUSTERED  | ||||
|   ( | ||||
| 	[[Module]Id] ASC | ||||
|   ) | ||||
| ) | ||||
| GO | ||||
|  | ||||
| /*   | ||||
| Create foreign key relationships | ||||
| */ | ||||
| ALTER TABLE [dbo].[[Owner][Module]]  WITH CHECK ADD  CONSTRAINT [FK_[Owner][Module]_Module] FOREIGN KEY([ModuleId]) | ||||
| REFERENCES [dbo].Module ([ModuleId]) | ||||
| ON DELETE CASCADE | ||||
| GO | ||||
| @ -1,6 +0,0 @@ | ||||
| /*   | ||||
| Remove [Owner][Module] table | ||||
| */ | ||||
|  | ||||
| DROP TABLE [dbo].[[Owner][Module]] | ||||
| GO | ||||
| @ -1 +0,0 @@ | ||||
| /* Module Custom Styles */ | ||||
| @ -1,5 +0,0 @@ | ||||
| /* Module Script */ | ||||
| var [Owner] = [Owner] || {}; | ||||
|  | ||||
| [Owner].[Module] = { | ||||
| }; | ||||
| @ -1,19 +0,0 @@ | ||||
| using System; | ||||
| using System.ComponentModel.DataAnnotations.Schema; | ||||
| using Oqtane.Models; | ||||
|  | ||||
| namespace [Owner].[Module].Models | ||||
| { | ||||
|     [Table("[Owner][Module]")] | ||||
|     public class [Module] : IAuditable | ||||
|     { | ||||
|         public int [Module]Id { get; set; } | ||||
|         public int ModuleId { get; set; } | ||||
|         public string Name { get; set; } | ||||
|  | ||||
|         public string CreatedBy { get; set; } | ||||
|         public DateTime CreatedOn { get; set; } | ||||
|         public string ModifiedBy { get; set; } | ||||
|         public DateTime ModifiedOn { get; set; } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker