diff --git a/Atomx.Admin/Atomx.Admin.Client/Models/SiteAppModel.cs b/Atomx.Admin/Atomx.Admin.Client/Models/SiteAppModel.cs index ac11c6a..5293e58 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Models/SiteAppModel.cs +++ b/Atomx.Admin/Atomx.Admin.Client/Models/SiteAppModel.cs @@ -18,6 +18,11 @@ /// public string Name { get; set; } = string.Empty; + /// + /// 介绍 + /// + public string Description { get; set; } = string.Empty; + /// /// 是否可用 /// diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Home.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Home.razor index 14bb3c0..ec85dd7 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Home.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Home.razor @@ -19,7 +19,7 @@ 多语言设置
  • - 多语言资源设置 + 网站应用
  • 角色管理 diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/SiteAppList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/SiteAppList.razor index 3997660..b7e1d68 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/SiteAppList.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/SiteApps/SiteAppList.razor @@ -3,20 +3,243 @@ @inject ILogger Logger @attribute [Authorize] - + 管理后台 系统功能 - 系统工具 + 网站应用 -

    Tools

    + + + + + 网站应用 +
    + +
    +
    +
    + + + + + + @if (context.Enabled) + { + + + } + else + { + + } + + + + + + + + + + + + 编辑 + + + + + 删除 + + + + + + + + + + + + + + +
    +
    + + @if (PagingList.Count > 0) + { + + } + +
    + + +
    + + + + + + + + + + + + + + +
    @code { [Parameter] public string Locale { get; set; } = string.Empty; + + [SupplyParameterFromQuery] + int? Page { get; set; } + + [SupplyParameterFromQuery(Name = "size")] + int? PageSize { get; set; } + + [SupplyParameterFromForm] + SiteAppSearch search { get; set; } = default!; + + [SupplyParameterFromForm] + SiteAppModel model { get; set; } = default!; + Form editform = null!; + + PagingList PagingList = new(); + bool loading { get; set; } = true; + + bool drawerVisible; + bool isSave = false; + + protected override void OnInitialized() + { + search ??= new SiteAppSearch(); + model ??= new SiteAppModel(); + base.OnInitialized(); + } + + protected override async Task OnParametersSetAsync() + { + await LoadList(); + } + + + private async Task LoadList() + { + + loading = true; + var url = "/api/siteapp/search"; + var apiResult = await HttpService.GetPagingList(url, search ?? new SiteAppSearch(), Page.GetValueOrDefault(1), PageSize.GetValueOrDefault(20)); + if (apiResult.Success) + { + if (apiResult.Data != null) + { + PagingList = apiResult.Data; + } + } + loading = false; + StateHasChanged(); + } + + private void OnSearch(int page) + { + var queryString = search.BuildQueryString(); + if (string.IsNullOrEmpty(queryString)) + { + if (page > 1) + { + Navigation.NavigateTo($"/system/app/list?page={page}"); + } + else + { + Navigation.NavigateTo($"/system/app/list"); + } + } + else + { + if (page > 1) + { + Navigation.NavigateTo($"/system/app/list?page={page}&{queryString}"); + } + else + { + Navigation.NavigateTo($"/system/app/list?{queryString}"); + } + } + } + + void OnCreateClick() + { + model = new(); + drawerVisible = true; + } + + void OnEditClick(SiteApp role) + { + model = role.Adapt(); + drawerVisible = true; + } + + async Task HandleDeleteConfirmAsync(MouseEventArgs e, long id) + { + var url = $"/api/siteapp/delete/{id}"; + var apiResult = await HttpService.Post>(url, new()); + if (apiResult.Success) + { + await LoadList(); + await ModalService.InfoAsync(new ConfirmOptions() { Title = "操作提示", Content = "删除数据成功" }); + } + else + { + await ModalService.ErrorAsync(new ConfirmOptions() { Title = "操作提示", Content = $"数据删除失败.{apiResult.Message}" }); + } + } + + async Task OnFormFinish() + { + if (editform.Validate()) + { + var apiResult = new ApiResult(); + if (model != null) + { + var url = $"api/siteapp/save"; + apiResult = await HttpService.Post>(url, model); + + if (apiResult.Success) + { + ModalService.Success(new ConfirmOptions() { Title = "提示", Content = "数据提交成功!" }); + CloseDrawer(); + await LoadList(); + } + else + { + await ModalService.ErrorAsync(new ConfirmOptions() { Title = "服务异常", Content = apiResult.Message }); + } + } + } + StateHasChanged(); + } + + private void OnPageChanged(PaginationEventArgs args) + { + OnSearch(args.Page); + } + + void CloseDrawer() + { + drawerVisible = false; + editform.Reset(); + } } diff --git a/Atomx.Admin/Atomx.Admin/Controllers/SiteAppController.cs b/Atomx.Admin/Atomx.Admin/Controllers/SiteAppController.cs index 990f21a..e2d0a6d 100644 --- a/Atomx.Admin/Atomx.Admin/Controllers/SiteAppController.cs +++ b/Atomx.Admin/Atomx.Admin/Controllers/SiteAppController.cs @@ -3,6 +3,7 @@ using Atomx.Admin.Client.Validators; using Atomx.Admin.Services; using Atomx.Common.Entities; using Atomx.Common.Models; +using Atomx.Core.Jos; using Atomx.Data; using Atomx.Data.CacheServices; using Atomx.Data.Services; @@ -24,8 +25,9 @@ namespace Atomx.Admin.Controllers readonly IMapper _mapper; readonly DataContext _dbContext; readonly ICacheService _cacheService; - private readonly IValidator _validator; - private readonly IStringLocalizer _localizer; + readonly IBackgroundJobService _backgroundService; + readonly IValidator _validator; + readonly IStringLocalizer _localizer; /// /// /// @@ -35,7 +37,7 @@ namespace Atomx.Admin.Controllers /// /// public SiteAppController(ILogger logger, IIdentityService identityService, IIdCreatorService idCreator, IMapper mapper, DataContext dataContext, ICacheService cacheService, - IValidator validator, IStringLocalizer localizer) + IBackgroundJobService backgroundJobService, IValidator validator, IStringLocalizer localizer) { _logger = logger; _identityService = identityService; @@ -43,6 +45,7 @@ namespace Atomx.Admin.Controllers _mapper = mapper; _dbContext = dataContext; _cacheService = cacheService; + _backgroundService = backgroundJobService; _validator = validator; _localizer = localizer; @@ -117,7 +120,7 @@ namespace Atomx.Admin.Controllers /// /// /// - [HttpPost("add")] + [HttpPost("save")] public IActionResult Add(SiteAppModel model) { var result = new ApiResult(); @@ -130,14 +133,31 @@ namespace Atomx.Admin.Controllers } try { - model.Id = _idCreator.CreateId(); - var message = _mapper.Map(model); - message.CreateTime = DateTime.UtcNow; + if (model.Id > 0) + { + var data = _dbContext.SiteApps.SingleOrDefault(p => p.Id == model.Id); + if (data == null) + { + result = result.IsFail("数据不存在"); + return new JsonResult(result); + } - _dbContext.SiteApps.Add(message); - var count = _dbContext.SaveChanges(); + data.UpdateTime = DateTime.UtcNow; - result = result.IsSuccess(count.ToString()); + int count = _dbContext.SaveChanges(); + result = result.IsSuccess(count.ToString()); + } + else + { + model.Id = _idCreator.CreateId(); + var message = _mapper.Map(model); + message.CreateTime = DateTime.UtcNow; + + _dbContext.SiteApps.Add(message); + + var count = _dbContext.SaveChanges(); + result = result.IsSuccess(count.ToString()); + } } catch (Exception ex) { @@ -146,46 +166,7 @@ namespace Atomx.Admin.Controllers } return new JsonResult(result); } - - /// - /// 编辑 - /// - /// - /// - [HttpPost("edit")] - public IActionResult Edit(SiteAppModel model) - { - var result = new ApiResult(); - var validation = _validator.Validate(model); - if (!validation.IsValid) - { - var message = validation.Errors.FirstOrDefault()?.ErrorMessage; - result = result.IsFail(message ?? string.Empty, null); - return new JsonResult(result); - } - - var data = _dbContext.SiteApps.SingleOrDefault(p => p.Id == model.Id); - if (data == null) - { - result = result.IsFail("数据不存在"); - return new JsonResult(result); - } - - data.UpdateTime = DateTime.UtcNow; - - try - { - int count = _dbContext.SaveChanges(); - result = result.IsSuccess(count.ToString()); - } - catch (Exception ex) - { - result = result.IsFail(ex.Message); - _logger.LogError(ex.Message); - Console.WriteLine(ex.Message); - } - return new JsonResult(result); - } + /// /// 根据ID删除 diff --git a/Atomx.Common/Entities/SiteApp.cs b/Atomx.Common/Entities/SiteApp.cs index 4b1082a..fecc98a 100644 --- a/Atomx.Common/Entities/SiteApp.cs +++ b/Atomx.Common/Entities/SiteApp.cs @@ -17,17 +17,22 @@ namespace Atomx.Common.Entities public int Id { get; set; } /// - /// 网站应用类型 + /// 网站应用类型, /// public int Type { get; set; } - /// /// 网站应用名称 /// [Column(TypeName = "varchar(64)")] public string Name { get; set; } = string.Empty; + /// + /// 介绍 + /// + [Column(TypeName = "varchar(512)")] + public string Description { get; set; } = string.Empty; + /// /// 是否可用 /// diff --git a/Atomx.Data/Migrations/20260106161128_0.3.Designer.cs b/Atomx.Data/Migrations/20260106161128_0.3.Designer.cs new file mode 100644 index 0000000..f280ead --- /dev/null +++ b/Atomx.Data/Migrations/20260106161128_0.3.Designer.cs @@ -0,0 +1,1532 @@ +// +using System; +using Atomx.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Atomx.Data.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20260106161128_0.3")] + partial class _03 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Atomx.Common.Entities.Address", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("AddressDetails") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("City") + .IsRequired() + .HasColumnType("varchar(100)"); + + b.Property("CityId") + .HasColumnType("bigint"); + + b.Property("Company") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("Country") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("CountryId") + .HasColumnType("bigint"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Email") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("FullAddress") + .IsRequired() + .HasColumnType("varchar(1024)"); + + b.Property("IsDelete") + .HasColumnType("boolean"); + + b.Property("IsVirtual") + .HasColumnType("boolean"); + + b.Property("Latitude") + .HasColumnType("decimal(10,6)"); + + b.Property("Longitude") + .HasColumnType("decimal(10,6)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(128)"); + + b.Property("Phone") + .IsRequired() + .HasColumnType("varchar(20)"); + + b.Property("PostalCode") + .IsRequired() + .HasColumnType("varchar(15)"); + + b.Property("Province") + .IsRequired() + .HasColumnType("varchar(100)"); + + b.Property("ProvinceId") + .HasColumnType("bigint"); + + b.Property("Region") + .IsRequired() + .HasColumnType("varchar(100)"); + + b.Property("RegionId") + .HasColumnType("bigint"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("UserId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.ToTable("Addresses"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Admin", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Avatar") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Email") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("LastIp") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("LastLogin") + .HasColumnType("timestamptz"); + + b.Property("LockoutEndTime") + .HasColumnType("timestamptz"); + + b.Property("LoginCount") + .HasColumnType("integer"); + + b.Property("Mobile") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("RoleId") + .HasColumnType("integer"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TimeOffset") + .IsRequired() + .HasColumnType("varchar(4)"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("Username") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.HasKey("Id"); + + b.ToTable("Admins"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.AppVersion", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("AppName") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("Content") + .IsRequired() + .HasColumnType("text"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Platform") + .HasColumnType("integer"); + + b.Property("SiteId") + .HasColumnType("integer"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("Title") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("Version") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("VersionDate") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("VersionState") + .HasColumnType("integer"); + + b.Property("VersionX") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("VersionY") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("VersionZ") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.HasKey("Id"); + + b.ToTable("AppVersions"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Area", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Abbreviation") + .IsRequired() + .HasColumnType("varchar(32)"); + + b.Property("AllowShipping") + .HasColumnType("boolean"); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("CountryId") + .HasColumnType("bigint"); + + b.Property("Depth") + .HasColumnType("integer"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("Initial") + .IsRequired() + .HasColumnType("varchar(1)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Path") + .IsRequired() + .HasColumnType("varchar(100)"); + + b.Property("StateProvinceId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.ToTable("Areas"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Category", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Banner") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Depth") + .HasColumnType("integer"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("FilterAttributes") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Image") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("IsNode") + .HasColumnType("boolean"); + + b.Property("MetaDescription") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("MetaKeywords") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(25)"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Path") + .IsRequired() + .HasColumnType("varchar(100)"); + + b.Property("SiteId") + .HasColumnType("integer"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Channel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Config") + .IsRequired() + .HasColumnType("text"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Description") + .IsRequired() + .HasColumnType("varchar(512)"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(20)"); + + b.Property("Network") + .HasColumnType("integer"); + + b.Property("SiteId") + .HasColumnType("integer"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("Title") + .IsRequired() + .HasColumnType("varchar(20)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("Channels"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Country", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("AllowShipping") + .HasColumnType("boolean"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("Initial") + .IsRequired() + .HasColumnType("varchar(1)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("NumericISOCode") + .HasColumnType("integer"); + + b.Property("ThreeLetterISOCode") + .IsRequired() + .HasColumnType("varchar(3)"); + + b.Property("TwoLetterISOCode") + .IsRequired() + .HasColumnType("varchar(2)"); + + b.HasKey("Id"); + + b.ToTable("Countries"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Currency", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("CurrencyCode") + .IsRequired() + .HasColumnType("varchar(10)"); + + b.Property("CustomFormatting") + .IsRequired() + .HasColumnType("varchar(20)"); + + b.Property("DisplayLocale") + .IsRequired() + .HasColumnType("varchar(15)"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("EnableDisplay") + .HasColumnType("boolean"); + + b.Property("EnablePay") + .HasColumnType("boolean"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("Rate") + .HasColumnType("decimal(16, 4)"); + + b.Property("SiteId") + .HasColumnType("integer"); + + b.Property("Symbolic") + .IsRequired() + .HasColumnType("varchar(8)"); + + b.Property("Title") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("Currencies"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.CurrencyChannelRelation", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("ChannelId") + .HasColumnType("integer"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("CurrencyId") + .HasColumnType("integer"); + + b.Property("EndTime") + .HasColumnType("integer"); + + b.Property("Extended") + .IsRequired() + .HasColumnType("text"); + + b.Property("Rate") + .HasColumnType("numeric"); + + b.Property("StartTime") + .HasColumnType("integer"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TimeZone") + .HasColumnType("integer"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("CurrencyChannelRelations"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Language", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Culture") + .IsRequired() + .HasColumnType("varchar(25)"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("FlagImage") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("ResourceVersion") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Title") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("Languages"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.LocaleResource", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("LanguageId") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("Value") + .IsRequired() + .HasColumnType("varchar(1000)"); + + b.HasKey("Id"); + + b.ToTable("LocaleResources"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.LocalizedProperty", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("EntityId") + .HasColumnType("bigint"); + + b.Property("Key") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("LanguageId") + .HasColumnType("integer"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("Value") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("LocalizedProperties"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Menu", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Code") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Depth") + .HasColumnType("integer"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("IsLink") + .HasColumnType("boolean"); + + b.Property("Key") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Path") + .IsRequired() + .HasColumnType("varchar(100)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("Url") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.ToTable("Menus"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.MessageTemplate", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Attachments") + .IsRequired() + .HasColumnType("varchar(1024)"); + + b.Property("Body") + .IsRequired() + .HasColumnType("text"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("Key") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("LanguageId") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("SiteId") + .HasColumnType("integer"); + + b.Property("Title") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("MessageTemplates"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Permission", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Category") + .IsRequired() + .HasColumnType("varchar(128)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.ToTable("Permissions"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Product", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("CategoryId") + .HasColumnType("bigint"); + + b.Property("CategoryPath") + .HasColumnType("varchar(200)"); + + b.Property("CorporationId") + .HasColumnType("bigint"); + + b.Property("CorporationStaffId") + .HasColumnType("bigint"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Deleted") + .HasColumnType("boolean"); + + b.Property("DeletedTime") + .HasColumnType("timestamptz"); + + b.Property("Description") + .HasColumnType("varchar(256)"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Extended") + .IsRequired() + .HasColumnType("text"); + + b.Property("Feature") + .HasColumnType("varchar(256)"); + + b.Property("Image") + .HasColumnType("varchar(256)"); + + b.Property("InventoryMethod") + .HasColumnType("integer"); + + b.Property("ManufacturerId") + .HasColumnType("bigint"); + + b.Property("MarketPrice") + .HasColumnType("decimal(18,4)"); + + b.Property("MaxWeight") + .HasColumnType("decimal(6,2)"); + + b.Property("MinWeight") + .HasColumnType("decimal(6,2)"); + + b.Property("Photos") + .HasColumnType("text"); + + b.Property("PictureCount") + .HasColumnType("integer"); + + b.Property("Price") + .HasColumnType("decimal(18,4)"); + + b.Property("ProductTypeId") + .HasColumnType("bigint"); + + b.Property("ReviewStatus") + .HasColumnType("integer"); + + b.Property("SIN") + .HasColumnType("varchar(20)"); + + b.Property("SalesQuantity") + .HasColumnType("integer"); + + b.Property("SkuPrices") + .HasColumnType("text"); + + b.Property("SpecificationJson") + .HasColumnType("text"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("StockQuantity") + .HasColumnType("integer"); + + b.Property("StoreId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("Weight") + .HasColumnType("decimal(6,2)"); + + b.HasKey("Id"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.ProductAttribute", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("CategoryId") + .HasColumnType("bigint"); + + b.Property("ControlType") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("IsRequired") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("WeightIsRequired") + .HasColumnType("boolean"); + + b.Property("WeightUnit") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("ProductAttributes"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.ProductAttributeCombination", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("AttributesJson") + .IsRequired() + .HasColumnType("text"); + + b.Property("CorporationId") + .HasColumnType("bigint"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("ManufacturerId") + .HasColumnType("bigint"); + + b.Property("Mark") + .HasColumnType("integer"); + + b.Property("MarketPrice") + .HasColumnType("decimal(18,4)"); + + b.Property("Note") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Price") + .HasColumnType("decimal(18,4)"); + + b.Property("ProcessCharge") + .HasColumnType("decimal(18,4)"); + + b.Property("ProcessCost") + .HasColumnType("decimal(18,4)"); + + b.Property("ProductId") + .HasColumnType("bigint"); + + b.Property("SalesQuantity") + .HasColumnType("integer"); + + b.Property("SkuNumber") + .IsRequired() + .HasColumnType("varchar(20)"); + + b.Property("StockQuantity") + .HasColumnType("integer"); + + b.Property("Surcharge") + .HasColumnType("decimal(18,4)"); + + b.Property("SurchargeCost") + .HasColumnType("decimal(18,4)"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("Weight") + .HasColumnType("decimal(18,4)"); + + b.Property("WeightUnit") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("ProductAttributeCombinations"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.ProductAttributeOption", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("AttributeId") + .HasColumnType("bigint"); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Standard") + .HasColumnType("boolean"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("Value") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.HasKey("Id"); + + b.ToTable("ProductAttributeOptions"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.ProductAttributeRelation", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("AttributeId") + .HasColumnType("bigint"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Image") + .HasColumnType("boolean"); + + b.Property("ProductId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.ToTable("ProductAttributeRelations"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.ProductAttributeValue", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Image") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("IsAddWeight") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("OptionId") + .HasColumnType("bigint"); + + b.Property("ProductAttributeRelationId") + .HasColumnType("bigint"); + + b.Property("ProductId") + .HasColumnType("bigint"); + + b.Property("Weight") + .HasColumnType("decimal(18,4)"); + + b.Property("WeightUnit") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("ProductAttributeValues"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.ProductInventory", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("CorporationId") + .HasColumnType("bigint"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("ProductAttributeCombinationId") + .HasColumnType("bigint"); + + b.Property("ProductId") + .HasColumnType("bigint"); + + b.Property("StockQuantity") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("WarehouseId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.ToTable("ProductInventories"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.ProductInventoryLog", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("AfterStock") + .HasColumnType("integer"); + + b.Property("BeforeStock") + .HasColumnType("integer"); + + b.Property("ChangeAmount") + .HasColumnType("integer"); + + b.Property("CorporationId") + .HasColumnType("bigint"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("ManufacturerId") + .HasColumnType("bigint"); + + b.Property("Note") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Operator") + .HasColumnType("bigint"); + + b.Property("OrderId") + .HasColumnType("bigint"); + + b.Property("ProductAttributeCombinationId") + .HasColumnType("bigint"); + + b.Property("ProductId") + .HasColumnType("bigint"); + + b.Property("StoreId") + .HasColumnType("bigint"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("WarehouseId") + .HasColumnType("bigint"); + + b.Property("Weight") + .HasColumnType("decimal(18,4)"); + + b.HasKey("Id"); + + b.ToTable("ProductInventoryLogs"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.RefreshToken", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ExpiresTime") + .HasColumnType("timestamp with time zone"); + + b.Property("Ip") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("IsRevoked") + .HasColumnType("boolean"); + + b.Property("IssuedTime") + .HasColumnType("timestamp with time zone"); + + b.Property("RevokedTime") + .HasColumnType("timestamptz"); + + b.Property("Token") + .IsRequired() + .HasColumnType("varchar(500)"); + + b.Property("UserAgent") + .IsRequired() + .HasColumnType("varchar(500)"); + + b.Property("UserId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.ToTable("RefreshTokens"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Description") + .IsRequired() + .HasColumnType("varchar(256)"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("IsSystemRole") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Permission") + .IsRequired() + .HasColumnType("text"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("Roles"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Setting", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Content") + .IsRequired() + .HasColumnType("text"); + + b.Property("Key") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("SiteId") + .HasColumnType("integer"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("Settings"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.SiteApp", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Description") + .IsRequired() + .HasColumnType("varchar(512)"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("SiteApps"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.SpecificationAttribute", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("CategoryId") + .HasColumnType("bigint"); + + b.Property("ControlType") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("SpecificationAttributes"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.SpecificationAttributeOption", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("DisplayOrder") + .HasColumnType("integer"); + + b.Property("SpecificationId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.Property("Value") + .IsRequired() + .HasColumnType("varchar(50)"); + + b.HasKey("Id"); + + b.ToTable("SpecificationAttributeOptions"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.Tag", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Color") + .IsRequired() + .HasColumnType("varchar(12)"); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Enabled") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("varchar(128)"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("Tags"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.UploadFile", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("ContentType") + .IsRequired() + .HasColumnType("varchar(32)"); + + b.Property("CreateBy") + .IsRequired() + .HasColumnType("varchar(32)"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("CreateUid") + .HasColumnType("bigint"); + + b.Property("Extension") + .IsRequired() + .HasColumnType("varchar(12)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("Path") + .IsRequired() + .HasColumnType("varchar(128)"); + + b.Property("SHA256Hash") + .IsRequired() + .HasColumnType("varchar(128)"); + + b.Property("SiteId") + .HasColumnType("integer"); + + b.Property("Size") + .HasColumnType("integer"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("UploadFiles"); + }); + + modelBuilder.Entity("Atomx.Common.Entities.User", b => + { + b.Property("Id") + .HasColumnType("bigint"); + + b.Property("Avatar") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("CreateTime") + .HasColumnType("timestamptz"); + + b.Property("Email") + .IsRequired() + .HasColumnType("varchar(128)"); + + b.Property("EmailConfirmed") + .HasColumnType("boolean"); + + b.Property("FailedLoginAttempts") + .HasColumnType("integer"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("LockoutEndTime") + .HasColumnType("timestamptz"); + + b.Property("Mobile") + .IsRequired() + .HasColumnType("varchar(32)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(64)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("varchar(32)"); + + b.Property("UpdateTime") + .HasColumnType("timestamptz"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Atomx.Data/Migrations/20260106161128_0.3.cs b/Atomx.Data/Migrations/20260106161128_0.3.cs new file mode 100644 index 0000000..8c2c23a --- /dev/null +++ b/Atomx.Data/Migrations/20260106161128_0.3.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Atomx.Data.Migrations +{ + /// + public partial class _03 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Description", + table: "SiteApps", + type: "varchar(512)", + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Description", + table: "SiteApps"); + } + } +} diff --git a/Atomx.Data/Migrations/DataContextModelSnapshot.cs b/Atomx.Data/Migrations/DataContextModelSnapshot.cs index 86818b9..400992e 100644 --- a/Atomx.Data/Migrations/DataContextModelSnapshot.cs +++ b/Atomx.Data/Migrations/DataContextModelSnapshot.cs @@ -1298,6 +1298,10 @@ namespace Atomx.Data.Migrations b.Property("CreateTime") .HasColumnType("timestamptz"); + b.Property("Description") + .IsRequired() + .HasColumnType("varchar(512)"); + b.Property("Enabled") .HasColumnType("boolean");