mirror of https://github.com/abpframework/abp.git
65 changed files with 2165 additions and 756 deletions
@ -0,0 +1,625 @@ |
|||||
|
// <auto-generated />
|
||||
|
using System; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Microsoft.EntityFrameworkCore.Infrastructure; |
||||
|
using Microsoft.EntityFrameworkCore.Metadata; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion; |
||||
|
using Volo.BloggingTestApp.EntityFrameworkCore; |
||||
|
|
||||
|
namespace Volo.BloggingTestApp.EntityFrameworkCore.Migrations |
||||
|
{ |
||||
|
[DbContext(typeof(BloggingTestAppDbContext))] |
||||
|
[Migration("20180912113852_Added_BlogUsers")] |
||||
|
partial class Added_BlogUsers |
||||
|
{ |
||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder) |
||||
|
{ |
||||
|
#pragma warning disable 612, 618
|
||||
|
modelBuilder |
||||
|
.HasAnnotation("ProductVersion", "2.1.1-rtm-30846") |
||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128) |
||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<string>("NormalizedName") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("NormalizedName"); |
||||
|
|
||||
|
b.ToTable("AbpRoles"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<string>("ClaimType") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<string>("ClaimValue") |
||||
|
.HasMaxLength(1024); |
||||
|
|
||||
|
b.Property<Guid>("RoleId"); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("RoleId"); |
||||
|
|
||||
|
b.ToTable("AbpRoleClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<int>("AccessFailedCount") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("AccessFailedCount") |
||||
|
.HasDefaultValue(0); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<string>("Email") |
||||
|
.HasColumnName("Email") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<bool>("EmailConfirmed") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("EmailConfirmed") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties"); |
||||
|
|
||||
|
b.Property<bool>("LockoutEnabled") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("LockoutEnabled") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTimeOffset?>("LockoutEnd"); |
||||
|
|
||||
|
b.Property<string>("NormalizedEmail") |
||||
|
.HasColumnName("NormalizedEmail") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<string>("NormalizedUserName") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("NormalizedUserName") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<string>("PasswordHash") |
||||
|
.HasColumnName("PasswordHash") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<string>("PhoneNumber") |
||||
|
.HasColumnName("PhoneNumber") |
||||
|
.HasMaxLength(16); |
||||
|
|
||||
|
b.Property<bool>("PhoneNumberConfirmed") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("PhoneNumberConfirmed") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<string>("SecurityStamp") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("SecurityStamp") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId") |
||||
|
.HasColumnName("TenantId"); |
||||
|
|
||||
|
b.Property<bool>("TwoFactorEnabled") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("TwoFactorEnabled") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<string>("UserName") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("UserName") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("Email"); |
||||
|
|
||||
|
b.HasIndex("NormalizedEmail"); |
||||
|
|
||||
|
b.HasIndex("NormalizedUserName"); |
||||
|
|
||||
|
b.HasIndex("UserName"); |
||||
|
|
||||
|
b.ToTable("AbpUsers"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<string>("ClaimType") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<string>("ClaimValue") |
||||
|
.HasMaxLength(1024); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId"); |
||||
|
|
||||
|
b.Property<Guid>("UserId"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("UserId"); |
||||
|
|
||||
|
b.ToTable("AbpUserClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => |
||||
|
{ |
||||
|
b.Property<Guid>("UserId"); |
||||
|
|
||||
|
b.Property<string>("LoginProvider") |
||||
|
.HasMaxLength(64); |
||||
|
|
||||
|
b.Property<string>("ProviderDisplayName") |
||||
|
.HasMaxLength(128); |
||||
|
|
||||
|
b.Property<string>("ProviderKey") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(196); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId"); |
||||
|
|
||||
|
b.HasKey("UserId", "LoginProvider"); |
||||
|
|
||||
|
b.HasIndex("LoginProvider", "ProviderKey"); |
||||
|
|
||||
|
b.ToTable("AbpUserLogins"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => |
||||
|
{ |
||||
|
b.Property<Guid>("UserId"); |
||||
|
|
||||
|
b.Property<Guid>("RoleId"); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId"); |
||||
|
|
||||
|
b.HasKey("UserId", "RoleId"); |
||||
|
|
||||
|
b.HasIndex("RoleId", "UserId"); |
||||
|
|
||||
|
b.ToTable("AbpUserRoles"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => |
||||
|
{ |
||||
|
b.Property<Guid>("UserId"); |
||||
|
|
||||
|
b.Property<string>("LoginProvider") |
||||
|
.HasMaxLength(128); |
||||
|
|
||||
|
b.Property<string>("Name"); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId"); |
||||
|
|
||||
|
b.Property<string>("Value"); |
||||
|
|
||||
|
b.HasKey("UserId", "LoginProvider", "Name"); |
||||
|
|
||||
|
b.ToTable("AbpUserTokens"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(128); |
||||
|
|
||||
|
b.Property<string>("ProviderKey") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(64); |
||||
|
|
||||
|
b.Property<string>("ProviderName") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(64); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("Name", "ProviderName", "ProviderKey"); |
||||
|
|
||||
|
b.ToTable("AbpPermissionGrants"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(128); |
||||
|
|
||||
|
b.Property<string>("ProviderKey") |
||||
|
.HasMaxLength(64); |
||||
|
|
||||
|
b.Property<string>("ProviderName") |
||||
|
.HasMaxLength(64); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(2048); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("Name", "ProviderName", "ProviderKey"); |
||||
|
|
||||
|
b.ToTable("AbpSettings"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Blogging.Blogs.Blog", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnName("Description") |
||||
|
.HasMaxLength(1024); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("Name") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<string>("ShortName") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("ShortName") |
||||
|
.HasMaxLength(32); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.ToTable("BlgBlogs"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Blogging.Comments.Comment", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId"); |
||||
|
|
||||
|
b.Property<Guid>("PostId") |
||||
|
.HasColumnName("PostId"); |
||||
|
|
||||
|
b.Property<Guid?>("RepliedCommentId") |
||||
|
.HasColumnName("RepliedCommentId"); |
||||
|
|
||||
|
b.Property<string>("Text") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("Text") |
||||
|
.HasMaxLength(1024); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("PostId"); |
||||
|
|
||||
|
b.HasIndex("RepliedCommentId"); |
||||
|
|
||||
|
b.ToTable("BlgComments"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Blogging.Posts.Post", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<Guid>("BlogId") |
||||
|
.HasColumnName("BlogId"); |
||||
|
|
||||
|
b.Property<string>("Content") |
||||
|
.HasColumnName("Content") |
||||
|
.HasMaxLength(1048576); |
||||
|
|
||||
|
b.Property<string>("CoverImage") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("CoverImage"); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId"); |
||||
|
|
||||
|
b.Property<int>("ReadCount"); |
||||
|
|
||||
|
b.Property<string>("Title") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("Title") |
||||
|
.HasMaxLength(512); |
||||
|
|
||||
|
b.Property<string>("Url") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("Url") |
||||
|
.HasMaxLength(64); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("BlogId"); |
||||
|
|
||||
|
b.ToTable("BlgPosts"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Blogging.Posts.PostTag", b => |
||||
|
{ |
||||
|
b.Property<Guid>("PostId") |
||||
|
.HasColumnName("PostId"); |
||||
|
|
||||
|
b.Property<Guid>("TagId") |
||||
|
.HasColumnName("TagId"); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId"); |
||||
|
|
||||
|
b.HasKey("PostId", "TagId"); |
||||
|
|
||||
|
b.HasIndex("TagId"); |
||||
|
|
||||
|
b.ToTable("BlgPostTags"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Blogging.Tagging.Tag", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnName("Description") |
||||
|
.HasMaxLength(512); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("Name") |
||||
|
.HasMaxLength(64); |
||||
|
|
||||
|
b.Property<int>("UsageCount") |
||||
|
.HasColumnName("UsageCount"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.ToTable("BlgTags"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Blogging.Users.BlogUser", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd(); |
||||
|
|
||||
|
b.Property<string>("Email") |
||||
|
.HasColumnName("Email") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.Property<bool>("EmailConfirmed") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("EmailConfirmed") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties"); |
||||
|
|
||||
|
b.Property<string>("PhoneNumber") |
||||
|
.HasColumnName("PhoneNumber") |
||||
|
.HasMaxLength(16); |
||||
|
|
||||
|
b.Property<bool>("PhoneNumberConfirmed") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("PhoneNumberConfirmed") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId") |
||||
|
.HasColumnName("TenantId"); |
||||
|
|
||||
|
b.Property<string>("UserName") |
||||
|
.IsRequired() |
||||
|
.HasColumnName("UserName") |
||||
|
.HasMaxLength(256); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.ToTable("BlgUsers"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.Identity.IdentityRole") |
||||
|
.WithMany("Claims") |
||||
|
.HasForeignKey("RoleId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.Identity.IdentityUser") |
||||
|
.WithMany("Claims") |
||||
|
.HasForeignKey("UserId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.Identity.IdentityUser") |
||||
|
.WithMany("Logins") |
||||
|
.HasForeignKey("UserId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.Identity.IdentityRole") |
||||
|
.WithMany() |
||||
|
.HasForeignKey("RoleId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
|
||||
|
b.HasOne("Volo.Abp.Identity.IdentityUser") |
||||
|
.WithMany("Roles") |
||||
|
.HasForeignKey("UserId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.Identity.IdentityUser") |
||||
|
.WithMany("Tokens") |
||||
|
.HasForeignKey("UserId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Blogging.Comments.Comment", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Blogging.Posts.Post") |
||||
|
.WithMany() |
||||
|
.HasForeignKey("PostId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
|
||||
|
b.HasOne("Volo.Blogging.Comments.Comment") |
||||
|
.WithMany() |
||||
|
.HasForeignKey("RepliedCommentId"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Blogging.Posts.Post", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Blogging.Blogs.Blog") |
||||
|
.WithMany() |
||||
|
.HasForeignKey("BlogId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Blogging.Posts.PostTag", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Blogging.Posts.Post") |
||||
|
.WithMany("Tags") |
||||
|
.HasForeignKey("PostId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
|
||||
|
b.HasOne("Volo.Blogging.Tagging.Tag") |
||||
|
.WithMany() |
||||
|
.HasForeignKey("TagId") |
||||
|
.OnDelete(DeleteBehavior.Cascade); |
||||
|
}); |
||||
|
#pragma warning restore 612, 618
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
using System; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace Volo.BloggingTestApp.EntityFrameworkCore.Migrations |
||||
|
{ |
||||
|
public partial class Added_BlogUsers : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "BlgUsers", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(nullable: false), |
||||
|
TenantId = table.Column<Guid>(nullable: true), |
||||
|
UserName = table.Column<string>(maxLength: 256, nullable: false), |
||||
|
Email = table.Column<string>(maxLength: 256, nullable: true), |
||||
|
EmailConfirmed = table.Column<bool>(nullable: false, defaultValue: false), |
||||
|
PhoneNumber = table.Column<string>(maxLength: 16, nullable: true), |
||||
|
PhoneNumberConfirmed = table.Column<bool>(nullable: false, defaultValue: false), |
||||
|
ExtraProperties = table.Column<string>(nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_BlgUsers", x => x.Id); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropTable( |
||||
|
name: "BlgUsers"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,9 +1,9 @@ |
|||||
using System; |
using System; |
||||
using Volo.Abp.Application.Dtos; |
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
namespace Volo.Blogging.Blogs |
namespace Volo.Blogging.Blogs.Dtos |
||||
{ |
{ |
||||
public class BlogDto : EntityDto<Guid> |
public class BlogDto : FullAuditedEntityDto<Guid> |
||||
{ |
{ |
||||
public string Name { get; set; } |
public string Name { get; set; } |
||||
|
|
||||
@ -1,7 +1,4 @@ |
|||||
using System; |
namespace Volo.Blogging.Blogs.Dtos |
||||
using Volo.Abp.Application.Dtos; |
|
||||
|
|
||||
namespace Volo.Blogging.Blogs |
|
||||
{ |
{ |
||||
public class CreateBlogDto |
public class CreateBlogDto |
||||
{ |
{ |
||||
@ -0,0 +1,15 @@ |
|||||
|
using System; |
||||
|
|
||||
|
namespace Volo.Blogging.Blogs.Dtos |
||||
|
{ |
||||
|
public class UpdateBlogDto |
||||
|
{ |
||||
|
public Guid Id { get; set; } |
||||
|
|
||||
|
public string Name { get; set; } |
||||
|
|
||||
|
public string ShortName { get; set; } |
||||
|
|
||||
|
public string Description { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using Volo.Abp.Data; |
||||
|
using Volo.Abp.Domain.Entities; |
||||
|
using Volo.Abp.Users; |
||||
|
|
||||
|
namespace Volo.Blogging.Users |
||||
|
{ |
||||
|
public class BlogUser : AggregateRoot<Guid>, IUser, IHasExtraProperties |
||||
|
{ |
||||
|
public virtual Guid? TenantId { get; protected set; } |
||||
|
|
||||
|
public virtual string UserName { get; protected set; } |
||||
|
|
||||
|
public virtual string Email { get; protected set; } |
||||
|
|
||||
|
public virtual bool EmailConfirmed { get; protected set; } |
||||
|
|
||||
|
public virtual string PhoneNumber { get; protected set; } |
||||
|
|
||||
|
public virtual bool PhoneNumberConfirmed { get; protected set; } |
||||
|
|
||||
|
public virtual Dictionary<string, object> ExtraProperties { get; protected set; } |
||||
|
|
||||
|
protected BlogUser() |
||||
|
{ |
||||
|
ExtraProperties = new Dictionary<string, object>(); |
||||
|
} |
||||
|
|
||||
|
public BlogUser(IUserData user) |
||||
|
{ |
||||
|
Id = user.Id; |
||||
|
Email = user.Email; |
||||
|
EmailConfirmed = user.EmailConfirmed; |
||||
|
PhoneNumber = user.PhoneNumber; |
||||
|
PhoneNumberConfirmed = user.PhoneNumberConfirmed; |
||||
|
UserName = user.UserName; |
||||
|
TenantId = user.TenantId; |
||||
|
|
||||
|
ExtraProperties = new Dictionary<string, object>(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,22 @@ |
|||||
|
using Volo.Abp.Uow; |
||||
|
using Volo.Abp.Users; |
||||
|
|
||||
|
namespace Volo.Blogging.Users |
||||
|
{ |
||||
|
public class BlogUserLookupService : UserLookupService<BlogUser, IBlogUserRepository>, IBlogUserLookupService |
||||
|
{ |
||||
|
public BlogUserLookupService( |
||||
|
IBlogUserRepository userRepository, |
||||
|
IUnitOfWorkManager unitOfWorkManager) |
||||
|
: base( |
||||
|
userRepository, |
||||
|
unitOfWorkManager) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
protected override BlogUser CreateUser(IUserData externalUser) |
||||
|
{ |
||||
|
return new BlogUser(externalUser); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
using Volo.Abp.Users; |
||||
|
|
||||
|
namespace Volo.Blogging.Users |
||||
|
{ |
||||
|
public interface IBlogUserLookupService : IUserLookupService<BlogUser> |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,14 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
using Volo.Abp.Users; |
||||
|
|
||||
|
namespace Volo.Blogging.Users |
||||
|
{ |
||||
|
public interface IBlogUserRepository : IBasicRepository<BlogUser, Guid>, IUserRepository<BlogUser> |
||||
|
{ |
||||
|
Task<List<BlogUser>> GetUsersAsync(int maxCount, string filter, CancellationToken cancellationToken = default); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,27 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.Users.EntityFrameworkCore; |
||||
|
using Volo.Blogging.EntityFrameworkCore; |
||||
|
|
||||
|
namespace Volo.Blogging.Users |
||||
|
{ |
||||
|
public class EfCoreBlogUserRepository : EfCoreUserRepositoryBase<IBloggingDbContext, BlogUser>, IBlogUserRepository |
||||
|
{ |
||||
|
public EfCoreBlogUserRepository(IDbContextProvider<IBloggingDbContext> dbContextProvider) |
||||
|
: base(dbContextProvider) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public async Task<List<BlogUser>> GetUsersAsync(int maxCount, string filter, CancellationToken cancellationToken = default) |
||||
|
{ |
||||
|
return await DbSet |
||||
|
.WhereIf( !string.IsNullOrWhiteSpace( filter), x=>x.UserName.Contains(filter)) |
||||
|
.Take(maxCount).ToListAsync(cancellationToken); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,12 +1,20 @@ |
|||||
using Microsoft.Extensions.DependencyInjection; |
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp.Http.Client; |
||||
using Volo.Abp.Modularity; |
using Volo.Abp.Modularity; |
||||
|
|
||||
namespace Volo.Blogging |
namespace Volo.Blogging |
||||
{ |
{ |
||||
[DependsOn( |
[DependsOn( |
||||
typeof(BloggingApplicationContractsModule))] |
typeof(BloggingApplicationContractsModule), |
||||
|
typeof(AbpHttpClientModule))] |
||||
public class BloggingHttpApiClientModule : AbpModule |
public class BloggingHttpApiClientModule : AbpModule |
||||
{ |
{ |
||||
|
public const string RemoteServiceName = "Blogging"; |
||||
|
|
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
context.Services.AddHttpClientProxies(typeof(BloggingApplicationContractsModule).Assembly, RemoteServiceName); |
||||
|
} |
||||
|
|
||||
} |
} |
||||
} |
} |
||||
|
|||||
@ -0,0 +1,77 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.AspNetCore.Mvc; |
||||
|
using Volo.Abp.Auditing; |
||||
|
using Volo.Blogging.Blogs; |
||||
|
using Volo.Blogging.Blogs.Dtos; |
||||
|
|
||||
|
namespace Volo.Blogging |
||||
|
{ |
||||
|
[RemoteService] |
||||
|
[Area("blogging")] |
||||
|
[Controller] |
||||
|
[ControllerName("Blogs")] |
||||
|
[Route("api/blogging/blogs")] |
||||
|
[DisableAuditing] |
||||
|
public class BlogsController : AbpController, IBlogAppService |
||||
|
{ |
||||
|
private readonly IBlogAppService _blogAppService; |
||||
|
|
||||
|
public BlogsController(IBlogAppService blogAppService) |
||||
|
{ |
||||
|
_blogAppService = blogAppService; |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
[Route("")] |
||||
|
public async Task<PagedResultDto<BlogDto>> GetListPagedAsync(PagedAndSortedResultRequestDto input) |
||||
|
{ |
||||
|
return await _blogAppService.GetListPagedAsync(input); |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
[Route("/all")] |
||||
|
public async Task<ListResultDto<BlogDto>> GetListAsync() |
||||
|
{ |
||||
|
return await _blogAppService.GetListAsync(); |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
[Route("{shortName}")] |
||||
|
public async Task<BlogDto> GetByShortNameAsync(string shortName) |
||||
|
{ |
||||
|
return await _blogAppService.GetByShortNameAsync(shortName); |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
[Route("{id}")] |
||||
|
public async Task<BlogDto> GetAsync(Guid id) |
||||
|
{ |
||||
|
return await _blogAppService.GetAsync(id); |
||||
|
} |
||||
|
|
||||
|
[HttpPost] |
||||
|
public async Task<BlogDto> Create(CreateBlogDto input) |
||||
|
{ |
||||
|
return await _blogAppService.Create(input); |
||||
|
} |
||||
|
|
||||
|
[HttpPut] |
||||
|
[Route("{id}")] |
||||
|
public async Task<BlogDto> Update(Guid id, UpdateBlogDto input) |
||||
|
{ |
||||
|
throw new NotImplementedException(); |
||||
|
} |
||||
|
|
||||
|
[HttpDelete] |
||||
|
public async Task Delete(Guid id) |
||||
|
{ |
||||
|
await _blogAppService.Delete(id); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,20 @@ |
|||||
|
@page |
||||
|
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal |
||||
|
@using Volo.Blogging.Pages.Blog |
||||
|
@inherits BloggingPage |
||||
|
@model Volo.Blogging.Pages.Admin.Blogs.CreateModel |
||||
|
@{ |
||||
|
Layout = null; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
<abp-dynamic-form submit-button="false" abp-model="Blog" asp-page="/Admin/Blogs/Create"> |
||||
|
<abp-modal size="@(AbpModalSize.Large)"> |
||||
|
<abp-modal-header title="@L["Create"].Value"></abp-modal-header> |
||||
|
<abp-modal-body> |
||||
|
<abp-form-content/> |
||||
|
</abp-modal-body> |
||||
|
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"> |
||||
|
</abp-modal-footer> |
||||
|
</abp-modal> |
||||
|
</abp-dynamic-form> |
||||
@ -0,0 +1,50 @@ |
|||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; |
||||
|
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; |
||||
|
using Volo.Blogging.Blogs; |
||||
|
using Volo.Blogging.Blogs.Dtos; |
||||
|
|
||||
|
namespace Volo.Blogging.Pages.Admin.Blogs |
||||
|
{ |
||||
|
public class CreateModel : AbpPageModel |
||||
|
{ |
||||
|
private readonly IBlogAppService _blogAppService; |
||||
|
|
||||
|
[BindProperty] |
||||
|
public BlogCreateModalView Blog { get; set; } = new BlogCreateModalView(); |
||||
|
|
||||
|
public CreateModel(IBlogAppService blogAppService) |
||||
|
{ |
||||
|
_blogAppService = blogAppService; |
||||
|
} |
||||
|
|
||||
|
public void OnGet() |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public async void OnPostAsync() |
||||
|
{ |
||||
|
var language = ObjectMapper.Map<BlogCreateModalView, CreateBlogDto>(Blog); |
||||
|
|
||||
|
await _blogAppService.Create(language); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public class BlogCreateModalView |
||||
|
{ |
||||
|
[Required] |
||||
|
[StringLength(BlogConsts.MaxNameLength)] |
||||
|
public string Name { get; set; } |
||||
|
|
||||
|
[Required] |
||||
|
[StringLength(BlogConsts.MaxShortNameLength)] |
||||
|
public string ShortName { get; set; } |
||||
|
|
||||
|
[StringLength(BlogConsts.MaxDescriptionLength)] |
||||
|
public string Description { get; set; } |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,20 @@ |
|||||
|
@page |
||||
|
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal |
||||
|
@using Volo.Blogging.Pages.Blog |
||||
|
@inherits BloggingPage |
||||
|
@model Volo.Blogging.Pages.Admin.Blogs.EditModel |
||||
|
@{ |
||||
|
Layout = null; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
<abp-dynamic-form submit-button="false" abp-model="Blog" asp-page="/Admin/Blogs/Edit"> |
||||
|
<abp-modal size="@(AbpModalSize.Large)"> |
||||
|
<abp-modal-header title="@L["Create"].Value"></abp-modal-header> |
||||
|
<abp-modal-body> |
||||
|
<abp-form-content /> |
||||
|
</abp-modal-body> |
||||
|
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"> |
||||
|
</abp-modal-footer> |
||||
|
</abp-modal> |
||||
|
</abp-dynamic-form> |
||||
@ -0,0 +1,65 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; |
||||
|
using Volo.Blogging.Blogs; |
||||
|
using Volo.Blogging.Blogs.Dtos; |
||||
|
using Volo.Blogging.Posts; |
||||
|
|
||||
|
namespace Volo.Blogging.Pages.Admin.Blogs |
||||
|
{ |
||||
|
public class EditModel : AbpPageModel |
||||
|
{ |
||||
|
private readonly IBlogAppService _blogAppService; |
||||
|
|
||||
|
[BindProperty(SupportsGet = true)] |
||||
|
public Guid BlogId { get; set; } |
||||
|
|
||||
|
[BindProperty] |
||||
|
public BlogEditViewModel Blog { get; set; } = new BlogEditViewModel(); |
||||
|
|
||||
|
public EditModel(IBlogAppService blogAppService) |
||||
|
{ |
||||
|
_blogAppService = blogAppService; |
||||
|
} |
||||
|
|
||||
|
public async Task OnGet() |
||||
|
{ |
||||
|
var blog = await _blogAppService.GetAsync(BlogId); |
||||
|
|
||||
|
Blog = ObjectMapper.Map<BlogDto, BlogEditViewModel>(blog); |
||||
|
} |
||||
|
|
||||
|
public async Task OnPost() |
||||
|
{ |
||||
|
await _blogAppService.Update(Blog.Id, new UpdateBlogDto() |
||||
|
{ |
||||
|
Name = Blog.Name, |
||||
|
ShortName = Blog.ShortName, |
||||
|
Description = Blog.Description |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public class BlogEditViewModel |
||||
|
{ |
||||
|
[HiddenInput] |
||||
|
[Required] |
||||
|
public Guid Id { get; set; } |
||||
|
|
||||
|
[Required] |
||||
|
[StringLength(BlogConsts.MaxNameLength)] |
||||
|
public string Name { get; set; } |
||||
|
|
||||
|
[Required] |
||||
|
[StringLength(BlogConsts.MaxShortNameLength)] |
||||
|
public string ShortName { get; set; } |
||||
|
|
||||
|
[StringLength(BlogConsts.MaxDescriptionLength)] |
||||
|
public string Description { get; set; } |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,44 @@ |
|||||
|
@page |
||||
|
@using Microsoft.AspNetCore.Authorization |
||||
|
@using Volo.Blogging |
||||
|
@using Volo.Blogging.Pages.Blog |
||||
|
@inherits BloggingPage |
||||
|
@model IndexModel |
||||
|
@inject IAuthorizationService Authorization |
||||
|
@{ |
||||
|
ViewBag.PageTitle = "Blogs"; |
||||
|
} |
||||
|
|
||||
|
@section scripts { |
||||
|
<abp-script src="/Pages/Admin/Blogs/index.js" /> |
||||
|
<abp-script src="/Pages/Admin/Blogs/create.js" /> |
||||
|
} |
||||
|
|
||||
|
<abp-card> |
||||
|
<abp-card-header> |
||||
|
<abp-row> |
||||
|
<abp-column size-md="_6"> |
||||
|
<h2>@L["Blogs"]</h2> |
||||
|
</abp-column> |
||||
|
<abp-column size-md="_6" class="text-right"> |
||||
|
@if (await Authorization.IsGrantedAsync(BloggingPermissions.Blogs.Create)) |
||||
|
{ |
||||
|
<abp-button icon="plus" text="@L["CreateNewBlog"].Value" button-type="Primary" id="CreateNewBlogButtonId"></abp-button> |
||||
|
} |
||||
|
</abp-column> |
||||
|
</abp-row> |
||||
|
</abp-card-header> |
||||
|
<abp-card-body> |
||||
|
<abp-table striped-rows="true" id="BlogsTable" class="nowrap"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th>@L["Actions"]</th> |
||||
|
<th>@L["Name"]</th> |
||||
|
<th>@L["ShortName"]</th> |
||||
|
<th>@L["CreationTime"]</th> |
||||
|
<th>@L["Description"]</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
</abp-table> |
||||
|
</abp-card-body> |
||||
|
</abp-card> |
||||
@ -0,0 +1,12 @@ |
|||||
|
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; |
||||
|
|
||||
|
namespace Volo.Blogging.Pages.Admin.Blogs |
||||
|
{ |
||||
|
public class IndexModel : AbpPageModel |
||||
|
{ |
||||
|
public void OnGet() |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,14 @@ |
|||||
|
var abp = abp || {}; |
||||
|
$(function () { |
||||
|
abp.modals.blogCreate = function () { |
||||
|
var initModal = function (publicApi, args) { |
||||
|
var $form = publicApi.getForm(); |
||||
|
|
||||
|
|
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
initModal: initModal |
||||
|
} |
||||
|
}; |
||||
|
}); |
||||
@ -0,0 +1,14 @@ |
|||||
|
var abp = abp || {}; |
||||
|
$(function () { |
||||
|
abp.modals.blogEdit = function () { |
||||
|
var initModal = function (publicApi, args) { |
||||
|
var $form = publicApi.getForm(); |
||||
|
|
||||
|
|
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
initModal: initModal |
||||
|
} |
||||
|
}; |
||||
|
}); |
||||
@ -0,0 +1,85 @@ |
|||||
|
$(function () { |
||||
|
|
||||
|
var _createModal = new abp.ModalManager(abp.appPath + 'Admin/Blogs/Create'); |
||||
|
var _editModal = new abp.ModalManager(abp.appPath + 'Admin/Blogs/Edit'); |
||||
|
|
||||
|
var _dataTable = $('#BlogsTable').DataTable(abp.libs.datatables.normalizeConfiguration({ |
||||
|
processing: true, |
||||
|
serverSide: true, |
||||
|
paging: true, |
||||
|
searching: false, |
||||
|
autoWidth: false, |
||||
|
scrollX: true, |
||||
|
scrollCollapse: true, |
||||
|
order: [[3, "desc"]], |
||||
|
ajax: abp.libs.datatables.createAjax(volo.blogging.blogs.getListPaged), |
||||
|
columnDefs: [ |
||||
|
{ |
||||
|
targets: 0, //optional
|
||||
|
rowAction: { |
||||
|
items: |
||||
|
[ |
||||
|
{ |
||||
|
text: 'Edit', |
||||
|
visible: function () { |
||||
|
return true; //TODO: Check permission
|
||||
|
}, |
||||
|
action: function (data) { |
||||
|
_editModal.open({ |
||||
|
blogId: data.record.id |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
text: 'Delete', |
||||
|
visible: function () { |
||||
|
return true; //TODO: Check permission
|
||||
|
}, |
||||
|
confirmMessage: function (data) { return 'Todo: fill this message' }, |
||||
|
action: function (data) { |
||||
|
volo.blogging.blogs |
||||
|
.delete(data.record.id) |
||||
|
.then(function () { |
||||
|
_dataTable.ajax.reload(); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
target: 1, |
||||
|
data: "name" |
||||
|
}, |
||||
|
{ |
||||
|
target: 2, |
||||
|
data: "shortName" |
||||
|
}, |
||||
|
{ |
||||
|
target: 3, |
||||
|
data: "creationTime", |
||||
|
render: function (date) { |
||||
|
return date; |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
target: 4, |
||||
|
data: "description" |
||||
|
} |
||||
|
] |
||||
|
})); |
||||
|
|
||||
|
|
||||
|
$("#CreateNewBlogButtonId").click(function () { |
||||
|
_createModal.open(); |
||||
|
}); |
||||
|
|
||||
|
_createModal.onClose(function () { |
||||
|
_dataTable.ajax.reload(); |
||||
|
}); |
||||
|
|
||||
|
_editModal.onResult(function () { |
||||
|
_dataTable.ajax.reload(); |
||||
|
}); |
||||
|
|
||||
|
}); |
||||
@ -0,0 +1,9 @@ |
|||||
|
{ |
||||
|
"version": 3, |
||||
|
"file": "new.css", |
||||
|
"sources": [ |
||||
|
"new.scss" |
||||
|
], |
||||
|
"mappings": "AAAA,AACI,sBADkB,CAClB,gBAAgB,AAAC,CACb,gBAAgB,CAAE,OAAQ,CAC1B,UAAU,CAAE,MAAO,CAKtB,AARL,AAKQ,sBALc,CAClB,gBAAgB,CAIZ,kBAAkB,AAAC,CACf,UAAU,CAAE,IAAK,CACpB,AAPT,AAUI,sBAVkB,CAUlB,KAAK,AAAC,CACF,gBAAgB,CAAE,OAAQ,CAC7B,AAZL,AAcI,sBAdkB,CAclB,cAAc,AAAC,CACX,UAAU,CAAE,MAAO,CACtB", |
||||
|
"names": [] |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
#qa-new-post-container .new-post-editor{background-color:#F9F9F9;min-height:19.5em}#qa-new-post-container .new-post-editor .CodeMirror-scroll{min-height:20em}#qa-new-post-container .card{background-color:#f6f8fa}#qa-new-post-container .loading-cover{min-height:19.5em} |
||||
|
|
||||
|
/*# sourceMappingURL=new.css.map */ |
||||
@ -1,19 +1,21 @@ |
|||||
header { |
.vs-blog-title { |
||||
position: fixed; |
padding-bottom: 15px; |
||||
width: 100%; |
margin-bottom: 25px; |
||||
top: 0; |
border-bottom: 1px solid #ddd; |
||||
left: 0; |
h1,h2,h3,h4,h5, h6 { |
||||
z-index: 100; |
margin: 0; |
||||
background:#f8f9fa; |
padding: 0; |
||||
.navbar-blog { |
} |
||||
padding: 20px 0; |
} |
||||
|
|
||||
ul { |
|
||||
li { |
.vs-footer { |
||||
a { |
padding-top: 15px; |
||||
color: black; |
margin-top: 25px; |
||||
} |
border-top: 1px solid #ddd; |
||||
} |
} |
||||
} |
|
||||
} |
.vs-seperator { |
||||
} |
padding: 0 4px; |
||||
|
opacity: .3; |
||||
|
} |
||||
@ -0,0 +1,140 @@ |
|||||
|
.hero-section { |
||||
|
padding: 0; } |
||||
|
.hero-section .hero-articles { |
||||
|
position: relative; |
||||
|
overflow: hidden; } |
||||
|
.hero-section .hero-articles .hero-content { |
||||
|
position: absolute; |
||||
|
left: 12%; |
||||
|
right: 12%; |
||||
|
bottom: 80px; |
||||
|
z-index: 4; |
||||
|
text-align: center; } |
||||
|
.hero-section .hero-articles .hero-content h2 { |
||||
|
margin-top: 0; |
||||
|
font-size: 2.5em; |
||||
|
font-weight: bold; } |
||||
|
.hero-section .hero-articles .hero-content a { |
||||
|
color: white; |
||||
|
text-shadow: 0px 0px 20px rgba(0, 0, 0, 0.5); } |
||||
|
.hero-section .hero-articles .hero-content p { |
||||
|
color: white; } |
||||
|
.hero-section .hero-articles .tags .tag { |
||||
|
background: rgba(208, 208, 208, 0.3); |
||||
|
color: #fff !important; } |
||||
|
.hero-section .hero-articles .tags .tag:hover { |
||||
|
background: white; |
||||
|
color: black !important; } |
||||
|
.hero-section .hero-articles .article-owner { |
||||
|
text-align: center; |
||||
|
position: relative; |
||||
|
z-index: 12; } |
||||
|
.hero-section .hero-articles .article-owner .article-infos { |
||||
|
color: black; } |
||||
|
.hero-section .hero-articles .article-owner .article-infos a { |
||||
|
color: black; } |
||||
|
.hero-section .hero-articles .article-owner .article-infos .seperator { |
||||
|
margin: 0 4px; |
||||
|
color: rgba(255, 255, 255, 0.2); } |
||||
|
.hero-section .hero-articles .article-owner .article-infos img.article-avatar { |
||||
|
width: 64px; |
||||
|
margin: -25px 10px 0px 0; |
||||
|
border: 3px solid #fff; |
||||
|
display: inline-block; |
||||
|
border-radius: 50%; } |
||||
|
.hero-section .hero-articles .img-container { |
||||
|
background: black; } |
||||
|
.hero-section .hero-articles .img-container img { |
||||
|
filter: grayscale(10%); } |
||||
|
.hero-section .hero-articles .img-container::after { |
||||
|
content: ""; |
||||
|
display: block; |
||||
|
position: absolute; |
||||
|
z-index: 1; |
||||
|
bottom: 0px; |
||||
|
width: 100%; |
||||
|
top: 1% !important; |
||||
|
background: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.91) 89%, rgba(0, 0, 0, 0.93) 93%) !important; |
||||
|
transition: .2s all ease-in-out; |
||||
|
opacity: .9; } |
||||
|
.hero-section .hero-articles:hover .img-container::after { |
||||
|
opacity: 1; } |
||||
|
|
||||
|
.article-owner .article-infos { |
||||
|
color: #000; } |
||||
|
.article-owner .article-infos a { |
||||
|
color: rgba(0, 0, 0, 0.6); } |
||||
|
.article-owner .article-infos .seperator { |
||||
|
margin: 0 4px; |
||||
|
color: rgba(0, 0, 0, 0.2); } |
||||
|
.article-owner .article-infos img.article-avatar { |
||||
|
width: 30px; |
||||
|
margin: -1px 4px 0 0; |
||||
|
display: inline-block; |
||||
|
border-radius: 50%; } |
||||
|
|
||||
|
.card-articles .card-content { |
||||
|
padding: 10px 0px 10px; } |
||||
|
.card-articles .card-content h3 { |
||||
|
margin: 10px 0; } |
||||
|
.card-articles .card-content h3 a { |
||||
|
font-weight: 700; } |
||||
|
|
||||
|
.card-articles .article-owner { |
||||
|
text-align: left; } |
||||
|
.card-articles .article-owner .article-infos { |
||||
|
color: #000; } |
||||
|
.card-articles .article-owner .article-infos a { |
||||
|
color: rgba(0, 0, 0, 0.6); } |
||||
|
.card-articles .article-owner .article-infos .seperator { |
||||
|
margin: 0 4px; |
||||
|
color: rgba(0, 0, 0, 0.2); } |
||||
|
.card-articles .article-owner .article-infos img.article-avatar { |
||||
|
width: 30px; |
||||
|
margin: -1px 4px 0 0; |
||||
|
display: inline-block; |
||||
|
border-radius: 50%; } |
||||
|
|
||||
|
.article-owner { |
||||
|
font-size: .85em; } |
||||
|
|
||||
|
.user-link-icons { |
||||
|
position: absolute; |
||||
|
right: 18px; |
||||
|
top: 15px; |
||||
|
z-index: 3; } |
||||
|
.user-link-icons a { |
||||
|
display: inline-block; |
||||
|
color: #eee; |
||||
|
margin-left: 12px; |
||||
|
font-size: 1.25em; } |
||||
|
.user-link-icons a:hover { |
||||
|
color: #fff; } |
||||
|
|
||||
|
.tags .tag { |
||||
|
display: inline-block; |
||||
|
padding: 2px 8px; |
||||
|
background: rgba(208, 208, 208, 0.3); |
||||
|
border-radius: 30px; |
||||
|
margin: 0 1px 3px 0; |
||||
|
color: #b1b1b1 !important; |
||||
|
font-size: .7em; |
||||
|
line-height: 1.6em; |
||||
|
text-transform: uppercase; } |
||||
|
.tags .tag:hover { |
||||
|
background: black; |
||||
|
color: white !important; } |
||||
|
|
||||
|
.popular-tags a { |
||||
|
display: block; |
||||
|
font-size: .9em; } |
||||
|
.popular-tags a span { |
||||
|
float: right; |
||||
|
opacity: .3; |
||||
|
font-size: .9em; } |
||||
|
|
||||
|
.img-container { |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
border-radius: 4px; } |
||||
|
|
||||
@ -0,0 +1 @@ |
|||||
|
.hero-section{padding:0;}.hero-section .hero-articles{position:relative;overflow:hidden;}.hero-section .hero-articles .hero-content{position:absolute;left:12%;right:12%;bottom:80px;z-index:4;text-align:center;}.hero-section .hero-articles .hero-content h2{margin-top:0;font-size:2.5em;font-weight:bold;}.hero-section .hero-articles .hero-content a{color:#fff;text-shadow:0 0 20px rgba(0,0,0,.5);}.hero-section .hero-articles .hero-content p{color:#fff;}.hero-section .hero-articles .tags .tag{background:rgba(208,208,208,.3);color:#fff !important;}.hero-section .hero-articles .tags .tag:hover{background:#fff;color:#000 !important;}.hero-section .hero-articles .article-owner{text-align:center;position:relative;z-index:12;}.hero-section .hero-articles .article-owner .article-infos{color:#000;}.hero-section .hero-articles .article-owner .article-infos a{color:#000;}.hero-section .hero-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(255,255,255,.2);}.hero-section .hero-articles .article-owner .article-infos img.article-avatar{width:64px;margin:-25px 10px 0 0;border:3px solid #fff;display:inline-block;border-radius:50%;}.hero-section .hero-articles .img-container{background:#000;}.hero-section .hero-articles .img-container img{filter:grayscale(10%);}.hero-section .hero-articles .img-container::after{content:"";display:block;position:absolute;z-index:1;bottom:0;width:100%;top:1% !important;background:linear-gradient(to bottom,transparent 0,rgba(0,0,0,.91) 89%,rgba(0,0,0,.93) 93%) !important;transition:.2s all ease-in-out;opacity:.9;}.hero-section .hero-articles:hover .img-container::after{opacity:1;}.article-owner .article-infos{color:#000;}.article-owner .article-infos a{color:rgba(0,0,0,.6);}.article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.card-articles .card-content{padding:10px 0 10px;}.card-articles .card-content h3{margin:10px 0;}.card-articles .card-content h3 a{font-weight:700;}.card-articles .article-owner{text-align:left;}.card-articles .article-owner .article-infos{color:#000;}.card-articles .article-owner .article-infos a{color:rgba(0,0,0,.6);}.card-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.card-articles .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.article-owner{font-size:.85em;}.user-link-icons{position:absolute;right:18px;top:15px;z-index:3;}.user-link-icons a{display:inline-block;color:#eee;margin-left:12px;font-size:1.25em;}.user-link-icons a:hover{color:#fff;}.tags .tag{display:inline-block;padding:2px 8px;background:rgba(208,208,208,.3);border-radius:30px;margin:0 1px 3px 0;color:#b1b1b1 !important;font-size:.7em;line-height:1.6em;text-transform:uppercase;}.tags .tag:hover{background:#000;color:#fff !important;}.popular-tags a{display:block;font-size:.9em;}.popular-tags a span{float:right;opacity:.3;font-size:.9em;}.img-container{position:relative;overflow:hidden;border-radius:4px;} |
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,11 +1,13 @@ |
|||||
div.vs-blog { |
div.vs-blog { |
||||
position: relative; |
position: relative; |
||||
background: #fff; |
background: white; |
||||
font-family: Helvetica, sans-serif; |
padding: 0 30px; |
||||
font-size: 15px; |
font-family: 'Open Sans', Helvetica, Arial, sans-serif; |
||||
|
font-size: 14px; |
||||
@import "bootstrap-overwrite.scss"; |
@import "bootstrap-overwrite.scss"; |
||||
@import "header.scss"; |
@import "header.scss"; |
||||
@import "home.scss"; |
@import "home.scss"; |
||||
@import "post.scss"; |
@import "post.scss"; |
||||
@import "custom.scss"; |
@import "custom.scss"; |
||||
} |
} |
||||
|
|
||||
Loading…
Reference in new issue