diff --git a/Foxnouns.Backend/Config.cs b/Foxnouns.Backend/Config.cs
index d1e6df5..0ed8b7a 100644
--- a/Foxnouns.Backend/Config.cs
+++ b/Foxnouns.Backend/Config.cs
@@ -99,11 +99,6 @@ public class Config
{
public int MaxMemberCount { get; init; } = 1000;
- public int MaxFields { get; init; } = 25;
- public int MaxFieldNameLength { get; init; } = 100;
- public int MaxFieldEntryTextLength { get; init; } = 100;
- public int MaxFieldEntries { get; init; } = 100;
-
public int MaxUsernameLength { get; init; } = 40;
public int MaxMemberNameLength { get; init; } = 100;
public int MaxDisplayNameLength { get; init; } = 100;
diff --git a/Foxnouns.Backend/Controllers/MembersController.cs b/Foxnouns.Backend/Controllers/MembersController.cs
index dbea99c..8f832c1 100644
--- a/Foxnouns.Backend/Controllers/MembersController.cs
+++ b/Foxnouns.Backend/Controllers/MembersController.cs
@@ -81,13 +81,13 @@ public class MembersController(
("display_name", validationService.ValidateDisplayName(req.DisplayName)),
("bio", validationService.ValidateBio(req.Bio)),
("avatar", validationService.ValidateAvatar(req.Avatar)),
- .. validationService.ValidateFields(req.Fields, CurrentUser!.CustomPreferences),
- .. validationService.ValidateFieldEntries(
+ .. ValidationUtils.ValidateFields(req.Fields, CurrentUser!.CustomPreferences),
+ .. ValidationUtils.ValidateFieldEntries(
req.Names?.ToArray(),
CurrentUser!.CustomPreferences,
"names"
),
- .. validationService.ValidatePronouns(
+ .. ValidationUtils.ValidatePronouns(
req.Pronouns?.ToArray(),
CurrentUser!.CustomPreferences
),
@@ -191,7 +191,7 @@ public class MembersController(
if (req.Names != null)
{
errors.AddRange(
- validationService.ValidateFieldEntries(
+ ValidationUtils.ValidateFieldEntries(
req.Names,
CurrentUser!.CustomPreferences,
"names"
@@ -203,7 +203,7 @@ public class MembersController(
if (req.Pronouns != null)
{
errors.AddRange(
- validationService.ValidatePronouns(req.Pronouns, CurrentUser!.CustomPreferences)
+ ValidationUtils.ValidatePronouns(req.Pronouns, CurrentUser!.CustomPreferences)
);
member.Pronouns = req.Pronouns.ToList();
}
@@ -211,10 +211,7 @@ public class MembersController(
if (req.Fields != null)
{
errors.AddRange(
- validationService.ValidateFields(
- req.Fields.ToList(),
- CurrentUser!.CustomPreferences
- )
+ ValidationUtils.ValidateFields(req.Fields.ToList(), CurrentUser!.CustomPreferences)
);
member.Fields = req.Fields.ToList();
}
diff --git a/Foxnouns.Backend/Controllers/UsersController.cs b/Foxnouns.Backend/Controllers/UsersController.cs
index f7e3115..6ccbff0 100644
--- a/Foxnouns.Backend/Controllers/UsersController.cs
+++ b/Foxnouns.Backend/Controllers/UsersController.cs
@@ -91,7 +91,7 @@ public class UsersController(
if (req.Names != null)
{
errors.AddRange(
- validationService.ValidateFieldEntries(
+ ValidationUtils.ValidateFieldEntries(
req.Names,
CurrentUser!.CustomPreferences,
"names"
@@ -103,7 +103,7 @@ public class UsersController(
if (req.Pronouns != null)
{
errors.AddRange(
- validationService.ValidatePronouns(req.Pronouns, CurrentUser!.CustomPreferences)
+ ValidationUtils.ValidatePronouns(req.Pronouns, CurrentUser!.CustomPreferences)
);
user.Pronouns = req.Pronouns.ToList();
}
@@ -111,10 +111,7 @@ public class UsersController(
if (req.Fields != null)
{
errors.AddRange(
- validationService.ValidateFields(
- req.Fields.ToList(),
- CurrentUser!.CustomPreferences
- )
+ ValidationUtils.ValidateFields(req.Fields.ToList(), CurrentUser!.CustomPreferences)
);
user.Fields = req.Fields.ToList();
}
diff --git a/Foxnouns.Backend/Foxnouns.Backend.csproj b/Foxnouns.Backend/Foxnouns.Backend.csproj
index c30f2b9..6f6d69f 100644
--- a/Foxnouns.Backend/Foxnouns.Backend.csproj
+++ b/Foxnouns.Backend/Foxnouns.Backend.csproj
@@ -8,41 +8,41 @@
-
-
+
+
-
-
-
-
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
-
+
-
+
diff --git a/Foxnouns.Backend/Program.cs b/Foxnouns.Backend/Program.cs
index 0f1d9f1..66e57a6 100644
--- a/Foxnouns.Backend/Program.cs
+++ b/Foxnouns.Backend/Program.cs
@@ -23,6 +23,7 @@ using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Prometheus;
+using Scalar.AspNetCore;
using Sentry.Extensibility;
using Serilog;
@@ -45,8 +46,7 @@ builder
// No valid request body will ever come close to this limit,
// but the limit is slightly higher to prevent valid requests from being rejected.
opts.Limits.MaxRequestBodySize = 2 * 1024 * 1024;
- })
- .UseUrls(config.Address);
+ });
builder
.Services.AddControllers()
@@ -109,18 +109,16 @@ if (config.Logging.SentryTracing)
app.UseCors();
app.UseCustomMiddleware();
app.MapControllers();
+app.MapOpenApi("/api-docs/openapi/{documentName}.json");
+app.MapScalarApiReference(options =>
+{
+ options.Title = "pronouns.cc API";
+ options.OpenApiRoutePattern = "/api-docs/openapi/{documentName}.json";
+ options.EndpointPathPrefix = "/api-docs/{documentName}";
+});
-// TODO: I can't figure out why this doesn't work yet
-// TODO: Manually write API docs in the meantime
-// app.MapOpenApi("/api-docs/openapi/{documentName}.json");
-// app.MapScalarApiReference(
-// "/api-docs/",
-// options =>
-// {
-// options.Title = "pronouns.cc API";
-// options.OpenApiRoutePattern = "/api-docs/openapi/{documentName}.json";
-// }
-// );
+app.Urls.Clear();
+app.Urls.Add(config.Address);
// Make sure metrics are updated whenever Prometheus scrapes them
Metrics.DefaultRegistry.AddBeforeCollectCallback(async ct =>
diff --git a/Foxnouns.Backend/Utils/Limits.cs b/Foxnouns.Backend/Utils/Limits.cs
new file mode 100644
index 0000000..3010d46
--- /dev/null
+++ b/Foxnouns.Backend/Utils/Limits.cs
@@ -0,0 +1,23 @@
+// Copyright (C) 2023-present sam/u1f320 (vulpine.solutions)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published
+// by the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+namespace Foxnouns.Backend.Utils;
+
+public static class Limits
+{
+ public const int FieldLimit = 25;
+ public const int FieldNameLimit = 100;
+ public const int FieldEntryTextLimit = 100;
+ public const int FieldEntriesLimit = 100;
+}
diff --git a/Foxnouns.Backend/Utils/OpenApi/PropertyKeySchemaTransformer.cs b/Foxnouns.Backend/Utils/OpenApi/PropertyKeySchemaTransformer.cs
index 9835b50..92c1f7c 100644
--- a/Foxnouns.Backend/Utils/OpenApi/PropertyKeySchemaTransformer.cs
+++ b/Foxnouns.Backend/Utils/OpenApi/PropertyKeySchemaTransformer.cs
@@ -22,10 +22,8 @@ namespace Foxnouns.Backend.Utils.OpenApi;
public class PropertyKeySchemaTransformer : IOpenApiSchemaTransformer
{
- private static readonly DefaultContractResolver SnakeCaseConverter = new()
- {
- NamingStrategy = new SnakeCaseNamingStrategy(),
- };
+ private static readonly DefaultContractResolver SnakeCaseConverter =
+ new() { NamingStrategy = new SnakeCaseNamingStrategy() };
public Task TransformAsync(
OpenApiSchema schema,
diff --git a/Foxnouns.Backend/Services/ValidationService.Fields.cs b/Foxnouns.Backend/Utils/ValidationUtils.Fields.cs
similarity index 56%
rename from Foxnouns.Backend/Services/ValidationService.Fields.cs
rename to Foxnouns.Backend/Utils/ValidationUtils.Fields.cs
index e2cbff3..0235eb6 100644
--- a/Foxnouns.Backend/Services/ValidationService.Fields.cs
+++ b/Foxnouns.Backend/Utils/ValidationUtils.Fields.cs
@@ -15,9 +15,9 @@
using Foxnouns.Backend.Database;
using Foxnouns.Backend.Database.Models;
-namespace Foxnouns.Backend.Services;
+namespace Foxnouns.Backend.Utils;
-public partial class ValidationService
+public static partial class ValidationUtils
{
public static readonly string[] DefaultStatusOptions =
[
@@ -28,7 +28,7 @@ public partial class ValidationService
"avoid",
];
- public IEnumerable<(string, ValidationError?)> ValidateFields(
+ public static IEnumerable<(string, ValidationError?)> ValidateFields(
List? fields,
IReadOnlyDictionary customPreferences
)
@@ -37,7 +37,7 @@ public partial class ValidationService
return [];
var errors = new List<(string, ValidationError?)>();
- if (fields.Count > _limits.MaxFields)
+ if (fields.Count > 25)
{
errors.Add(
(
@@ -45,7 +45,7 @@ public partial class ValidationService
ValidationError.LengthError(
"Too many fields",
0,
- _limits.MaxFields,
+ Limits.FieldLimit,
fields.Count
)
)
@@ -53,38 +53,39 @@ public partial class ValidationService
}
// No overwhelming this function, thank you
- if (fields.Count > _limits.MaxFields + 50)
+ if (fields.Count > 100)
return errors;
foreach ((Field? field, int index) in fields.Select((field, index) => (field, index)))
{
- if (field.Name.Length > _limits.MaxFieldNameLength)
+ switch (field.Name.Length)
{
- errors.Add(
- (
- $"fields.{index}.name",
- ValidationError.LengthError(
- "Field name is too long",
- 1,
- _limits.MaxFieldNameLength,
- field.Name.Length
+ case > Limits.FieldNameLimit:
+ errors.Add(
+ (
+ $"fields.{index}.name",
+ ValidationError.LengthError(
+ "Field name is too long",
+ 1,
+ Limits.FieldNameLimit,
+ field.Name.Length
+ )
)
- )
- );
- }
- else if (field.Name.Length < 1)
- {
- errors.Add(
- (
- $"fields.{index}.name",
- ValidationError.LengthError(
- "Field name is too short",
- 1,
- _limits.MaxFieldNameLength,
- field.Name.Length
+ );
+ break;
+ case < 1:
+ errors.Add(
+ (
+ $"fields.{index}.name",
+ ValidationError.LengthError(
+ "Field name is too short",
+ 1,
+ Limits.FieldNameLimit,
+ field.Name.Length
+ )
)
- )
- );
+ );
+ break;
}
errors = errors
@@ -101,7 +102,7 @@ public partial class ValidationService
return errors;
}
- public IEnumerable<(string, ValidationError?)> ValidateFieldEntries(
+ public static IEnumerable<(string, ValidationError?)> ValidateFieldEntries(
FieldEntry[]? entries,
IReadOnlyDictionary customPreferences,
string errorPrefix = "fields"
@@ -111,7 +112,7 @@ public partial class ValidationService
return [];
var errors = new List<(string, ValidationError?)>();
- if (entries.Length > _limits.MaxFieldEntries)
+ if (entries.Length > Limits.FieldEntriesLimit)
{
errors.Add(
(
@@ -119,7 +120,7 @@ public partial class ValidationService
ValidationError.LengthError(
"Field has too many entries",
0,
- _limits.MaxFieldEntries,
+ Limits.FieldEntriesLimit,
entries.Length
)
)
@@ -127,7 +128,7 @@ public partial class ValidationService
}
// Same as above, no overwhelming this function with a ridiculous amount of entries
- if (entries.Length > _limits.MaxFieldEntries + 50)
+ if (entries.Length > Limits.FieldEntriesLimit + 50)
return errors;
string[] customPreferenceIds = customPreferences.Keys.Select(id => id.ToString()).ToArray();
@@ -138,33 +139,34 @@ public partial class ValidationService
)
)
{
- if (entry.Value.Length > _limits.MaxFieldEntryTextLength)
+ switch (entry.Value.Length)
{
- errors.Add(
- (
- $"{errorPrefix}.{entryIdx}.value",
- ValidationError.LengthError(
- "Field value is too long",
- 1,
- _limits.MaxFieldEntryTextLength,
- entry.Value.Length
+ case > Limits.FieldEntryTextLimit:
+ errors.Add(
+ (
+ $"{errorPrefix}.{entryIdx}.value",
+ ValidationError.LengthError(
+ "Field value is too long",
+ 1,
+ Limits.FieldEntryTextLimit,
+ entry.Value.Length
+ )
)
- )
- );
- }
- else if (entry.Value.Length < 1)
- {
- errors.Add(
- (
- $"{errorPrefix}.{entryIdx}.value",
- ValidationError.LengthError(
- "Field value is too short",
- 1,
- _limits.MaxFieldEntryTextLength,
- entry.Value.Length
+ );
+ break;
+ case < 1:
+ errors.Add(
+ (
+ $"{errorPrefix}.{entryIdx}.value",
+ ValidationError.LengthError(
+ "Field value is too short",
+ 1,
+ Limits.FieldEntryTextLimit,
+ entry.Value.Length
+ )
)
- )
- );
+ );
+ break;
}
if (
@@ -184,7 +186,7 @@ public partial class ValidationService
return errors;
}
- public IEnumerable<(string, ValidationError?)> ValidatePronouns(
+ public static IEnumerable<(string, ValidationError?)> ValidatePronouns(
Pronoun[]? entries,
IReadOnlyDictionary customPreferences,
string errorPrefix = "pronouns"
@@ -194,7 +196,7 @@ public partial class ValidationService
return [];
var errors = new List<(string, ValidationError?)>();
- if (entries.Length > _limits.MaxFieldEntries)
+ if (entries.Length > Limits.FieldEntriesLimit)
{
errors.Add(
(
@@ -202,7 +204,7 @@ public partial class ValidationService
ValidationError.LengthError(
"Too many pronouns",
0,
- _limits.MaxFieldEntries,
+ Limits.FieldEntriesLimit,
entries.Length
)
)
@@ -210,7 +212,7 @@ public partial class ValidationService
}
// Same as above, no overwhelming this function with a ridiculous amount of entries
- if (entries.Length > _limits.MaxFieldEntries + 50)
+ if (entries.Length > Limits.FieldEntriesLimit + 50)
return errors;
string[] customPreferenceIds = customPreferences.Keys.Select(id => id.ToString()).ToArray();
@@ -219,64 +221,66 @@ public partial class ValidationService
(Pronoun? entry, int entryIdx) in entries.Select((entry, entryIdx) => (entry, entryIdx))
)
{
- if (entry.Value.Length > _limits.MaxFieldEntryTextLength)
+ switch (entry.Value.Length)
{
- errors.Add(
- (
- $"{errorPrefix}.{entryIdx}.value",
- ValidationError.LengthError(
- "Pronoun value is too long",
- 1,
- _limits.MaxFieldEntryTextLength,
- entry.Value.Length
+ case > Limits.FieldEntryTextLimit:
+ errors.Add(
+ (
+ $"{errorPrefix}.{entryIdx}.value",
+ ValidationError.LengthError(
+ "Pronoun value is too long",
+ 1,
+ Limits.FieldEntryTextLimit,
+ entry.Value.Length
+ )
)
- )
- );
- }
- else if (entry.Value.Length < 1)
- {
- errors.Add(
- (
- $"{errorPrefix}.{entryIdx}.value",
- ValidationError.LengthError(
- "Pronoun value is too short",
- 1,
- _limits.MaxFieldEntryTextLength,
- entry.Value.Length
+ );
+ break;
+ case < 1:
+ errors.Add(
+ (
+ $"{errorPrefix}.{entryIdx}.value",
+ ValidationError.LengthError(
+ "Pronoun value is too short",
+ 1,
+ Limits.FieldEntryTextLimit,
+ entry.Value.Length
+ )
)
- )
- );
+ );
+ break;
}
if (entry.DisplayText != null)
{
- if (entry.DisplayText.Length > _limits.MaxFieldEntryTextLength)
+ switch (entry.DisplayText.Length)
{
- errors.Add(
- (
- $"{errorPrefix}.{entryIdx}.display_text",
- ValidationError.LengthError(
- "Pronoun display text is too long",
- 1,
- _limits.MaxFieldEntryTextLength,
- entry.Value.Length
+ case > Limits.FieldEntryTextLimit:
+ errors.Add(
+ (
+ $"{errorPrefix}.{entryIdx}.display_text",
+ ValidationError.LengthError(
+ "Pronoun display text is too long",
+ 1,
+ Limits.FieldEntryTextLimit,
+ entry.Value.Length
+ )
)
- )
- );
- }
- else if (entry.DisplayText.Length < 1)
- {
- errors.Add(
- (
- $"{errorPrefix}.{entryIdx}.display_text",
- ValidationError.LengthError(
- "Pronoun display text is too short",
- 1,
- _limits.MaxFieldEntryTextLength,
- entry.Value.Length
+ );
+ break;
+ case < 1:
+ errors.Add(
+ (
+ $"{errorPrefix}.{entryIdx}.display_text",
+ ValidationError.LengthError(
+ "Pronoun display text is too short",
+ 1,
+ Limits.FieldEntryTextLimit,
+ entry.Value.Length
+ )
)
- )
- );
+ );
+ break;
}
}
diff --git a/Foxnouns.Backend/Utils/ValidationUtils.Strings.cs b/Foxnouns.Backend/Utils/ValidationUtils.Strings.cs
index 82ee485..1a99993 100644
--- a/Foxnouns.Backend/Utils/ValidationUtils.Strings.cs
+++ b/Foxnouns.Backend/Utils/ValidationUtils.Strings.cs
@@ -20,7 +20,7 @@ public static partial class ValidationUtils
public static ValidationError? ValidateReportContext(string? context) =>
context?.Length > MaximumReportContextLength
- ? ValidationError.GenericValidationError("Report context is too long", null)
+ ? ValidationError.GenericValidationError("Avatar is too large", null)
: null;
public const int MinimumPasswordLength = 12;
diff --git a/Foxnouns.Backend/packages.lock.json b/Foxnouns.Backend/packages.lock.json
index e3799c6..dc238f7 100644
--- a/Foxnouns.Backend/packages.lock.json
+++ b/Foxnouns.Backend/packages.lock.json
@@ -4,9 +4,9 @@
"net9.0": {
"Coravel": {
"type": "Direct",
- "requested": "[6.0.2, )",
- "resolved": "6.0.2",
- "contentHash": "/XZiRId4Ilar/OqjGKdxkZWfW97ekeT0wgiWNjGdqf8pPxiK508//Zkc0xrKMDOqchFT7B/oqAoQ+Vrx1txpPQ==",
+ "requested": "[6.0.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "U16V/IxGL2TcpU9sT1gUA3pqoVIlz+WthC4idn8OTPiEtLElTcmNF6sHt+gOx8DRU8TBgN5vjfL4AHetjacOWQ==",
"dependencies": {
"Microsoft.Extensions.Caching.Memory": "3.1.0",
"Microsoft.Extensions.Configuration.Binder": "6.0.0",
@@ -17,12 +17,12 @@
},
"Coravel.Mailer": {
"type": "Direct",
- "requested": "[7.1.0, )",
- "resolved": "7.1.0",
- "contentHash": "yMbUrwKl5/HbJeX8JkHa8Q3CPTJ3OmPyDSG7sULbXGEhzc2GiYIh7pmVhI1FFeL3VUtFavMDkS8PTwEeCpiwlg==",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "mxSlOOBxPjCAZruOpgXtubnZA9lD0DRgutApQmAsts7DoRfe0wTzqWrYjeZTiIzgVJZKZxJglN8duTvbPrw3jQ==",
"dependencies": {
- "MailKit": "4.8.0",
- "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "6.0.36"
+ "MailKit": "4.3.0",
+ "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "6.0.27"
}
},
"EFCore.NamingConventions": {
@@ -60,41 +60,41 @@
},
"Microsoft.AspNetCore.Mvc.NewtonsoftJson": {
"type": "Direct",
- "requested": "[9.0.2, )",
- "resolved": "9.0.2",
- "contentHash": "cCnaxji6nqIHHLAEhZ6QirXCvwJNi0Q/qCPLkRW5SqMYNuOwoQdGk1KAhW65phBq1VHGt7wLbadpuGPGqfiZuA==",
+ "requested": "[9.0.0, )",
+ "resolved": "9.0.0",
+ "contentHash": "pTFDEmZi3GheCSPrBxzyE63+d5unln2vYldo/nOm1xet/4rpEk2oJYcwpclPQ13E+LZBF9XixkgwYTUwqznlWg==",
"dependencies": {
- "Microsoft.AspNetCore.JsonPatch": "9.0.2",
+ "Microsoft.AspNetCore.JsonPatch": "9.0.0",
"Newtonsoft.Json": "13.0.3",
"Newtonsoft.Json.Bson": "1.0.2"
}
},
"Microsoft.AspNetCore.OpenApi": {
"type": "Direct",
- "requested": "[9.0.2, )",
- "resolved": "9.0.2",
- "contentHash": "JUndpjRNdG8GvzBLH/J4hen4ehWaPcshtiQ6+sUs1Bcj3a7dOsmWpDloDlpPeMOVSlhHwUJ3Xld0ClZjsFLgFQ==",
+ "requested": "[9.0.0, )",
+ "resolved": "9.0.0",
+ "contentHash": "FqUK5j1EOPNuFT7IafltZQ3cakqhSwVzH5ZW1MhZDe4pPXs9sJ2M5jom1Omsu+mwF2tNKKlRAzLRHQTZzbd+6Q==",
"dependencies": {
"Microsoft.OpenApi": "1.6.17"
}
},
"Microsoft.EntityFrameworkCore": {
"type": "Direct",
- "requested": "[9.0.2, )",
- "resolved": "9.0.2",
- "contentHash": "P90ZuybgcpW32y985eOYxSoZ9IiL0UTYQlY0y1Pt1iHAnpZj/dQHREpSpry1RNvk8YjAeoAkWFdem5conqB9zQ==",
+ "requested": "[9.0.0, )",
+ "resolved": "9.0.0",
+ "contentHash": "wpG+nfnfDAw87R3ovAsUmjr3MZ4tYXf6bFqEPVAIKE6IfPml3DS//iX0DBnf8kWn5ZHSO5oi1m4d/Jf+1LifJQ==",
"dependencies": {
- "Microsoft.EntityFrameworkCore.Abstractions": "9.0.2",
- "Microsoft.EntityFrameworkCore.Analyzers": "9.0.2",
- "Microsoft.Extensions.Caching.Memory": "9.0.2",
- "Microsoft.Extensions.Logging": "9.0.2"
+ "Microsoft.EntityFrameworkCore.Abstractions": "9.0.0",
+ "Microsoft.EntityFrameworkCore.Analyzers": "9.0.0",
+ "Microsoft.Extensions.Caching.Memory": "9.0.0",
+ "Microsoft.Extensions.Logging": "9.0.0"
}
},
"Microsoft.EntityFrameworkCore.Design": {
"type": "Direct",
- "requested": "[9.0.2, )",
- "resolved": "9.0.2",
- "contentHash": "WWRmTxb/yd05cTW+k32lLvIhffxilgYvwKHDxiqe7GRLKeceyMspuf5BRpW65sFF7S2G+Be9JgjUe1ypGqt9tg==",
+ "requested": "[9.0.0, )",
+ "resolved": "9.0.0",
+ "contentHash": "Pqo8I+yHJ3VQrAoY0hiSncf+5P7gN/RkNilK5e+/K/yKh+yAWxdUAI6t0TG26a9VPlCa9FhyklzyFvRyj3YG9A==",
"dependencies": {
"Humanizer.Core": "2.14.1",
"Microsoft.Build.Framework": "17.8.3",
@@ -102,33 +102,33 @@
"Microsoft.CodeAnalysis.CSharp": "4.8.0",
"Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0",
"Microsoft.CodeAnalysis.Workspaces.MSBuild": "4.8.0",
- "Microsoft.EntityFrameworkCore.Relational": "9.0.2",
- "Microsoft.Extensions.Caching.Memory": "9.0.2",
- "Microsoft.Extensions.Configuration.Abstractions": "9.0.2",
- "Microsoft.Extensions.DependencyModel": "9.0.2",
- "Microsoft.Extensions.Logging": "9.0.2",
+ "Microsoft.EntityFrameworkCore.Relational": "9.0.0",
+ "Microsoft.Extensions.Caching.Memory": "9.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.0",
+ "Microsoft.Extensions.DependencyModel": "9.0.0",
+ "Microsoft.Extensions.Logging": "9.0.0",
"Mono.TextTemplating": "3.0.0",
- "System.Text.Json": "9.0.2"
+ "System.Text.Json": "9.0.0"
}
},
"Microsoft.Extensions.Caching.Memory": {
"type": "Direct",
- "requested": "[9.0.2, )",
- "resolved": "9.0.2",
- "contentHash": "AlEfp0DMz8E1h1Exi8LBrUCNmCYcGDfSM4F/uK1D1cYx/R3w0LVvlmjICqxqXTsy7BEZaCf5leRZY2FuPEiFaw==",
+ "requested": "[9.0.0, )",
+ "resolved": "9.0.0",
+ "contentHash": "zbnPX/JQ0pETRSUG9fNPBvpIq42Aufvs15gGYyNIMhCun9yhmWihz0WgsI7bSDPjxWTKBf8oX/zv6v2uZ3W9OQ==",
"dependencies": {
- "Microsoft.Extensions.Caching.Abstractions": "9.0.2",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.2",
- "Microsoft.Extensions.Logging.Abstractions": "9.0.2",
- "Microsoft.Extensions.Options": "9.0.2",
- "Microsoft.Extensions.Primitives": "9.0.2"
+ "Microsoft.Extensions.Caching.Abstractions": "9.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.0",
+ "Microsoft.Extensions.Options": "9.0.0",
+ "Microsoft.Extensions.Primitives": "9.0.0"
}
},
"MimeKit": {
"type": "Direct",
- "requested": "[4.10.0, )",
- "resolved": "4.10.0",
- "contentHash": "GQofI17cH55XSh109hJmHaYMtSFqTX/eUek3UcV7hTnYayAIXZ6eHlv345tfdc+bQ/BrEnYOSZVzx9I3wpvvpg==",
+ "requested": "[4.9.0, )",
+ "resolved": "4.9.0",
+ "contentHash": "DZXXMZzmAABDxFhOSMb6SE8KKxcRd/sk1E6aJTUE5ys2FWOQhznYV2Gl3klaaSfqKn27hQ32haqquH1J8Z6kJw==",
"dependencies": {
"BouncyCastle.Cryptography": "2.5.0",
"System.Formats.Asn1": "8.0.1",
@@ -137,11 +137,11 @@
},
"Minio": {
"type": "Direct",
- "requested": "[6.0.4, )",
- "resolved": "6.0.4",
- "contentHash": "JckRL95hQ/eDHTQZ/BB7jeR0JyF+bOctMW6uriXHY5YPjCX61hiJGsswGjuDSEViKJEPxtPi3e4IwD/1TJ7PIw==",
+ "requested": "[6.0.3, )",
+ "resolved": "6.0.3",
+ "contentHash": "WHlkouclHtiK/pIXPHcjVmbeELHPtElj2qRSopFVpSmsFhZXeM10sPvczrkSPePsmwuvZdFryJ/hJzKu3XeLVg==",
"dependencies": {
- "CommunityToolkit.HighPerformance": "8.3.0",
+ "CommunityToolkit.HighPerformance": "8.2.2",
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.1",
"Microsoft.Extensions.Logging": "8.0.0",
"System.IO.Hashing": "8.0.0",
@@ -156,39 +156,39 @@
},
"NodaTime": {
"type": "Direct",
- "requested": "[3.2.1, )",
- "resolved": "3.2.1",
- "contentHash": "D1aHhUfPQUxU2nfDCVuSLahpp0xCYZTmj/KNH3mSK/tStJYcx9HO9aJ0qbOP3hzjGPV/DXOqY2AHe27Nt4xs4g=="
+ "requested": "[3.2.0, )",
+ "resolved": "3.2.0",
+ "contentHash": "yoRA3jEJn8NM0/rQm78zuDNPA3DonNSZdsorMUj+dltc1D+/Lc5h9YXGqbEEZozMGr37lAoYkcSM/KjTVqD0ow=="
},
"Npgsql.EntityFrameworkCore.PostgreSQL": {
"type": "Direct",
- "requested": "[9.0.3, )",
- "resolved": "9.0.3",
- "contentHash": "1A6HpMPbzK+quxdtug1aDHI4BSRTgpi7OaDt8WQh7SFJd2sSQ0nNTZ7sYrwyxVf4AdKdN7XJL9tpiiJjRUaa4g==",
+ "requested": "[9.0.2, )",
+ "resolved": "9.0.2",
+ "contentHash": "cYdOGplIvr9KgsG8nJ8xnzBTImeircbgetlzS1OmepS5dAQW6PuGpVrLOKBNEwEvGYZPsV8037X5vZ/Dmpwz7Q==",
"dependencies": {
- "Microsoft.EntityFrameworkCore": "[9.0.1, 10.0.0)",
- "Microsoft.EntityFrameworkCore.Relational": "[9.0.1, 10.0.0)",
+ "Microsoft.EntityFrameworkCore": "[9.0.0, 10.0.0)",
+ "Microsoft.EntityFrameworkCore.Relational": "[9.0.0, 10.0.0)",
"Npgsql": "9.0.2"
}
},
"Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime": {
"type": "Direct",
- "requested": "[9.0.3, )",
- "resolved": "9.0.3",
- "contentHash": "Eks1o3NfIbS3EHhrXC0QABrQab7CJ64C2+kF0YJWLwlH/tu3ExrgrSLpLI6INdeMYcLr2PXu71LjJsrQNVciYg==",
+ "requested": "[9.0.2, )",
+ "resolved": "9.0.2",
+ "contentHash": "+mfwiRCK+CAKTkeBZCuQuMaOwM/yMX8B65515PS1le9TUjlG8DobuAmb48MSR/Pr/YMvU1tV8FFEFlyQviQzrg==",
"dependencies": {
- "Npgsql.EntityFrameworkCore.PostgreSQL": "9.0.3",
+ "Npgsql.EntityFrameworkCore.PostgreSQL": "9.0.2",
"Npgsql.NodaTime": "9.0.2"
}
},
"Npgsql.Json.NET": {
"type": "Direct",
- "requested": "[9.0.3, )",
- "resolved": "9.0.3",
- "contentHash": "lN8p9UKkoXaGUhX3DHg/1W6YeEfbjQiQ7XrJSGREUoDHXOLxDQHJnZ49P/9P2s/pH6HTVgTgT5dijpKoRLN0vQ==",
+ "requested": "[9.0.2, )",
+ "resolved": "9.0.2",
+ "contentHash": "E81dvvpNtS4WigxZu16OAFxVvPvbEkXI7vJXZzEp7GQ03MArF5V4HBb7KXDzTaE5ZQ0bhCUFoMTODC6Z8mu27g==",
"dependencies": {
"Newtonsoft.Json": "13.0.3",
- "Npgsql": "9.0.3"
+ "Npgsql": "9.0.2"
}
},
"prometheus-net": {
@@ -212,24 +212,24 @@
},
"Roslynator.Analyzers": {
"type": "Direct",
- "requested": "[4.13.1, )",
- "resolved": "4.13.1",
- "contentHash": "KZpLy6ZlCebMk+d/3I5KU2R7AOb4LNJ6tPJqPtvFXmO8bEBHQvCIAvJOnY2tu4C9/aVOROTDYUFADxFqw1gh/g=="
+ "requested": "[4.12.9, )",
+ "resolved": "4.12.9",
+ "contentHash": "X6lDpN/D5wuinq37KIx+l3GSUe9No+8bCjGBTI5sEEtxapLztkHg6gzNVhMXpXw8P+/5gFYxTXJ5Pf8O4iNz/w=="
},
"Scalar.AspNetCore": {
"type": "Direct",
- "requested": "[2.0.18, )",
- "resolved": "2.0.18",
- "contentHash": "nS8Sw6wRO1A/dARn3q9R6znIBfddJcmAczI5uMROBGWkO2KG/ad/Ld+UeUePTxGr1+6humJSOxI7An+q4q3oGA=="
+ "requested": "[1.2.55, )",
+ "resolved": "1.2.55",
+ "contentHash": "zArlr6nfPQMRwyia0WFirsyczQby51GhNgWITiEIRkot+CVGZSGQ4oWGqExO11/6x26G+mcQo9Oft1mGpN0/ZQ=="
},
"Sentry.AspNetCore": {
"type": "Direct",
- "requested": "[5.2.0, )",
- "resolved": "5.2.0",
- "contentHash": "vEKanBDOxCnEQrcMq3j47z8HOblRfiyJotdm9Fyc24cmLrLsTYZnWWprCYstt++M9bGSXYf4jrM2aaWxgJ8aww==",
+ "requested": "[4.13.0, )",
+ "resolved": "4.13.0",
+ "contentHash": "1cH9hSvjRbTkcpjUejFTrTC3jMIiOrcZ0DIvt16+AYqXhuxPEnI56npR1nhv+7WUGyhyp5cHFIZqrKnyrrGP0w==",
"dependencies": {
- "Microsoft.Extensions.Configuration.Binder": "9.0.0",
- "Sentry.Extensions.Logging": "5.2.0"
+ "Microsoft.Extensions.Configuration.Binder": "8.0.0",
+ "Sentry.Extensions.Logging": "4.13.0"
}
},
"Serilog": {
@@ -264,12 +264,12 @@
},
"Serilog.Sinks.Seq": {
"type": "Direct",
- "requested": "[9.0.0, )",
- "resolved": "9.0.0",
- "contentHash": "aNU8A0K322q7+voPNmp1/qNPH+9QK8xvM1p72sMmCG0wGlshFzmtDW9QnVSoSYCj0MgQKcMOlgooovtBhRlNHw==",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "z5ig56/qzjkX6Fj4U/9m1g8HQaQiYPMZS4Uevtjg1I+WWzoGSf5t/E+6JbMP/jbZYhU63bA5NJN5y0x+qqx2Bw==",
"dependencies": {
- "Serilog": "4.2.0",
- "Serilog.Sinks.File": "6.0.0"
+ "Serilog": "4.0.0",
+ "Serilog.Sinks.File": "5.0.0"
}
},
"SixLabors.ImageSharp": {
@@ -280,9 +280,9 @@
},
"System.Text.Json": {
"type": "Direct",
- "requested": "[9.0.2, )",
- "resolved": "9.0.2",
- "contentHash": "4TY2Yokh5Xp8XHFhsY9y84yokS7B0rhkaZCXuRiKppIiKwPVH4lVSFD9EEFzRpXdBM5ZeZXD43tc2vB6njEwwQ=="
+ "requested": "[9.0.0, )",
+ "resolved": "9.0.0",
+ "contentHash": "js7+qAu/9mQvnhA4EfGMZNEzXtJCDxgkgj8ohuxq/Qxv+R56G+ljefhiJHOxTNiw54q8vmABCWUwkMulNdlZ4A=="
},
"System.Text.RegularExpressions": {
"type": "Direct",
@@ -306,8 +306,8 @@
},
"CommunityToolkit.HighPerformance": {
"type": "Transitive",
- "resolved": "8.3.0",
- "contentHash": "2zc0Wfr9OtEbLqm6J1Jycim/nKmYv+v12CytJ3tZGNzw7n3yjh1vNCMX0kIBaFBk3sw8g0pMR86QJGXGlArC+A=="
+ "resolved": "8.2.2",
+ "contentHash": "+zIp8d3sbtYaRbM6hqDs4Ui/z34j7DcUmleruZlYLE4CVxXq+MO8XJyIs42vzeTYFX+k0Iq1dEbBUnQ4z/Gnrw=="
},
"EntityFrameworkCore.Exceptions.Common": {
"type": "Transitive",
@@ -319,17 +319,16 @@
},
"MailKit": {
"type": "Transitive",
- "resolved": "4.8.0",
- "contentHash": "zZ1UoM4FUnSFUJ9fTl5CEEaejR0DNP6+FDt1OfXnjg4igZntcir1tg/8Ufd6WY5vrpmvToAjluYqjVM24A+5lA==",
+ "resolved": "4.3.0",
+ "contentHash": "jVmB3Nr0JpqhyMiXOGWMin+QvRKpucGpSFBCav9dG6jEJPdBV+yp1RHVpKzxZPfT+0adaBuZlMFdbIciZo1EWA==",
"dependencies": {
- "MimeKit": "4.8.0",
- "System.Formats.Asn1": "8.0.1"
+ "MimeKit": "4.3.0"
}
},
"Microsoft.AspNetCore.JsonPatch": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "bZMRhazEBgw9aZ5EBGYt0017CSd+aecsUCnppVjSa1SzWH6C1ieTSQZRAe+H0DzAVzWAoK7HLwKnQUPioopPrA==",
+ "resolved": "9.0.0",
+ "contentHash": "/4UONYoAIeexPoAmbzBPkVGA6KAY7t0BM+1sr0fKss2V1ERCdcM+Llub4X5Ma+LJ60oPp6KzM0e3j+Pp/JHCNw==",
"dependencies": {
"Microsoft.CSharp": "4.7.0",
"Newtonsoft.Json": "13.0.3"
@@ -337,27 +336,27 @@
},
"Microsoft.AspNetCore.Mvc.Razor.Extensions": {
"type": "Transitive",
- "resolved": "6.0.36",
- "contentHash": "KFHRhrGAnd80310lpuWzI7Cf+GidS/h3JaPDFFnSmSGjCxB5vkBv5E+TXclJCJhqPtgNxg+keTC5SF1T9ieG5w==",
+ "resolved": "6.0.27",
+ "contentHash": "trwJhFrTQuJTImmixMsDnDgRE8zuTzAUAot7WqiUlmjNzlJWLOaXXBpeA/xfNJvZuOsyGjC7RIzEyNyDGhDTLg==",
"dependencies": {
- "Microsoft.AspNetCore.Razor.Language": "6.0.36",
- "Microsoft.CodeAnalysis.Razor": "6.0.36"
+ "Microsoft.AspNetCore.Razor.Language": "6.0.27",
+ "Microsoft.CodeAnalysis.Razor": "6.0.27"
}
},
"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": {
"type": "Transitive",
- "resolved": "6.0.36",
- "contentHash": "0OG/wNedsQ9kTMrFuvrUDoJvp6Fxj6BzWgi7AUCluOENxu/0PzbjY9AC5w6mZJ22/AFxn2gFc2m0yOBTfQbiPg==",
+ "resolved": "6.0.27",
+ "contentHash": "C6Gh/sAuUACxNtllcH4ZniWtPcGbixJuB1L5RXwoUe1a1wM6rpQ2TVMWpX2+cgeBj8U/izJyWY+nJ4Lz8mmMKA==",
"dependencies": {
- "Microsoft.AspNetCore.Mvc.Razor.Extensions": "6.0.36",
- "Microsoft.CodeAnalysis.Razor": "6.0.36",
- "Microsoft.Extensions.DependencyModel": "6.0.2"
+ "Microsoft.AspNetCore.Mvc.Razor.Extensions": "6.0.27",
+ "Microsoft.CodeAnalysis.Razor": "6.0.27",
+ "Microsoft.Extensions.DependencyModel": "6.0.0"
}
},
"Microsoft.AspNetCore.Razor.Language": {
"type": "Transitive",
- "resolved": "6.0.36",
- "contentHash": "n5Mg5D0aRrhHJJ6bJcwKqQydIFcgUq0jTlvuynoJjwA2IvAzh8Aqf9cpYagofQbIlIXILkCP6q6FgbngyVtpYA=="
+ "resolved": "6.0.27",
+ "contentHash": "bI1kIZBgx7oJIB7utPrw4xIgcj7Pdx1jnHMTdsG54U602OcGpBzbfAuKaWs+LVdj+zZVuZsCSoRIZNJKTDP7Hw=="
},
"Microsoft.Bcl.AsyncInterfaces": {
"type": "Transitive",
@@ -411,10 +410,10 @@
},
"Microsoft.CodeAnalysis.Razor": {
"type": "Transitive",
- "resolved": "6.0.36",
- "contentHash": "RTLNJglWezr/1IkiWdtDpPYW7X7lwa4ow8E35cHt+sWdWxOnl+ayQqMy1RfbaLp7CLmRmgXSzMMZZU3D4vZi9Q==",
+ "resolved": "6.0.27",
+ "contentHash": "NAUvSjH8QY8gPp/fXjHhi3MnQEGtSJA0iRT/dT3RKO3AdGACPJyGmKEKxLag9+Kf2On51yGHT9DEPPnK3hyezg==",
"dependencies": {
- "Microsoft.AspNetCore.Razor.Language": "6.0.36",
+ "Microsoft.AspNetCore.Razor.Language": "6.0.27",
"Microsoft.CodeAnalysis.CSharp": "4.0.0",
"Microsoft.CodeAnalysis.Common": "4.0.0"
}
@@ -450,48 +449,48 @@
},
"Microsoft.EntityFrameworkCore.Abstractions": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "oVSjNSIYHsk0N66eqAWgDcyo9etEFbUswbz7SmlYR6nGp05byHrJAYM5N8U2aGWJWJI6WvIC2e4TXJgH6GZ6HQ=="
+ "resolved": "9.0.0",
+ "contentHash": "fnmifFL8KaA4ZNLCVgfjCWhZUFxkrDInx5hR4qG7Q8IEaSiy/6VOSRFyx55oH7MV4y7wM3J3EE90nSpcVBI44Q=="
},
"Microsoft.EntityFrameworkCore.Analyzers": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "w4jzX7XI+L3erVGzbHXpx64A3QaLXxqG3f1vPpGYYZGpxOIHkh7e4iLLD7cq4Ng1vjkwzWl5ZJp0Kj/nHsgFYg=="
+ "resolved": "9.0.0",
+ "contentHash": "Qje+DzXJOKiXF72SL0XxNlDtTkvWWvmwknuZtFahY5hIQpRKO59qnGuERIQ3qlzuq5x4bAJ8WMbgU5DLhBgeOQ=="
},
"Microsoft.EntityFrameworkCore.Relational": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "r7O4N5uaM95InVSGUj7SMOQWN0f1PBF2Y30ow7Jg+pGX5GJCRVd/1fq83lQ50YMyq+EzyHac5o4CDQA2RsjKJQ==",
+ "resolved": "9.0.0",
+ "contentHash": "j+msw6fWgAE9M3Q/5B9Uhv7pdAdAQUvFPJAiBJmoy+OXvehVbfbCE8ftMAa51Uo2ZeiqVnHShhnv4Y4UJJmUzA==",
"dependencies": {
- "Microsoft.EntityFrameworkCore": "9.0.2",
- "Microsoft.Extensions.Caching.Memory": "9.0.2",
- "Microsoft.Extensions.Configuration.Abstractions": "9.0.2",
- "Microsoft.Extensions.Logging": "9.0.2"
+ "Microsoft.EntityFrameworkCore": "9.0.0",
+ "Microsoft.Extensions.Caching.Memory": "9.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.0",
+ "Microsoft.Extensions.Logging": "9.0.0"
}
},
"Microsoft.Extensions.Caching.Abstractions": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "a7QhA25n+BzSM5r5d7JznfyluMBGI7z3qyLlFviZ1Eiqv6DdiK27sLZdP/rpYirBM6UYAKxu5TbmfhIy13GN9A==",
+ "resolved": "9.0.0",
+ "contentHash": "FPWZAa9c0H4dvOj351iR1jkUIs4u9ykL4Bm592yhjDyO5lCoWd+TMAHx2EMbarzUvCvgjWjJIoC6//Q9kH6YhA==",
"dependencies": {
- "Microsoft.Extensions.Primitives": "9.0.2"
+ "Microsoft.Extensions.Primitives": "9.0.0"
}
},
"Microsoft.Extensions.Configuration": {
"type": "Transitive",
- "resolved": "9.0.0",
- "contentHash": "YIMO9T3JL8MeEXgVozKt2v79hquo/EFtnY0vgxmLnUvk1Rei/halI7kOWZL2RBeV9FMGzgM9LZA8CVaNwFMaNA==",
+ "resolved": "8.0.0",
+ "contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==",
"dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "9.0.0",
- "Microsoft.Extensions.Primitives": "9.0.0"
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "I0O/270E/lUNqbBxlRVjxKOMZyYjP88dpEgQTveml+h2lTzAP4vbawLVwjS9SC7lKaU893bwyyNz0IVJYsm9EA==",
+ "resolved": "9.0.0",
+ "contentHash": "lqvd7W3FGKUO1+ZoUEMaZ5XDJeWvjpy2/M/ptCGz3tXLD4HWVaSzjufsAsjemasBEg+2SxXVtYVvGt5r2nKDlg==",
"dependencies": {
- "Microsoft.Extensions.Primitives": "9.0.2"
+ "Microsoft.Extensions.Primitives": "9.0.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
@@ -504,30 +503,30 @@
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "ZffbJrskOZ40JTzcTyKwFHS5eACSWp2bUQBBApIgGV+es8RaTD4OxUG7XxFr3RIPLXtYQ1jQzF2DjKB5fZn7Qg==",
+ "resolved": "9.0.0",
+ "contentHash": "MCPrg7v3QgNMr0vX4vzRXvkNGgLg8vKWX0nKCWUxu2uPyMsaRgiRc1tHBnbTcfJMhMKj2slE/j2M9oGkd25DNw==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.2"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "MNe7GSTBf3jQx5vYrXF0NZvn6l7hUKF6J54ENfAgCO8y6xjN1XUmKKWG464LP2ye6QqDiA1dkaWEZBYnhoZzjg=="
+ "resolved": "9.0.0",
+ "contentHash": "+6f2qv2a3dLwd5w6JanPIPs47CxRbnk+ZocMJUhv9NxP88VlOcJYZs9jY+MYSjxvady08bUZn6qgiNh7DadGgg=="
},
"Microsoft.Extensions.DependencyModel": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "3ImbcbS68jy9sKr9Z9ToRbEEX0bvIRdb8zyf5ebtL9Av2CUCGHvaO5wsSXfRfAjr60Vrq0tlmNji9IzAxW6EOw=="
+ "resolved": "9.0.0",
+ "contentHash": "saxr2XzwgDU77LaQfYFXmddEDRUKHF4DaGMZkNB3qjdVSZlax3//dGJagJkKrGMIPNZs2jVFXITyCCR6UHJNdA=="
},
"Microsoft.Extensions.Diagnostics": {
"type": "Transitive",
- "resolved": "9.0.0",
- "contentHash": "0CF9ZrNw5RAlRfbZuVIvzzhP8QeWqHiUmMBU/2H7Nmit8/vwP3/SbHeEctth7D4Gz2fBnEbokPc1NU8/j/1ZLw==",
+ "resolved": "8.0.0",
+ "contentHash": "3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==",
"dependencies": {
- "Microsoft.Extensions.Configuration": "9.0.0",
- "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.0",
- "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.0"
+ "Microsoft.Extensions.Configuration": "8.0.0",
+ "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0"
}
},
"Microsoft.Extensions.Diagnostics.Abstractions": {
@@ -561,48 +560,48 @@
},
"Microsoft.Extensions.Http": {
"type": "Transitive",
- "resolved": "9.0.0",
- "contentHash": "DqI4q54U4hH7bIAq9M5a/hl5Odr/KBAoaZ0dcT4OgutD8dook34CbkvAfAIzkMVjYXiL+E5ul9etwwqiX4PHGw==",
+ "resolved": "8.0.0",
+ "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==",
"dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "9.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0",
- "Microsoft.Extensions.Diagnostics": "9.0.0",
- "Microsoft.Extensions.Logging": "9.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "9.0.0",
- "Microsoft.Extensions.Options": "9.0.0"
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Diagnostics": "8.0.0",
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "loV/0UNpt2bD+6kCDzFALVE63CDtqzPeC0LAetkdhiEr/tTNbvOlQ7CBResH7BQBd3cikrwiBfaHdyHMFUlc2g==",
+ "resolved": "9.0.0",
+ "contentHash": "crjWyORoug0kK7RSNJBTeSE6VX8IQgLf3nUpTB9m62bPXp/tzbnOsnbe8TXEG0AASNaKZddnpHKw7fET8E++Pg==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "9.0.2",
- "Microsoft.Extensions.Logging.Abstractions": "9.0.2",
- "Microsoft.Extensions.Options": "9.0.2"
+ "Microsoft.Extensions.DependencyInjection": "9.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.0",
+ "Microsoft.Extensions.Options": "9.0.0"
}
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "dV9s2Lamc8jSaqhl2BQSPn/AryDIH2sSbQUyLitLXV0ROmsb+SROnn2cH939JFbsNrnf3mIM3GNRKT7P0ldwLg==",
+ "resolved": "9.0.0",
+ "contentHash": "g0UfujELzlLbHoVG8kPKVBaW470Ewi+jnptGS9KUi6jcb+k2StujtK3m26DFSGGwQ/+bVgZfsWqNzlP6YOejvw==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.2"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0"
}
},
"Microsoft.Extensions.Logging.Configuration": {
"type": "Transitive",
- "resolved": "9.0.0",
- "contentHash": "H05HiqaNmg6GjH34ocYE9Wm1twm3Oz2aXZko8GTwGBzM7op2brpAA8pJ5yyD1OpS1mXUtModBYOlcZ/wXeWsSg==",
+ "resolved": "8.0.0",
+ "contentHash": "ixXXV0G/12g6MXK65TLngYN9V5hQQRuV+fZi882WIoVJT7h5JvoYoxTEwCgdqwLjSneqh1O+66gM8sMr9z/rsQ==",
"dependencies": {
- "Microsoft.Extensions.Configuration": "9.0.0",
- "Microsoft.Extensions.Configuration.Abstractions": "9.0.0",
- "Microsoft.Extensions.Configuration.Binder": "9.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0",
- "Microsoft.Extensions.Logging": "9.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "9.0.0",
- "Microsoft.Extensions.Options": "9.0.0",
- "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.0"
+ "Microsoft.Extensions.Configuration": "8.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "8.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -612,29 +611,29 @@
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "zr98z+AN8+isdmDmQRuEJ/DAKZGUTHmdv3t0ZzjHvNqvA44nAgkXE9kYtfoN6581iALChhVaSw2Owt+Z2lVbkQ==",
+ "resolved": "9.0.0",
+ "contentHash": "y2146b3jrPI3Q0lokKXdKLpmXqakYbDIPDV6r3M8SqvSf45WwOTzkyfDpxnZXJsJQEpAsAqjUq5Pu8RCJMjubg==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.2",
- "Microsoft.Extensions.Primitives": "9.0.2"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0",
+ "Microsoft.Extensions.Primitives": "9.0.0"
}
},
"Microsoft.Extensions.Options.ConfigurationExtensions": {
"type": "Transitive",
- "resolved": "9.0.0",
- "contentHash": "Ob3FXsXkcSMQmGZi7qP07EQ39kZpSBlTcAZLbJLdI4FIf0Jug8biv2HTavWmnTirchctPlq9bl/26CXtQRguzA==",
+ "resolved": "8.0.0",
+ "contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==",
"dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "9.0.0",
- "Microsoft.Extensions.Configuration.Binder": "9.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0",
- "Microsoft.Extensions.Options": "9.0.0",
- "Microsoft.Extensions.Primitives": "9.0.0"
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "8.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "9.0.2",
- "contentHash": "puBMtKe/wLuYa7H6docBkLlfec+h8L35DXqsDKKJgW0WY5oCwJ3cBJKcDaZchv6knAyqOMfsl6VUbaR++E5LXA=="
+ "resolved": "9.0.0",
+ "contentHash": "N3qEBzmLMYiASUlKxxFIISP4AiwuPTHF5uCh+2CWSwwzAJiIYx0kBJsS30cp1nvhSySFAVi30jecD307jV+8Kg=="
},
"Microsoft.NETCore.Platforms": {
"type": "Transitive",
@@ -669,8 +668,8 @@
},
"Npgsql": {
"type": "Transitive",
- "resolved": "9.0.3",
- "contentHash": "tPvY61CxOAWxNsKLEBg+oR646X4Bc8UmyQ/tJszL/7mEmIXQnnBhVJZrZEEUv0Bstu0mEsHZD5At3EO8zQRAYw==",
+ "resolved": "9.0.2",
+ "contentHash": "hCbO8box7i/XXiTFqCJ3GoowyLqx3JXxyrbOJ6om7dr+eAknvBNhhUHeJVGAQo44sySZTfdVffp4BrtPeLZOAA==",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
}
@@ -686,18 +685,18 @@
},
"Sentry": {
"type": "Transitive",
- "resolved": "5.2.0",
- "contentHash": "b3aZSOU2CjlIIFRtPRbXParKQ+9PF+JOqkSD7Gxq6PiR07t1rnK+crPtdrWMXfW6PVo/s67trCJ+fuLsgTeADw=="
+ "resolved": "4.13.0",
+ "contentHash": "Wfw3M1WpFcrYaGzPm7QyUTfIOYkVXQ1ry6p4WYjhbLz9fPwV23SGQZTFDpdox67NHM0V0g1aoQ4YKLm4ANtEEg=="
},
"Sentry.Extensions.Logging": {
"type": "Transitive",
- "resolved": "5.2.0",
- "contentHash": "546bHsERKY7/pG5T4mVIp6WbHnQPMst6VDuxSaeU5DhQHLfh7KhgMmkdZ4Xvdlr95fvWk5/bX2xbipy6qoh/1A==",
+ "resolved": "4.13.0",
+ "contentHash": "yZ5+TtJKWcss6cG17YjnovImx4X56T8O6Qy6bsMC8tMDttYy8J7HJ2F+WdaZNyjOCo0Rfi6N2gc+Clv/5pf+TQ==",
"dependencies": {
- "Microsoft.Extensions.Configuration.Binder": "9.0.0",
- "Microsoft.Extensions.Http": "9.0.0",
- "Microsoft.Extensions.Logging.Configuration": "9.0.0",
- "Sentry": "5.2.0"
+ "Microsoft.Extensions.Configuration.Binder": "8.0.0",
+ "Microsoft.Extensions.Http": "8.0.0",
+ "Microsoft.Extensions.Logging.Configuration": "8.0.0",
+ "Sentry": "4.13.0"
}
},
"Serilog.Extensions.Hosting": {
diff --git a/Foxnouns.DataMigrator/Foxnouns.DataMigrator.csproj b/Foxnouns.DataMigrator/Foxnouns.DataMigrator.csproj
index ead15ce..5fde110 100644
--- a/Foxnouns.DataMigrator/Foxnouns.DataMigrator.csproj
+++ b/Foxnouns.DataMigrator/Foxnouns.DataMigrator.csproj
@@ -12,9 +12,9 @@
-
-
-
+
+
+
diff --git a/Foxnouns.DataMigrator/UserMigrator.cs b/Foxnouns.DataMigrator/UserMigrator.cs
index ee46878..df895b9 100644
--- a/Foxnouns.DataMigrator/UserMigrator.cs
+++ b/Foxnouns.DataMigrator/UserMigrator.cs
@@ -2,7 +2,7 @@ using System.Diagnostics.CodeAnalysis;
using Dapper;
using Foxnouns.Backend.Database;
using Foxnouns.Backend.Database.Models;
-using Foxnouns.Backend.Services;
+using Foxnouns.Backend.Utils;
using Foxnouns.DataMigrator.Models;
using NodaTime.Extensions;
using Npgsql;
@@ -260,6 +260,6 @@ public class UserMigrator(
{
if (_preferenceIds.TryGetValue(id, out Snowflake preferenceId))
return preferenceId.ToString();
- return ValidationService.DefaultStatusOptions.Contains(id) ? id : "okay";
+ return ValidationUtils.DefaultStatusOptions.Contains(id) ? id : "okay";
}
}