using Asp.Versioning; using MAX.Framework.Dtos; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using MySqlX.XDevAPI.Common; using Store.Framework.Base; using Store.Framework.Models; using Store.ImageCache.Dtos; using Store.ImageCache.Services; using System; using System.Collections.Generic; namespace KJD_Web.Controllers { [Route("[controller]/[action]")] public class ImageCacheController : AppControllerBase { private readonly ImageCacheService _imageCacheService; private readonly ILogger _logger; public ImageCacheController(ImageCacheService imageCacheService, ILogger logger) { if (imageCacheService == null) { throw new ArgumentNullException("imageCacheService"); } _imageCacheService = imageCacheService; _logger = logger; } /// /// 批量按 MD5 查询图片缓存。 /// [HttpPost] public List GetImageCache(ImageCacheBatchQueryRequest request) { List data = new List(); if (request != null && request.Md5s != null) { data = _imageCacheService.GetByMd5s(request.Md5s, request.Platform); } return data; } /// /// 按 MD5 和平台更新平台图片 URL。 /// [HttpPost] public ApiResult> AddOrUpdate(ImageCacheUpdateUrlRequest[] requests) { if (requests == null || requests.Length == 0) { throw new ArgumentException("参数不能为空"); } var failedItems = new List(); foreach (var item in requests) { if (item == null) { throw new ArgumentException("图片参数不能包含空项"); } try { if (!_imageCacheService.AddOrUpdate(item.Md5, item.Platform, item.PlatformUrl)) { failedItems.Add(item.Md5); } } catch (Exception ex) { _logger.LogError(ex, "AddOrUpdate 失败, Md5={Md5}", item.Md5); failedItems.Add(item.Md5); } } return failedItems.Count == 0 ? ApiResult.Ok() : throw new ArgumentException("部分图片失败"); } public class ImageCacheBatchQueryRequest { public List Md5s { get; set; } public byte? Platform { get; set; } } public class ImageCacheUpdateUrlRequest { public string Md5 { get; set; } public byte Platform { get; set; } public string PlatformUrl { get; set; } } } }