mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-26 07:28:45 -07:00
feat: Enhance UgcPurchasablesController to handle bulk requests with object arrays
- Updated Bulk method to parse incoming JSON object arrays for UGC item IDs. - Introduced ReadBulkIdsAsync to handle both object arrays and flat GUID lists. - Added synthetic placeholder responses for missing UGC items to prevent client errors. feat: Implement MatchmakeRoom and MatchmakeSubRoom endpoints in GoToController - Added MatchmakeRoom and MatchmakeSubRoom methods to facilitate joining public and sub-rooms by numeric ID. - Enhanced ApplySubRoomMutation to ensure proper state transitions for sub-rooms. - Improved logging for matchmaking actions. fix: Refactor PlayerSettingsController to handle database save exceptions - Introduced SaveSettingsChangesAsync to manage DbUpdateException for busy SQLite scenarios. - Updated methods to call SaveSettingsChangesAsync instead of direct SaveChangesAsync. chore: Update URL coverage documentation for new matchmaking endpoints - Documented new MatchmakeRoom and MatchmakeSubRoom endpoints in url-coverage.md. chore: Add default room data file for room loading - Included default_room.room to serve as a fallback for missing room data. fix: Improve SQLite concurrency handling in DatabaseBootstrap - Configured SQLite to use WAL mode and set a busy timeout for better concurrency. chore: Create SqliteErrors utility for handling SQLite exceptions - Added SqliteErrors class to encapsulate logic for detecting busy SQLite exceptions. refactor: Update RoomDataBlobService to serve default room data - Modified GetDefaultBlob to load and serve a default room blob with proper role data.
This commit is contained in:
@@ -14,7 +14,7 @@ namespace DorkNet.Server.Controllers.PlayerSettings;
|
||||
/// </summary>
|
||||
[ApiController]
|
||||
[Authorize]
|
||||
public class PlayerSettingsController(DorkNetDbContext db) : ControllerBase
|
||||
public class PlayerSettingsController(DorkNetDbContext db, ILogger<PlayerSettingsController> logger) : ControllerBase
|
||||
{
|
||||
private long CurrentPlayerId => this.RequireCurrentPlayerId();
|
||||
|
||||
@@ -64,7 +64,7 @@ public class PlayerSettingsController(DorkNetDbContext db) : ControllerBase
|
||||
foreach (var (key, value) in updates)
|
||||
await UpsertSettingAsync(accountId, key, value, save: false);
|
||||
|
||||
await db.SaveChangesAsync();
|
||||
await SaveSettingsChangesAsync();
|
||||
return Ok();
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ public class PlayerSettingsController(DorkNetDbContext db) : ControllerBase
|
||||
if (setting is null) return NotFound();
|
||||
|
||||
db.PlayerSettings.Remove(setting);
|
||||
await db.SaveChangesAsync();
|
||||
await SaveSettingsChangesAsync();
|
||||
return Ok();
|
||||
}
|
||||
|
||||
@@ -91,7 +91,20 @@ public class PlayerSettingsController(DorkNetDbContext db) : ControllerBase
|
||||
else
|
||||
existing.Value = value;
|
||||
|
||||
if (save) await db.SaveChangesAsync();
|
||||
if (save) await SaveSettingsChangesAsync();
|
||||
}
|
||||
|
||||
private async Task SaveSettingsChangesAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
await db.SaveChangesAsync();
|
||||
}
|
||||
catch (DbUpdateException ex) when (SqliteErrors.IsBusy(ex))
|
||||
{
|
||||
db.ChangeTracker.Clear();
|
||||
logger.LogWarning(ex, "[playersettings] dropping low-priority setting write because sqlite is busy");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<(string? Key, string? Value)> ReadSettingKeyValueAsync()
|
||||
|
||||
Reference in New Issue
Block a user