feat(storage): implement storage management API and enhance storage mode handling

This commit is contained in:
shiyu
2025-06-09 12:12:15 +08:00
parent 4ef4b2056b
commit 0a6fe70537
43 changed files with 2449 additions and 907 deletions

View File

@@ -35,7 +35,9 @@ public class Picture : BaseModel
set => ExifInfoJson = value != null ? JsonSerializer.Serialize(value) : null;
}
public StorageType StorageType { get; set; } = StorageType.Local;
public int StorageModeId { get; set; }
[ForeignKey("StorageModeId")]
public StorageMode? StorageMode { get; set; } = null!;
public ICollection<Tag>? Tags { get; set; }
public int? UserId { get; set; }

View File

@@ -0,0 +1,16 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Foxel.Services.Attributes;
namespace Foxel.Models.DataBase;
public class StorageMode : BaseModel
{
[Required]
[StringLength(100)]
public string Name { get; set; } = string.Empty;
public bool IsEnabled { get; set; } = true;
public StorageType StorageType { get; set; } = StorageType.Local;
[Column(TypeName = "jsonb")] public string? ConfigurationJson { get; set; }
}

View File

@@ -1,7 +1,5 @@
using System.ComponentModel.DataAnnotations;
using Foxel.Models.DataBase;
using Foxel.Models.Enums;
using Foxel.Services.Attributes;
namespace Foxel.Models.Request.Picture;
@@ -15,5 +13,5 @@ public record UploadPictureRequest
public int? AlbumId { get; set; }
public StorageType? StorageType { get; set; }
public int? StorageModeId { get; set; }
}

View File

@@ -0,0 +1,18 @@
using System.ComponentModel.DataAnnotations;
using Foxel.Services.Attributes; // For StorageType enum
namespace Foxel.Models.Request.Storage;
public class CreateStorageModeRequest
{
[Required]
[StringLength(100)]
public string Name { get; set; } = string.Empty;
[Required]
public StorageType StorageType { get; set; }
public string? ConfigurationJson { get; set; }
public bool IsEnabled { get; set; } = true;
}

View File

@@ -0,0 +1,21 @@
using System.ComponentModel.DataAnnotations;
using Foxel.Services.Attributes; // For StorageType enum
namespace Foxel.Models.Request.Storage;
public class UpdateStorageModeRequest
{
[Required]
public int Id { get; set; }
[Required]
[StringLength(100)]
public string Name { get; set; } = string.Empty;
[Required]
public StorageType StorageType { get; set; }
public string? ConfigurationJson { get; set; }
public bool IsEnabled { get; set; }
}

View File

@@ -21,4 +21,6 @@ public record PictureResponse
public int? AlbumId { get; set; }
public string? AlbumName { get; set; }
public PermissionType Permission { get; set; } = PermissionType.Public;
public string? StorageModeName { get; set; }
}

View File

@@ -0,0 +1,15 @@
using Foxel.Services.Attributes; // For StorageType enum
namespace Foxel.Models.Response.Storage;
public class StorageModeResponse
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public StorageType StorageType { get; set; }
public string StorageTypeName => StorageType.ToString();
public string? ConfigurationJson { get; set; } // Consider if this should be exposed or masked/summarized
public bool IsEnabled { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
}

View File

@@ -0,0 +1,7 @@
namespace Foxel.Models.Response.Storage;
public class StorageTypeResponse
{
public int Value { get; set; }
public string Name { get; set; } = string.Empty;
}