modified all admin UIs to position action buttons on the left side of grids and implemented ActionDialog throughout rather than dedicated delete components

This commit is contained in:
Shaun Walker
2019-11-04 23:29:35 -05:00
parent 156f5b5f94
commit ab564f7244
32 changed files with 737 additions and 732 deletions

View File

@ -0,0 +1,72 @@
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using Oqtane.Repository;
using Oqtane.Models;
using Oqtane.Shared;
using Oqtane.Infrastructure;
namespace Oqtane.Controllers
{
[Route("{site}/api/[controller]")]
public class ScheduleController : Controller
{
private readonly IScheduleRepository Schedules;
private readonly ILogManager logger;
public ScheduleController(IScheduleRepository Schedules, ILogManager logger)
{
this.Schedules = Schedules;
this.logger = logger;
}
// GET: api/<controller>
[HttpGet]
public IEnumerable<Schedule> Get()
{
return Schedules.GetSchedules();
}
// GET api/<controller>/5
[HttpGet("{id}")]
public Schedule Get(int id)
{
return Schedules.GetSchedule(id);
}
// POST api/<controller>
[HttpPost]
[Authorize(Roles = Constants.HostRole)]
public Schedule Post([FromBody] Schedule Schedule)
{
if (ModelState.IsValid)
{
Schedule = Schedules.AddSchedule(Schedule);
logger.Log(LogLevel.Information, this, LogFunction.Create, "Schedule Added {Schedule}", Schedule);
}
return Schedule;
}
// PUT api/<controller>/5
[HttpPut("{id}")]
[Authorize(Roles = Constants.HostRole)]
public Schedule Put(int id, [FromBody] Schedule Schedule)
{
if (ModelState.IsValid)
{
Schedule = Schedules.UpdateSchedule(Schedule);
logger.Log(LogLevel.Information, this, LogFunction.Update, "Schedule Updated {Schedule}", Schedule);
}
return Schedule;
}
// DELETE api/<controller>/5
[HttpDelete("{id}")]
[Authorize(Roles = Constants.HostRole)]
public void Delete(int id)
{
Schedules.DeleteSchedule(id);
logger.Log(LogLevel.Information, this, LogFunction.Delete, "Schedule Deleted {ScheduleId}", id);
}
}
}

View File

@ -0,0 +1,74 @@
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using Oqtane.Repository;
using Oqtane.Models;
using Oqtane.Shared;
using Oqtane.Infrastructure;
namespace Oqtane.Controllers
{
[Route("{site}/api/[controller]")]
public class ScheduleLogController : Controller
{
private readonly IScheduleLogRepository ScheduleLogs;
private readonly ILogManager logger;
public ScheduleLogController(IScheduleLogRepository ScheduleLogs, ILogManager logger)
{
this.ScheduleLogs = ScheduleLogs;
this.logger = logger;
}
// GET: api/<controller>
[HttpGet]
[Authorize(Roles = Constants.HostRole)]
public IEnumerable<ScheduleLog> Get()
{
return ScheduleLogs.GetScheduleLogs();
}
// GET api/<controller>/5
[HttpGet("{id}")]
[Authorize(Roles = Constants.HostRole)]
public ScheduleLog Get(int id)
{
return ScheduleLogs.GetScheduleLog(id);
}
// POST api/<controller>
[HttpPost]
[Authorize(Roles = Constants.HostRole)]
public ScheduleLog Post([FromBody] ScheduleLog ScheduleLog)
{
if (ModelState.IsValid)
{
ScheduleLog = ScheduleLogs.AddScheduleLog(ScheduleLog);
logger.Log(LogLevel.Information, this, LogFunction.Create, "Schedule Log Added {ScheduleLog}", ScheduleLog);
}
return ScheduleLog;
}
// PUT api/<controller>/5
[HttpPut("{id}")]
[Authorize(Roles = Constants.HostRole)]
public ScheduleLog Put(int id, [FromBody] ScheduleLog ScheduleLog)
{
if (ModelState.IsValid)
{
ScheduleLog = ScheduleLogs.UpdateScheduleLog(ScheduleLog);
logger.Log(LogLevel.Information, this, LogFunction.Update, "Schedule Log Updated {ScheduleLog}", ScheduleLog);
}
return ScheduleLog;
}
// DELETE api/<controller>/5
[HttpDelete("{id}")]
[Authorize(Roles = Constants.HostRole)]
public void Delete(int id)
{
ScheduleLogs.DeleteScheduleLog(id);
logger.Log(LogLevel.Information, this, LogFunction.Delete, "Schedule Log Deleted {ScheduleLogId}", id);
}
}
}

View File

@ -18,6 +18,8 @@ namespace Oqtane.Repository
public virtual DbSet<Alias> Alias { get; set; }
public virtual DbSet<Tenant> Tenant { get; set; }
public virtual DbSet<ModuleDefinition> ModuleDefinition { get; set; }
public virtual DbSet<Schedule> Schedule { get; set; }
public virtual DbSet<ScheduleLog> ScheduleLog { get; set; }
public override int SaveChanges()
{

View File

@ -0,0 +1,14 @@
using System.Collections.Generic;
using Oqtane.Models;
namespace Oqtane.Repository
{
public interface IScheduleLogRepository
{
IEnumerable<ScheduleLog> GetScheduleLogs();
ScheduleLog AddScheduleLog(ScheduleLog ScheduleLog);
ScheduleLog UpdateScheduleLog(ScheduleLog ScheduleLog);
ScheduleLog GetScheduleLog(int ScheduleLogId);
void DeleteScheduleLog(int ScheduleLogId);
}
}

View File

@ -0,0 +1,14 @@
using System.Collections.Generic;
using Oqtane.Models;
namespace Oqtane.Repository
{
public interface IScheduleRepository
{
IEnumerable<Schedule> GetSchedules();
Schedule AddSchedule(Schedule Schedule);
Schedule UpdateSchedule(Schedule Schedule);
Schedule GetSchedule(int ScheduleId);
void DeleteSchedule(int ScheduleId);
}
}

View File

@ -0,0 +1,49 @@
using System.Collections.Generic;
using System.Linq;
using Oqtane.Models;
using Microsoft.EntityFrameworkCore;
using System;
namespace Oqtane.Repository
{
public class ScheduleLogRepository : IScheduleLogRepository
{
private MasterDBContext db;
public ScheduleLogRepository(MasterDBContext context)
{
db = context;
}
public IEnumerable<ScheduleLog> GetScheduleLogs()
{
return db.ScheduleLog.ToList();
}
public ScheduleLog AddScheduleLog(ScheduleLog ScheduleLog)
{
db.ScheduleLog.Add(ScheduleLog);
db.SaveChanges();
return ScheduleLog;
}
public ScheduleLog UpdateScheduleLog(ScheduleLog ScheduleLog)
{
db.Entry(ScheduleLog).State = EntityState.Modified;
db.SaveChanges();
return ScheduleLog;
}
public ScheduleLog GetScheduleLog(int ScheduleLogId)
{
return db.ScheduleLog.Find(ScheduleLogId);
}
public void DeleteScheduleLog(int ScheduleLogId)
{
ScheduleLog schedulelog = db.ScheduleLog.Find(ScheduleLogId);
db.ScheduleLog.Remove(schedulelog);
db.SaveChanges();
}
}
}

View File

@ -0,0 +1,49 @@
using System.Collections.Generic;
using System.Linq;
using Oqtane.Models;
using Microsoft.EntityFrameworkCore;
using System;
namespace Oqtane.Repository
{
public class ScheduleRepository : IScheduleRepository
{
private MasterDBContext db;
public ScheduleRepository(MasterDBContext context)
{
db = context;
}
public IEnumerable<Schedule> GetSchedules()
{
return db.Schedule.ToList();
}
public Schedule AddSchedule(Schedule Schedule)
{
db.Schedule.Add(Schedule);
db.SaveChanges();
return Schedule;
}
public Schedule UpdateSchedule(Schedule Schedule)
{
db.Entry(Schedule).State = EntityState.Modified;
db.SaveChanges();
return Schedule;
}
public Schedule GetSchedule(int ScheduleId)
{
return db.Schedule.Find(ScheduleId);
}
public void DeleteSchedule(int ScheduleId)
{
Schedule schedule = db.Schedule.Find(ScheduleId);
db.Schedule.Remove(schedule);
db.SaveChanges();
}
}
}

View File

@ -50,6 +50,41 @@ CREATE TABLE [dbo].[ModuleDefinition](
)
GO
CREATE TABLE [dbo].[Schedule] (
[ScheduleId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](200) NULL,
[JobType] [nvarchar](200) NOT NULL,
[Period] [int] NOT NULL,
[Frequency] [char](1) NOT NULL,
[StartDate] [datetime] NULL,
[IsActive] [bit] NOT NULL,
[RetentionHistory] [int] NOT NULL,
[CreatedBy] [nvarchar](256) NULL,
[CreatedOn] [datetime] NULL,
[ModifiedBy] [nvarchar](256) NULL,
[ModifiedOn] [datetime] NULL,
CONSTRAINT [PK_Schedule] PRIMARY KEY CLUSTERED
(
[ScheduleId] ASC
)
)
GO
CREATE TABLE [dbo].[ScheduleLog] (
[ScheduleLogId] [int] IDENTITY(1,1) NOT NULL,
[ScheduleId] [int] NOT NULL,
[StartDate] [datetime] NOT NULL,
[FinishDate] [datetime] NULL,
[Succeeded] [bit] NULL,
[Notes] [nvarchar](max) NULL,
[NextExecution] [datetime] NULL,
CONSTRAINT [PK_ScheduleLog] PRIMARY KEY CLUSTERED
(
[ScheduleLogId] ASC
)
)
GO
CREATE TABLE [dbo].[ApplicationVersion](
[ApplicationVersionId] [int] IDENTITY(1,1) NOT NULL,
[Version] [nvarchar](50) NOT NULL,
@ -71,6 +106,11 @@ REFERENCES [dbo].[Tenant] ([TenantId])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ScheduleLog] WITH NOCHECK ADD CONSTRAINT [FK_ScheduleLog_Schedule] FOREIGN KEY([ScheduleId])
REFERENCES [dbo].[Schedule] ([ScheduleId])
ON DELETE CASCADE
GO
/*
Create seed data

View File

@ -100,6 +100,8 @@ namespace Oqtane.Server
services.AddScoped<IFileService, FileService>();
services.AddScoped<IPackageService, PackageService>();
services.AddScoped<ILogService, LogService>();
services.AddScoped<IScheduleService, ScheduleService>();
services.AddScoped<IScheduleLogService, ScheduleLogService>();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
@ -175,6 +177,8 @@ namespace Oqtane.Server
services.AddTransient<ISettingRepository, SettingRepository>();
services.AddTransient<ILogRepository, LogRepository>();
services.AddTransient<ILogManager, LogManager>();
services.AddTransient<IScheduleRepository, ScheduleRepository>();
services.AddTransient<IScheduleLogRepository, ScheduleLogRepository>();
// get list of loaded assemblies
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
@ -367,6 +371,8 @@ namespace Oqtane.Server
services.AddTransient<ISettingRepository, SettingRepository>();
services.AddTransient<ILogRepository, LogRepository>();
services.AddTransient<ILogManager, LogManager>();
services.AddTransient<IScheduleRepository, ScheduleRepository>();
services.AddTransient<IScheduleLogRepository, ScheduleLogRepository>();
// get list of loaded assemblies
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();