diff --git a/Oqtane.Server/Controllers/LanguageController.cs b/Oqtane.Server/Controllers/LanguageController.cs new file mode 100644 index 00000000..b2a38ee5 --- /dev/null +++ b/Oqtane.Server/Controllers/LanguageController.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Oqtane.Enums; +using Oqtane.Infrastructure; +using Oqtane.Models; +using Oqtane.Repository; +using Oqtane.Shared; + +namespace Oqtane.Controllers +{ + [Route(ControllerRoutes.Default)] + public class LanguageController : Controller + { + private readonly ILanguageRepository _languages; + private readonly ILogManager _logger; + + public LanguageController(ILanguageRepository language, ILogManager logger) + { + _languages = roles; + _logger = language; + } + + [HttpGet] + [Authorize(Roles = RoleNames.Registered)] + public IEnumerable Get(string siteid) => _languages.GetLanguages(int.Parse(siteid)); + + [HttpGet("{id}")] + [Authorize(Roles = RoleNames.Registered)] + public Language Get(int id) => _languages.GetLanguage(id); + + [HttpPost] + [Authorize(Roles = RoleNames.Admin)] + public Language Post([FromBody] Language language) + { + if (ModelState.IsValid) + { + language = _languages.AddLanguage(language); + _logger.Log(LogLevel.Information, this, LogFunction.Create, "Language Added {Language}", role); + } + return role; + } + + [HttpDelete("{id}")] + [Authorize(Roles = RoleNames.Admin)] + public void Delete(int id) + { + _languages.DeleteLanguage(id); + _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Language Deleted {LanguageId}", id); + } + } +} diff --git a/Oqtane.Server/Repository/Context/TenantDBContext.cs b/Oqtane.Server/Repository/Context/TenantDBContext.cs index be085b20..79270ffb 100644 --- a/Oqtane.Server/Repository/Context/TenantDBContext.cs +++ b/Oqtane.Server/Repository/Context/TenantDBContext.cs @@ -1,4 +1,4 @@ -using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Oqtane.Models; @@ -21,6 +21,8 @@ namespace Oqtane.Repository public virtual DbSet Folder { get; set; } public virtual DbSet File { get; set; } + public virtual DbSet Languages { get; set; } + public TenantDBContext(ITenantResolver tenantResolver, IHttpContextAccessor accessor) : base(tenantResolver, accessor) { // DBContextBase handles multi-tenant database connections diff --git a/Oqtane.Server/Repository/Interfaces/ILanguageRepository.cs b/Oqtane.Server/Repository/Interfaces/ILanguageRepository.cs new file mode 100644 index 00000000..0ec10442 --- /dev/null +++ b/Oqtane.Server/Repository/Interfaces/ILanguageRepository.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using Oqtane.Models; + +namespace Oqtane.Repository +{ + public interface ILanguageRepository + { + IEnumerable GetLanguages(int siteId); + + Language AddLanguage(Language language); + + Language GetLanguage(int languageId); + + void DeleteLanguage(int languageId); + } +} diff --git a/Oqtane.Server/Repository/LanguageRepository.cs b/Oqtane.Server/Repository/LanguageRepository.cs new file mode 100644 index 00000000..2f59a047 --- /dev/null +++ b/Oqtane.Server/Repository/LanguageRepository.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.Linq; +using Oqtane.Models; + +namespace Oqtane.Repository +{ + public class LanguageRepository : ILanguageRepository + { + private TenantDBContext _db; + + public LanguageRepository(TenantDBContext context) + { + _db = context; + } + + public IEnumerable GetLanguages(int siteId) => _db.Languages.Where(l => l.SiteId == siteId); + + public Language AddLanguage(Language language) + { + _db.Languages.Add(language); + _db.SaveChanges(); + + return language; + } + + public Language GetLanguage(int languageId) => _db.Languages.Find(languageId); + + public void DeleteLanguage(int languageId) + { + var language = _db.Languages.Find(languageId); + _db.Languages.Remove(language); + _db.SaveChanges(); + } + } +} diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index b134a19e..b4e9569d 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -213,6 +213,7 @@ namespace Oqtane services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); // load the external assemblies into the app domain, install services services.AddOqtane(_runtime, _supportedCultures); diff --git a/Oqtane.Shared/Models/Language.cs b/Oqtane.Shared/Models/Language.cs new file mode 100644 index 00000000..2433d0d0 --- /dev/null +++ b/Oqtane.Shared/Models/Language.cs @@ -0,0 +1,25 @@ +using System; + +namespace Oqtane.Models +{ + public class Language : IAuditable + { + public int LanguageId { get; set; } + + public int? SiteId { get; set; } + + public string Name { get; set; } + + public string Code { get; set; } + + public bool IsCurrent { get; set; } + + public string CreatedBy { get; set; } + + public DateTime CreatedOn { get; set; } + + public string ModifiedBy { get; set; } + + public DateTime ModifiedOn { get; set; } + } +}