♻️ Centralized data models (wip)

This commit is contained in:
2025-09-27 14:09:28 +08:00
parent 51b6f7309e
commit e70d8371f8
206 changed files with 1352 additions and 2128 deletions

View File

@@ -1,21 +0,0 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using DysonNetwork.Shared.Data;
using NodaTime;
namespace DysonNetwork.Ring.Notification;
public class Notification : ModelBase
{
public Guid Id { get; set; } = Guid.NewGuid();
[MaxLength(1024)] public string Topic { get; set; } = null!;
[MaxLength(1024)] public string? Title { get; set; }
[MaxLength(2048)] public string? Subtitle { get; set; }
[MaxLength(4096)] public string? Content { get; set; }
[Column(TypeName = "jsonb")] public Dictionary<string, object?> Meta { get; set; } = new();
public int Priority { get; set; } = 10;
public Instant? ViewedAt { get; set; }
public Guid AccountId { get; set; }
}

View File

@@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using DysonNetwork.Shared.Auth;
using DysonNetwork.Shared.Models;
using DysonNetwork.Shared.Proto;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -78,7 +79,7 @@ public class NotificationController(
[HttpPut("subscription")]
[Authorize]
public async Task<ActionResult<PushSubscription>>
public async Task<ActionResult<SnNotificationPushSubscription>>
SubscribeToPushNotification(
[FromBody] PushNotificationSubscribeRequest request
)

View File

@@ -2,10 +2,11 @@ using CorePush.Apple;
using CorePush.Firebase;
using DysonNetwork.Ring.Connection;
using DysonNetwork.Ring.Services;
using DysonNetwork.Shared.Models;
using DysonNetwork.Shared.Proto;
using Microsoft.EntityFrameworkCore;
using NodaTime;
using WebSocketPacket = DysonNetwork.Shared.Data.WebSocketPacket;
using WebSocketPacket = DysonNetwork.Shared.Models.WebSocketPacket;
namespace DysonNetwork.Ring.Notification;
@@ -62,7 +63,7 @@ public class PushService
.ExecuteDeleteAsync();
}
public async Task<PushSubscription> SubscribeDevice(
public async Task<SnNotificationPushSubscription> SubscribeDevice(
string deviceId,
string deviceToken,
PushProvider provider,
@@ -90,7 +91,7 @@ public class PushService
return existingSubscription;
}
var subscription = new PushSubscription
var subscription = new SnNotificationPushSubscription
{
DeviceId = deviceId,
DeviceToken = deviceToken,
@@ -259,7 +260,7 @@ public class PushService
await DeliverPushNotification(notification);
}
private async Task SendPushNotificationAsync(PushSubscription subscription, Notification notification)
private async Task SendPushNotificationAsync(SnNotificationPushSubscription subscription, Notification notification)
{
try
{

View File

@@ -1,25 +0,0 @@
using System.ComponentModel.DataAnnotations;
using DysonNetwork.Shared.Data;
using Microsoft.EntityFrameworkCore;
using NodaTime;
namespace DysonNetwork.Ring.Notification;
public enum PushProvider
{
Apple,
Google
}
[Index(nameof(AccountId), nameof(DeviceId), nameof(DeletedAt), IsUnique = true)]
public class PushSubscription : ModelBase
{
public Guid Id { get; set; } = Guid.NewGuid();
public Guid AccountId { get; set; }
[MaxLength(8192)] public string DeviceId { get; set; } = null!;
[MaxLength(8192)] public string DeviceToken { get; set; } = null!;
public PushProvider Provider { get; set; }
public int CountDelivered { get; set; }
public Instant? LastUsedAt { get; set; }
}