mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-26 07:28:45 -07:00
feat: Add account privacy settings endpoint
- Implemented new endpoints for retrieving account privacy settings. - Added fields for privacy preferences such as profile visibility, online status, and activity visibility. feat: Extend play menu tags functionality - Updated PlayMenuTagsRequest to include TrendingTags. - Modified SetPlayMenuTags to handle trending tags. - Enhanced logging to include trending tags. fix: Increase maximum archive size for room zip imports - Updated MaxArchiveBytes from 12GB to 25GB in RoomZipImportController. feat: Improve CDN image handling - Added local image path resolution for room images. - Implemented lazy loading of room image aliases from JSON file. feat: Enhance match player presence resolution - Updated ResolveDataBlobForPresenceAsync to consider sub-room IDs and private instance status. feat: Extend RoomEntity with new properties - Added AllowNewUsers, MinLevel, MaxPlayerCalculationMode, LoadScreensJson, PromoImagesJson, and PromoExternalContentJson fields. feat: Update database schema for new room properties - Added new columns to the Rooms table for AllowNewUsers, MinLevel, MaxPlayerCalculationMode, LoadScreensJson, PromoImagesJson, and PromoExternalContentJson. feat: Implement platform notifications controller - Created PlatformNotificationsController for managing user notification preferences. - Added endpoints for retrieving and setting notification preferences and categories.
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using DorkNet.Server.Auth;
|
||||
using DorkNet.Server.Data;
|
||||
using DorkNet.Server.Data.Entities;
|
||||
|
||||
namespace DorkNet.Server.Controllers.PlatformNotifications;
|
||||
|
||||
[ApiController]
|
||||
[Authorize]
|
||||
public class PlatformNotificationsController(DorkNetDbContext db) : ControllerBase
|
||||
{
|
||||
private long Me => this.RequireCurrentPlayerId();
|
||||
|
||||
[HttpGet("/preferences")]
|
||||
[HttpGet("/platformnotifications/preferences")]
|
||||
public async Task<IActionResult> Preferences()
|
||||
{
|
||||
var row = await db.NotificationPrefs.FirstOrDefaultAsync(p => p.PlayerId == Me);
|
||||
return Ok(ToPreferencesWire(row));
|
||||
}
|
||||
|
||||
[HttpPut("/preferences")]
|
||||
[HttpPost("/preferences")]
|
||||
[HttpPut("/platformnotifications/preferences")]
|
||||
[HttpPost("/platformnotifications/preferences")]
|
||||
public async Task<IActionResult> SetPreferences([FromBody] PlatformNotificationPrefsRequest? body)
|
||||
{
|
||||
var row = await db.NotificationPrefs.FirstOrDefaultAsync(p => p.PlayerId == Me);
|
||||
if (row is null)
|
||||
{
|
||||
row = new NotificationPrefsEntity
|
||||
{
|
||||
PlayerId = Me,
|
||||
Platform = "platform",
|
||||
};
|
||||
db.NotificationPrefs.Add(row);
|
||||
}
|
||||
|
||||
if (body is not null)
|
||||
{
|
||||
row.AllowAll = body.AllowAll ?? body.Enabled ?? row.AllowAll;
|
||||
row.AllowMessage = body.AllowMessages ?? body.Messages ?? row.AllowMessage;
|
||||
row.AllowFriendRequest = body.AllowFriendRequests ?? body.FriendRequests ?? row.AllowFriendRequest;
|
||||
row.AllowEventInvite = body.AllowEventInvites ?? body.EventInvites ?? row.AllowEventInvite;
|
||||
row.AllowAnnouncements = body.AllowAnnouncements ?? body.Announcements ?? row.AllowAnnouncements;
|
||||
row.UpdatedAt = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
await db.SaveChangesAsync();
|
||||
return Ok(ToPreferencesWire(row));
|
||||
}
|
||||
|
||||
[HttpGet("/config/categories")]
|
||||
[HttpGet("/platformnotifications/config/categories")]
|
||||
[AllowAnonymous]
|
||||
public IActionResult Categories()
|
||||
{
|
||||
var categories = new[]
|
||||
{
|
||||
Category(1, "messages", "Messages"),
|
||||
Category(2, "friendRequests", "Friend Requests"),
|
||||
Category(3, "eventInvites", "Event Invites"),
|
||||
Category(4, "announcements", "Announcements"),
|
||||
};
|
||||
|
||||
return Ok(new
|
||||
{
|
||||
Categories = categories,
|
||||
Results = categories,
|
||||
TotalResults = categories.Length,
|
||||
});
|
||||
}
|
||||
|
||||
private static object Category(int id, string key, string name) => new
|
||||
{
|
||||
Id = id,
|
||||
CategoryId = id,
|
||||
Key = key,
|
||||
Name = name,
|
||||
DisplayName = name,
|
||||
IsEnabled = true,
|
||||
Enabled = true,
|
||||
DefaultEnabled = true,
|
||||
};
|
||||
|
||||
private static object ToPreferencesWire(NotificationPrefsEntity? row) => new
|
||||
{
|
||||
AllowAll = row?.AllowAll ?? true,
|
||||
Enabled = row?.AllowAll ?? true,
|
||||
AllowMessages = row?.AllowMessage ?? true,
|
||||
Messages = row?.AllowMessage ?? true,
|
||||
AllowFriendRequests = row?.AllowFriendRequest ?? true,
|
||||
FriendRequests = row?.AllowFriendRequest ?? true,
|
||||
AllowEventInvites = row?.AllowEventInvite ?? true,
|
||||
EventInvites = row?.AllowEventInvite ?? true,
|
||||
AllowAnnouncements = row?.AllowAnnouncements ?? true,
|
||||
Announcements = row?.AllowAnnouncements ?? true,
|
||||
Categories = new[]
|
||||
{
|
||||
new { CategoryId = 1, Key = "messages", Enabled = row?.AllowMessage ?? true },
|
||||
new { CategoryId = 2, Key = "friendRequests", Enabled = row?.AllowFriendRequest ?? true },
|
||||
new { CategoryId = 3, Key = "eventInvites", Enabled = row?.AllowEventInvite ?? true },
|
||||
new { CategoryId = 4, Key = "announcements", Enabled = row?.AllowAnnouncements ?? true },
|
||||
},
|
||||
};
|
||||
|
||||
public sealed class PlatformNotificationPrefsRequest
|
||||
{
|
||||
public bool? AllowAll { get; set; }
|
||||
public bool? Enabled { get; set; }
|
||||
public bool? AllowMessages { get; set; }
|
||||
public bool? Messages { get; set; }
|
||||
public bool? AllowFriendRequests { get; set; }
|
||||
public bool? FriendRequests { get; set; }
|
||||
public bool? AllowEventInvites { get; set; }
|
||||
public bool? EventInvites { get; set; }
|
||||
public bool? AllowAnnouncements { get; set; }
|
||||
public bool? Announcements { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user