feat: 租户账单公告通知接口

This commit is contained in:
2025-12-03 21:08:28 +08:00
parent 075906266a
commit 9fe7d9606d
47 changed files with 1522 additions and 4 deletions

View File

@@ -0,0 +1,35 @@
using System.Text.Json.Serialization;
using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Shared.Abstractions.Serialization;
namespace TakeoutSaaS.Application.App.Tenants.Dto;
/// <summary>
/// 租户公告 DTO。
/// </summary>
public sealed class TenantAnnouncementDto
{
[JsonConverter(typeof(SnowflakeIdJsonConverter))]
public long Id { get; init; }
[JsonConverter(typeof(SnowflakeIdJsonConverter))]
public long TenantId { get; init; }
public string Title { get; init; } = string.Empty;
public string Content { get; init; } = string.Empty;
public TenantAnnouncementType AnnouncementType { get; init; }
public int Priority { get; init; }
public DateTime EffectiveFrom { get; init; }
public DateTime? EffectiveTo { get; init; }
public bool IsActive { get; init; }
public bool IsRead { get; init; }
public DateTime? ReadAt { get; init; }
}

View File

@@ -0,0 +1,33 @@
using System.Text.Json.Serialization;
using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Shared.Abstractions.Serialization;
namespace TakeoutSaaS.Application.App.Tenants.Dto;
/// <summary>
/// 租户账单 DTO。
/// </summary>
public sealed class TenantBillingDto
{
[JsonConverter(typeof(SnowflakeIdJsonConverter))]
public long Id { get; init; }
[JsonConverter(typeof(SnowflakeIdJsonConverter))]
public long TenantId { get; init; }
public string StatementNo { get; init; } = string.Empty;
public DateTime PeriodStart { get; init; }
public DateTime PeriodEnd { get; init; }
public decimal AmountDue { get; init; }
public decimal AmountPaid { get; init; }
public TenantBillingStatus Status { get; init; }
public DateTime DueDate { get; init; }
public string? LineItemsJson { get; init; }
}

View File

@@ -0,0 +1,31 @@
using System.Text.Json.Serialization;
using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Shared.Abstractions.Serialization;
namespace TakeoutSaaS.Application.App.Tenants.Dto;
/// <summary>
/// 租户通知 DTO。
/// </summary>
public sealed class TenantNotificationDto
{
[JsonConverter(typeof(SnowflakeIdJsonConverter))]
public long Id { get; init; }
[JsonConverter(typeof(SnowflakeIdJsonConverter))]
public long TenantId { get; init; }
public string Title { get; init; } = string.Empty;
public string Message { get; init; } = string.Empty;
public TenantNotificationChannel Channel { get; init; }
public TenantNotificationSeverity Severity { get; init; }
public DateTime SentAt { get; init; }
public DateTime? ReadAt { get; init; }
public string? MetadataJson { get; init; }
}