♻️ Centralized data models (wip)
This commit is contained in:
@@ -1,49 +0,0 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Text.Json.Serialization;
|
||||
using DysonNetwork.Shared.Data;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace DysonNetwork.Sphere.Sticker;
|
||||
|
||||
[Index(nameof(Slug))] // The slug index shouldn't be unique, the sticker slug can be repeated across packs.
|
||||
public class Sticker : ModelBase, IIdentifiedResource
|
||||
{
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
[MaxLength(128)] public string Slug { get; set; } = null!;
|
||||
|
||||
// Outdated fields, for backward compability
|
||||
[MaxLength(32)] public string? ImageId { get; set; }
|
||||
|
||||
[Column(TypeName = "jsonb")] public CloudFileReferenceObject? Image { get; set; } = null!;
|
||||
|
||||
public Guid PackId { get; set; }
|
||||
[JsonIgnore] public StickerPack Pack { get; set; } = null!;
|
||||
|
||||
public string ResourceIdentifier => $"sticker:{Id}";
|
||||
}
|
||||
|
||||
[Index(nameof(Prefix), IsUnique = true)]
|
||||
public class StickerPack : ModelBase
|
||||
{
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
[MaxLength(1024)] public string Name { get; set; } = null!;
|
||||
[MaxLength(4096)] public string Description { get; set; } = string.Empty;
|
||||
[MaxLength(128)] public string Prefix { get; set; } = null!;
|
||||
|
||||
public List<Sticker> Stickers { get; set; } = [];
|
||||
[JsonIgnore] public List<StickerPackOwnership> Ownerships { get; set; } = [];
|
||||
|
||||
public Guid PublisherId { get; set; }
|
||||
public Publisher.Publisher Publisher { get; set; } = null!;
|
||||
}
|
||||
|
||||
public class StickerPackOwnership : ModelBase
|
||||
{
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
|
||||
public Guid PackId { get; set; }
|
||||
public StickerPack Pack { get; set; } = null!;
|
||||
public Guid AccountId { get; set; }
|
||||
[NotMapped] public AccountReference Account { get; set; } = null!;
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using DysonNetwork.Shared.Auth;
|
||||
using DysonNetwork.Shared.Data;
|
||||
using DysonNetwork.Shared.Models;
|
||||
using DysonNetwork.Shared.Proto;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
@@ -20,7 +20,7 @@ public class StickerController(
|
||||
private async Task<IActionResult> _CheckStickerPackPermissions(
|
||||
Guid packId,
|
||||
Account currentUser,
|
||||
Publisher.PublisherMemberRole requiredRole
|
||||
Shared.Models.PublisherMemberRole requiredRole
|
||||
)
|
||||
{
|
||||
var pack = await db.StickerPacks
|
||||
@@ -46,7 +46,7 @@ public class StickerController(
|
||||
[FromQuery(Name = "query")] string? query = null
|
||||
)
|
||||
{
|
||||
Publisher.Publisher? publisher = null;
|
||||
Shared.Models.SnPublisher? publisher = null;
|
||||
if (pubName is not null)
|
||||
publisher = await db.Publishers.FirstOrDefaultAsync(p => p.Name == pubName);
|
||||
|
||||
@@ -168,7 +168,7 @@ public class StickerController(
|
||||
.FirstOrDefaultAsync(m => m.AccountId == accountId && m.PublisherId == pack.PublisherId);
|
||||
if (member is null)
|
||||
return StatusCode(403, "You are not a member of this publisher");
|
||||
if (member.Role < Publisher.PublisherMemberRole.Editor)
|
||||
if (member.Role < Shared.Models.PublisherMemberRole.Editor)
|
||||
return StatusCode(403, "You need to be at least an editor to update sticker packs");
|
||||
|
||||
if (request.Name is not null)
|
||||
@@ -200,7 +200,7 @@ public class StickerController(
|
||||
.FirstOrDefaultAsync(m => m.AccountId == accountId && m.PublisherId == pack.PublisherId);
|
||||
if (member is null)
|
||||
return StatusCode(403, "You are not a member of this publisher");
|
||||
if (member.Role < Publisher.PublisherMemberRole.Editor)
|
||||
if (member.Role < Shared.Models.PublisherMemberRole.Editor)
|
||||
return StatusCode(403, "You need to be an editor to delete sticker packs");
|
||||
|
||||
await st.DeleteStickerPackAsync(pack);
|
||||
@@ -262,7 +262,7 @@ public class StickerController(
|
||||
return Unauthorized();
|
||||
|
||||
var permissionCheck =
|
||||
await _CheckStickerPackPermissions(packId, currentUser, Publisher.PublisherMemberRole.Editor);
|
||||
await _CheckStickerPackPermissions(packId, currentUser, Shared.Models.PublisherMemberRole.Editor);
|
||||
if (permissionCheck is not OkResult)
|
||||
return permissionCheck;
|
||||
|
||||
@@ -277,14 +277,14 @@ public class StickerController(
|
||||
if (request.Slug is not null)
|
||||
sticker.Slug = request.Slug;
|
||||
|
||||
CloudFileReferenceObject? image = null;
|
||||
SnCloudFileReferenceObject? image = null;
|
||||
if (request.ImageId is not null)
|
||||
{
|
||||
var file = await files.GetFileAsync(new GetFileRequest { Id = request.ImageId });
|
||||
if (file is null)
|
||||
return BadRequest("Image not found");
|
||||
sticker.ImageId = request.ImageId;
|
||||
sticker.Image = CloudFileReferenceObject.FromProtoValue(file);
|
||||
sticker.Image = SnCloudFileReferenceObject.FromProtoValue(file);
|
||||
}
|
||||
|
||||
sticker = await st.UpdateStickerAsync(sticker, image);
|
||||
@@ -298,7 +298,7 @@ public class StickerController(
|
||||
return Unauthorized();
|
||||
|
||||
var permissionCheck =
|
||||
await _CheckStickerPackPermissions(packId, currentUser, Publisher.PublisherMemberRole.Editor);
|
||||
await _CheckStickerPackPermissions(packId, currentUser, Shared.Models.PublisherMemberRole.Editor);
|
||||
if (permissionCheck is not OkResult)
|
||||
return permissionCheck;
|
||||
|
||||
@@ -329,7 +329,7 @@ public class StickerController(
|
||||
return BadRequest("Image is required.");
|
||||
|
||||
var permissionCheck =
|
||||
await _CheckStickerPackPermissions(packId, currentUser, Publisher.PublisherMemberRole.Editor);
|
||||
await _CheckStickerPackPermissions(packId, currentUser, Shared.Models.PublisherMemberRole.Editor);
|
||||
if (permissionCheck is not OkResult)
|
||||
return permissionCheck;
|
||||
|
||||
@@ -351,7 +351,7 @@ public class StickerController(
|
||||
{
|
||||
Slug = request.Slug,
|
||||
ImageId = file.Id,
|
||||
Image = CloudFileReferenceObject.FromProtoValue(file),
|
||||
Image = SnCloudFileReferenceObject.FromProtoValue(file),
|
||||
Pack = pack
|
||||
};
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
using DysonNetwork.Shared.Cache;
|
||||
using DysonNetwork.Shared.Data;
|
||||
using DysonNetwork.Shared.Models;
|
||||
using DysonNetwork.Shared.Proto;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
@@ -33,7 +33,7 @@ public class StickerService(
|
||||
return sticker;
|
||||
}
|
||||
|
||||
public async Task<Sticker> UpdateStickerAsync(Sticker sticker, CloudFileReferenceObject? newImage)
|
||||
public async Task<Sticker> UpdateStickerAsync(Sticker sticker, SnCloudFileReferenceObject? newImage)
|
||||
{
|
||||
if (newImage is not null)
|
||||
{
|
||||
|
Reference in New Issue
Block a user