Skip to content

Commit 472b22d

Browse files
authored
Merge pull request #153 from AIDotNet/feature/chat
Feature/chat
2 parents 564b6eb + a6386fd commit 472b22d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+13351
-788
lines changed

KoalaWiki.Core/DataAccess/IKoalaWikiContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ public interface IKoalaWikiContext
5555

5656
public DbSet<DailyStatistics> DailyStatistics { get; set; }
5757

58+
public DbSet<AppConfig> AppConfigs { get; set; }
59+
5860
Task<int> SaveChangesAsync(CancellationToken cancellationToken = new());
5961

6062
Task RunMigrateAsync();

KoalaWiki.Core/DataAccess/KoalaWikiContext.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public class KoalaWikiContext<TContext>(DbContextOptions<TContext> options)
5656

5757
public DbSet<DailyStatistics> DailyStatistics { get; set; }
5858

59+
public DbSet<AppConfig> AppConfigs { get; set; }
60+
5961
public async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
6062
{
6163
BeforeSaveChanges();
@@ -386,5 +388,31 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
386388
options.HasIndex(x => x.CreatedAt);
387389
options.HasComment("每日统计表");
388390
});
391+
392+
modelBuilder.Entity<AppConfig>(options =>
393+
{
394+
options.HasKey(x => x.Id);
395+
options.Property(x => x.Id).HasComment("主键Id");
396+
options.Property(x => x.AppId).IsRequired().HasComment("应用ID");
397+
options.Property(x => x.Name).IsRequired().HasComment("应用名称");
398+
options.Property(x => x.OrganizationName).IsRequired().HasComment("组织名称");
399+
options.Property(x => x.RepositoryName).IsRequired().HasComment("仓库名称");
400+
options.Property(x => x.AllowedDomainsJson).IsRequired().HasComment("允许的域名列表JSON");
401+
options.Property(x => x.EnableDomainValidation).HasComment("是否启用域名验证");
402+
options.Property(x => x.Description).HasComment("应用描述");
403+
options.Property(x => x.UserId).IsRequired().HasComment("创建用户ID");
404+
options.Property(x => x.IsEnabled).HasComment("是否启用");
405+
options.Property(x => x.LastUsedAt).HasComment("最后使用时间");
406+
options.Property(x => x.CreatedAt).IsRequired().HasComment("创建时间");
407+
options.HasIndex(x => x.AppId).IsUnique();
408+
options.HasIndex(x => x.Name);
409+
options.HasIndex(x => x.OrganizationName);
410+
options.HasIndex(x => x.RepositoryName);
411+
options.HasIndex(x => x.UserId);
412+
options.HasIndex(x => x.IsEnabled);
413+
options.HasIndex(x => x.CreatedAt);
414+
options.HasIndex(x => new { x.OrganizationName, x.RepositoryName });
415+
options.HasComment("应用配置表");
416+
});
389417
}
390418
}

KoalaWiki.Core/packages.lock.json

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
{
2+
"version": 2,
3+
"dependencies": {
4+
"net9.0": {
5+
"Microsoft.EntityFrameworkCore": {
6+
"type": "Direct",
7+
"requested": "[9.0.6, )",
8+
"resolved": "9.0.6",
9+
"contentHash": "r5hzM6Bhw4X3z28l5vmsaCPjk9VsQP4zaaY01THh1SAYjgTMVadYIvpNkCfmrv/Klks6aIf2A9eY7cpGZab/hg==",
10+
"dependencies": {
11+
"Microsoft.EntityFrameworkCore.Abstractions": "9.0.6",
12+
"Microsoft.EntityFrameworkCore.Analyzers": "9.0.6",
13+
"Microsoft.Extensions.Caching.Memory": "9.0.6",
14+
"Microsoft.Extensions.Logging": "9.0.6"
15+
}
16+
},
17+
"Microsoft.EntityFrameworkCore.Relational": {
18+
"type": "Direct",
19+
"requested": "[9.0.6, )",
20+
"resolved": "9.0.6",
21+
"contentHash": "Ht6OT17sYnO31Dx+hX72YHrc5kZt53g5napaw0FpyIekXCvb+gUVvufEG55Fa7taFm8ccy0Vzs+JVNR9NL0JlA==",
22+
"dependencies": {
23+
"Microsoft.EntityFrameworkCore": "9.0.6",
24+
"Microsoft.Extensions.Caching.Memory": "9.0.6",
25+
"Microsoft.Extensions.Configuration.Abstractions": "9.0.6",
26+
"Microsoft.Extensions.Logging": "9.0.6"
27+
}
28+
},
29+
"Microsoft.EntityFrameworkCore.Analyzers": {
30+
"type": "Transitive",
31+
"resolved": "9.0.6",
32+
"contentHash": "VKggHNQC5FCn3/vooaIM/4aEjGmrmWm78IrdRLz9lLV0Rm9bVHEr/jiWApDkU0U9ec2xGAilvQqJ5mMX7QC2cw=="
33+
},
34+
"Microsoft.Extensions.Configuration.Abstractions": {
35+
"type": "Transitive",
36+
"resolved": "9.0.6",
37+
"contentHash": "3GgMIi2jP8g1fBW93Z9b9Unamc0SIsgyhiCmC91gq4loTixK9vQMuxxUsfJ1kRGwn+/FqLKwOHqmn0oYWn3Fvw==",
38+
"dependencies": {
39+
"Microsoft.Extensions.Primitives": "9.0.6"
40+
}
41+
},
42+
"Microsoft.Extensions.DependencyInjection": {
43+
"type": "Transitive",
44+
"resolved": "9.0.6",
45+
"contentHash": "vS65HMo5RS10DD543fknsyVDxihMcVxVn3/hNaILgBxWYnOLxWIeCIO9X0QFuCvPRNjClvXe9Aj8KaQNx7vFkQ==",
46+
"dependencies": {
47+
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6"
48+
}
49+
},
50+
"Microsoft.Extensions.Logging": {
51+
"type": "Transitive",
52+
"resolved": "9.0.6",
53+
"contentHash": "XBzjitTFaQhF8EbJ645vblZezV1p52ePTxKHoVkRidHF11Xkjxg94qr0Rvp2qyxK2vBJ4OIZ41NB15YUyxTGMQ==",
54+
"dependencies": {
55+
"Microsoft.Extensions.DependencyInjection": "9.0.6",
56+
"Microsoft.Extensions.Logging.Abstractions": "9.0.6",
57+
"Microsoft.Extensions.Options": "9.0.6"
58+
}
59+
},
60+
"Microsoft.Extensions.Options": {
61+
"type": "Transitive",
62+
"resolved": "9.0.6",
63+
"contentHash": "wUPhNM1zsI58Dy10xRdF2+pnsisiUuETg5ZBncyAEEUm/CQ9Q1vmivyUWH8RDbAlqyixf2dJNQ2XZb7HsKUEQw==",
64+
"dependencies": {
65+
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6",
66+
"Microsoft.Extensions.Primitives": "9.0.6"
67+
}
68+
},
69+
"Microsoft.Extensions.Primitives": {
70+
"type": "Transitive",
71+
"resolved": "9.0.6",
72+
"contentHash": "BHniU24QV67qp1pJknqYSofAPYGmijGI8D+ci9yfw33iuFdyOeB9lWTg78ThyYLyQwZw3s0vZ36VMb0MqbUuLw=="
73+
},
74+
"koalawiki.domains": {
75+
"type": "Project"
76+
},
77+
"Microsoft.EntityFrameworkCore.Abstractions": {
78+
"type": "CentralTransitive",
79+
"requested": "[9.0.6, )",
80+
"resolved": "9.0.6",
81+
"contentHash": "7MkhPK8emb8hfOx/mFVvHuIHxQ+mH2YdlK4sFUXgsGlvR0A44vsmd2wcHavZOTTzaKhN+aFUVy3zmkztKmTo+A=="
82+
},
83+
"Microsoft.Extensions.Caching.Abstractions": {
84+
"type": "CentralTransitive",
85+
"requested": "[9.0.2, )",
86+
"resolved": "9.0.6",
87+
"contentHash": "bL/xQsVNrdVkzjP5yjX4ndkQ03H3+Bk3qPpl+AMCEJR2RkfgAYmoQ/xXffPV7is64+QHShnhA12YAaFmNbfM+A==",
88+
"dependencies": {
89+
"Microsoft.Extensions.Primitives": "9.0.6"
90+
}
91+
},
92+
"Microsoft.Extensions.Caching.Memory": {
93+
"type": "CentralTransitive",
94+
"requested": "[9.0.6, )",
95+
"resolved": "9.0.6",
96+
"contentHash": "qPW2d798tBPZcRmrlaBJqyChf2+0odDdE+0Lxvrr0ywkSNl1oNMK8AKrOfDwyXyjuLCv0ua7p6nrUExCeXhCcg==",
97+
"dependencies": {
98+
"Microsoft.Extensions.Caching.Abstractions": "9.0.6",
99+
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6",
100+
"Microsoft.Extensions.Logging.Abstractions": "9.0.6",
101+
"Microsoft.Extensions.Options": "9.0.6",
102+
"Microsoft.Extensions.Primitives": "9.0.6"
103+
}
104+
},
105+
"Microsoft.Extensions.DependencyInjection.Abstractions": {
106+
"type": "CentralTransitive",
107+
"requested": "[9.0.6, )",
108+
"resolved": "9.0.6",
109+
"contentHash": "0Zn6nR/6g+90MxskZyOOMPQvnPnrrGu6bytPwkV+azDcTtCSuQ1+GJUrg8Klmnrjk1i6zMpw2lXijl+tw7Q3kA=="
110+
},
111+
"Microsoft.Extensions.Logging.Abstractions": {
112+
"type": "CentralTransitive",
113+
"requested": "[9.0.2, )",
114+
"resolved": "9.0.6",
115+
"contentHash": "LFnyBNK7WtFmKdnHu3v0HOYQ8BcjYuy0jdC9pgCJ/rbLKoJEG9/dBzSKMEeeWDbDeoWS0TIxOC8a9CM5ufca3A==",
116+
"dependencies": {
117+
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6"
118+
}
119+
}
120+
}
121+
}
122+
}

KoalaWiki.Domains/AppConfig.cs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using System;
2+
using System.ComponentModel.DataAnnotations;
3+
4+
namespace KoalaWiki.Domains;
5+
6+
/// <summary>
7+
/// 应用配置实体
8+
/// </summary>
9+
public class AppConfig : Entity<string>
10+
{
11+
/// <summary>
12+
/// 应用ID(唯一标识)
13+
/// </summary>
14+
[Required]
15+
[StringLength(64)]
16+
public string AppId { get; set; } = string.Empty;
17+
18+
/// <summary>
19+
/// 应用名称
20+
/// </summary>
21+
[Required]
22+
[StringLength(100)]
23+
public string Name { get; set; } = string.Empty;
24+
25+
/// <summary>
26+
/// 组织名称
27+
/// </summary>
28+
[Required]
29+
[StringLength(100)]
30+
public string OrganizationName { get; set; } = string.Empty;
31+
32+
/// <summary>
33+
/// 仓库名称
34+
/// </summary>
35+
[Required]
36+
[StringLength(100)]
37+
public string RepositoryName { get; set; } = string.Empty;
38+
39+
/// <summary>
40+
/// 允许的域名列表(JSON 格式存储)
41+
/// </summary>
42+
public string AllowedDomainsJson { get; set; } = "[]";
43+
44+
/// <summary>
45+
/// 是否启用域名验证
46+
/// </summary>
47+
public bool EnableDomainValidation { get; set; } = false;
48+
49+
/// <summary>
50+
/// 应用描述
51+
/// </summary>
52+
[StringLength(500)]
53+
public string Description { get; set; } = string.Empty;
54+
55+
/// <summary>
56+
/// 创建用户ID
57+
/// </summary>
58+
[Required]
59+
public string UserId { get; set; } = string.Empty;
60+
61+
/// <summary>
62+
/// 是否启用
63+
/// </summary>
64+
public bool IsEnabled { get; set; } = true;
65+
66+
/// <summary>
67+
/// 最后使用时间
68+
/// </summary>
69+
public DateTime? LastUsedAt { get; set; }
70+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"version": 2,
3+
"dependencies": {
4+
"net9.0": {}
5+
}
6+
}

0 commit comments

Comments
 (0)