the api to commit web interface changes to a channel works

This commit is contained in:
Adam R Grey 2024-06-23 20:31:09 -04:00
parent 942b11fcce
commit 0ac28c35fb
5 changed files with 73 additions and 33 deletions

View File

@ -1,13 +1,18 @@
using Microsoft.AspNetCore.Mvc.Razor; using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc.NewtonsoftJson;
using vassago.Models; using vassago.Models;
#pragma warning disable CA2254
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Add services to the container. // Add services to the container.
builder.Services.AddControllersWithViews(); builder.Services.AddControllersWithViews();
builder.Services.AddSingleton<IHostedService, vassago.ConsoleService>(); builder.Services.AddSingleton<IHostedService, vassago.ConsoleService>();
builder.Services.AddDbContext<ChattingContext>(); builder.Services.AddDbContext<ChattingContext>();
builder.Services.AddControllers().AddNewtonsoftJson();
builder.Services.AddProblemDetails();
builder.Services.Configure<RazorViewEngineOptions>(o => { builder.Services.Configure<RazorViewEngineOptions>(o => {
o.ViewLocationFormats.Clear(); o.ViewLocationFormats.Clear();
o.ViewLocationFormats.Add("/WebInterface/Views/{1}/{0}" + RazorViewEngine.ViewExtension); o.ViewLocationFormats.Add("/WebInterface/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
@ -37,4 +42,12 @@ app.UseSwaggerUI(c =>
c.SwaggerEndpoint("/swagger/v1/swagger.json", "api"); c.SwaggerEndpoint("/swagger/v1/swagger.json", "api");
}); });
app.UseExceptionHandler();
app.UseStatusCodePages();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(); app.Run();

View File

@ -18,18 +18,27 @@ public class ChannelsController : ControllerBase
_db = db; _db = db;
} }
[HttpGet("{id}")] [HttpGet("{id}")]
[Produces("application/json")] [Produces("application/json")]
public Channel Get(Guid id) public Channel Get(Guid id)
{ {
return _db.Find<Channel>(id); return _db.Find<Channel>(id);
} }
[HttpPost] [HttpPatch]
[Produces("application/json")] [Produces("application/json")]
public Channel Post([FromBody] Channel channel) public IActionResult Patch([FromBody] Channel channel)
{ {
// Write logic to insert employee data var fromDb = _db.Channels.Find(channel.Id);
return new Channel(); if (fromDb == null)
} {
_logger.LogError($"attempt to update channel {channel.Id}, not found"); //ca2254 is moronic. maybe if it wasn't filed under "code quality" and instead was filed under "you didn't include a workaround for the weaknesses of other external junk" i'd be kinder to it ;)
return NotFound();
}
//settable values: lewdness filter level, meanness filter level. maybe i could decorate them...
fromDb.LewdnessFilterLevel = channel.LewdnessFilterLevel;
fromDb.MeannessFilterLevel = channel.MeannessFilterLevel;
_db.SaveChanges();
return Ok(fromDb);
}
} }

View File

@ -17,11 +17,13 @@
<tr> <tr>
<th scope="row">Lewdness Filter Level</th> <th scope="row">Lewdness Filter Level</th>
<td> <td>
<select name="LewdnessFilterLevel" id="LewdnessFilterLevel" onchange="postmodelupdate(jsonifyChannel())"> <select name="LewdnessFilterLevel" id="LewdnessFilterLevel" onchange="patchModel(jsonifyChannel())">
<!option value="" @(Model.LewdnessFilterLevel == null ? "selected" : "")>inhereted</!option> <!option value="" @(Model.LewdnessFilterLevel == null ? "selected" : "")>inhereted</!option>
@foreach (Enumerations.LewdnessFilterLevel enumVal in Enum.GetValues(typeof(Enumerations.LewdnessFilterLevel))) @foreach (Enumerations.LewdnessFilterLevel enumVal in
Enum.GetValues(typeof(Enumerations.LewdnessFilterLevel)))
{ {
<!option value="@((int)enumVal)" @(Model.LewdnessFilterLevel == enumVal ? "selected" : "")>@(Enumerations.GetDescription<Enumerations.LewdnessFilterLevel>(enumVal))</!option> <!option value="@((int)enumVal)" @(Model.LewdnessFilterLevel == enumVal ? "selected" : "")>
@(Enumerations.GetDescription<Enumerations.LewdnessFilterLevel>(enumVal))</!option>
} }
</select> </select>
</td> </td>
@ -44,7 +46,17 @@
</tr> </tr>
<tr> <tr>
<th scope="row">Meanness Filter Level</th> <th scope="row">Meanness Filter Level</th>
<td>@(Model.MeannessFilterLevel != null ? Enumerations.GetDescription<Enumerations.MeannessFilterLevel>(Model.MeannessFilterLevel.GetValueOrDefault()) : "inherited")</td> <td>
<select name="MeannessFilterLevel" id="MeannessFilterLevel" onchange="patchModel(jsonifyChannel())">
<!option value="" @(Model.MeannessFilterLevel == null ? "selected" : "")>⤵ inhereted</!option>
@foreach (Enumerations.MeannessFilterLevel enumVal in
Enum.GetValues(typeof(Enumerations.MeannessFilterLevel)))
{
<!option value="@((int)enumVal)" @(Model.MeannessFilterLevel == enumVal ? "selected" : "")>
@(Enumerations.GetDescription<Enumerations.MeannessFilterLevel>(enumVal))</!option>
}
</select>
</td>
</tr> </tr>
<tr> <tr>
<th scope="row">Messages (count)</th> <th scope="row">Messages (count)</th>
@ -72,19 +84,24 @@
@section Scripts{ @section Scripts{
<script type="text/javascript"> <script type="text/javascript">
@{ @{
var modelAsString = JsonConvert.SerializeObject(Model, new JsonSerializerSettings var modelAsString = JsonConvert.SerializeObject(Model, new JsonSerializerSettings
{ {
ReferenceLoopHandling = ReferenceLoopHandling.Ignore ReferenceLoopHandling = ReferenceLoopHandling.Ignore
}); });
} }
const channelOnLoad = @Html.Raw(modelAsString); const channelOnLoad = @Html.Raw(modelAsString);
function jsonifyChannel() function jsonifyChannel() {
{ var channelNow = structuredClone(channelOnLoad);
var channelNow = channelOnLoad; channelNow.SubChannels = null;
channelNow.LewdnessFilterLevel = document.querySelector("#LewdnessFilterLevel").value; channelNow.ParentChannel = null;
console.log(channelNow); channelNow.Messages = null;
return channelNow; channelNow.Users = null;
channelNow.LewdnessFilterLevel = document.querySelector("#LewdnessFilterLevel").value;
channelNow.MeannessFilterLevel = document.querySelector("#MeannessFilterLevel").value;
console.log(channelNow);
return channelNow;
} }
</script> </script>
} }

View File

@ -9,6 +9,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="bootstrap" Version="5.3.3" /> <PackageReference Include="bootstrap" Version="5.3.3" />
<PackageReference Include="discord.net" Version="3.10.0" /> <PackageReference Include="discord.net" Version="3.10.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.20" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.5"> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>

View File

@ -7,7 +7,7 @@ function testfunct(caller){
console.log("[gibberish]"); console.log("[gibberish]");
console.log(caller); console.log(caller);
} }
function postmodelupdate(model) function patchModel(model)
{ {
//structure the model your (dang) self into a nice object //structure the model your (dang) self into a nice object
console.log(model); console.log(model);
@ -28,7 +28,7 @@ function postmodelupdate(model)
console.log("dexter impression: I am now ready to post the following content:"); console.log("dexter impression: I am now ready to post the following content:");
console.log(JSON.stringify(model)); console.log(JSON.stringify(model));
fetch(apiUrl, { fetch(apiUrl, {
method: 'POST', method: 'PATCH',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },