1
0

feat: baseline

This commit is contained in:
Ca2didi 2025-04-22 00:31:40 +08:00
parent 53e99bd291
commit 2929fb5b31
7 changed files with 31 additions and 28 deletions

View File

@ -19,6 +19,7 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEventId_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fd0319a0b2a6743ffb27031fdd18a267a1f000_003F72_003Fcd473540_003FEventId_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEventPipeEventProvider_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F84661d4944484e5e93fdc174ab4e7d09d19e00_003F46_003F893b69bd_003FEventPipeEventProvider_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFileInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4c8540adf3cd4f6ab5d99f290234ba1ad19c00_003Ffe_003F5a5023e2_003FFileInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFlawless_002EClient_002EViewModels_002ESettingViewModel_002EReactiveCommands_002Eg_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Ftmp_003FJetBrainsPerUserTemp_002D1000_002D1_003FSourceGeneratedDocuments_003F290B001EA0034408A45A9794_003FReactiveUI_002ESourceGenerators_003FReactiveUI_002ESourceGenerators_002EReactiveCommandGenerator_003FFlawless_002EClient_002EViewModels_002ESettingViewModel_002EReactiveCommands_002Eg_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIdentityDbContext_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3eeae7a548684642a53a9ceddc825b7a1a930_003Fcf_003F6a374370_003FIdentityDbContext_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIdentityDbContext_00603_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3eeae7a548684642a53a9ceddc825b7a1a930_003F67_003Ff95019b3_003FIdentityDbContext_00603_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIdentityDbContext_00608_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3eeae7a548684642a53a9ceddc825b7a1a930_003Fc6_003Fcbfda1f6_003FIdentityDbContext_00608_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>

View File

@ -26,6 +26,7 @@
<PackageReference Include="Irihi.Ursa" Version="1.10.0" />
<PackageReference Include="Irihi.Ursa.ReactiveUIExtension" Version="1.0.1" />
<PackageReference Include="Irihi.Ursa.Themes.Semi" Version="1.10.0" />
<PackageReference Include="LiveChartsCore.SkiaSharpView.Avalonia" Version="2.0.0-rc5.4" />
<PackageReference Include="Markdown.Avalonia" Version="11.0.2" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.3" />

View File

@ -202,24 +202,24 @@ namespace Flawless.Client.Remote
/// <returns>A <see cref="Task"/> that completes when the request is finished.</returns>
/// <exception cref="ApiException">Thrown when the request returns a non-success status code.</exception>
[Headers("Content-Type: application/json")]
[Post("/api/repo/{userName}/{repositoryName}/create_webhook")]
Task CreateWebhook(string userName, string repositoryName, [Body] WebhookCreateRequest body, CancellationToken cancellationToken = default);
[Post("/api/repo/{userName}/{repositoryName}/webhooks/create")]
Task Create(string userName, string repositoryName, [Body] WebhookCreateRequest body, CancellationToken cancellationToken = default);
/// <returns>OK</returns>
/// <exception cref="ApiException">Thrown when the request returns a non-success status code.</exception>
[Headers("Accept: text/plain, application/json, text/json")]
[Get("/api/repo/{userName}/{repositoryName}")]
Task<ICollection<Webhook>> RepoGet(string userName, string repositoryName, CancellationToken cancellationToken = default);
[Get("/api/repo/{userName}/{repositoryName}/webhooks")]
Task<ICollection<Webhook>> WebhooksGet(string userName, string repositoryName, CancellationToken cancellationToken = default);
/// <returns>A <see cref="Task"/> that completes when the request is finished.</returns>
/// <exception cref="ApiException">Thrown when the request returns a non-success status code.</exception>
[Post("/api/repo/{userName}/{repositoryName}/{webhookId}/toggle")]
[Post("/api/repo/{userName}/{repositoryName}/webhooks/{webhookId}/toggle")]
Task Toggle(string userName, string repositoryName, int webhookId, [Query] bool? activate, CancellationToken cancellationToken = default);
/// <returns>A <see cref="Task"/> that completes when the request is finished.</returns>
/// <exception cref="ApiException">Thrown when the request returns a non-success status code.</exception>
[Delete("/api/repo/{userName}/{repositoryName}/{webhookId}")]
Task RepoDelete(string userName, string repositoryName, int webhookId, CancellationToken cancellationToken = default);
[Delete("/api/repo/{userName}/{repositoryName}/webhooks/{webhookId}")]
Task WebhooksDelete(string userName, string repositoryName, int webhookId, CancellationToken cancellationToken = default);
/// <returns>OK</returns>
/// <exception cref="ApiException">Thrown when the request returns a non-success status code.</exception>
@ -855,16 +855,16 @@ namespace Flawless.Client.Remote
[JsonPropertyName("publicEmail")]
public bool? PublicEmail { get; set; }
[JsonPropertyName("isActive")]
public bool IsActive { get; set; }
[JsonPropertyName("isAdmin")]
public bool IsAdmin { get; set; }
[JsonPropertyName("createdAt")]
public System.DateTimeOffset? CreatedAt { get; set; }
[JsonPropertyName("isAdmin")]
public bool? IsAdmin { get; set; }
[JsonPropertyName("isActive")]
public bool IsActive { get; set; }
}
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.3.0.0 (NJsonSchema v11.2.0.0 (Newtonsoft.Json v13.0.0.0))")]

View File

@ -45,7 +45,7 @@ public partial class UserService : BaseService<UserService>
user.CanEdit = info.Authorized;
user.PhoneNumber = info.Phone;
user.Email = info.Email;
user.IsAdmin = info.IsAdmin;
user.IsAdmin = info.IsAdmin ?? false;
user.IsActive = info.IsActive;
user.JoinDate = info.CreatedAt!.Value.LocalDateTime;
@ -81,7 +81,7 @@ public partial class UserService : BaseService<UserService>
user.CanEdit = info.Authorized;
user.PhoneNumber = info.Phone;
user.Email = info.Email;
user.IsAdmin = info.IsAdmin;
user.IsAdmin = info.IsAdmin ?? false;
user.IsActive = info.IsActive;
user.JoinDate = info.CreatedAt!.Value.LocalDateTime;
}

View File

@ -12,13 +12,14 @@ using DynamicData;
using DynamicData.Binding;
using Flawless.Abstraction;
using Flawless.Client.Models;
using Flawless.Client.Remote;
using Flawless.Client.Service;
using Flawless.Client.ViewModels.ModalBox;
using Flawless.Client.Views.ModalBox;
using Flawless.Core.Modal;
using ReactiveUI;
using ReactiveUI.SourceGenerators;
using Ursa.Controls;
using WorkspaceFile = Flawless.Core.Modal.WorkspaceFile;
namespace Flawless.Client.ViewModels;
@ -136,6 +137,8 @@ public partial class RepositoryViewModel : RoutableViewModelBase
public UserModel User { get; }
public ServerStatusResponse ServerStatus => Api.C.Status.Value!;
[Reactive] private bool _autoDetectChanges = true;
[Reactive] private bool _isOwnerRole, _isDeveloperRole, _isReporterRole, _isGuestRole;

View File

@ -56,18 +56,16 @@
<Button HorizontalAlignment="Stretch" Classes="Danger" Content="Yes I Want to Delete this Repository"
Command="{Binding DeleteRepositoryBothServerAndLocalCommand}"/>
</u:FormItem>
<u:FormItem Label="Webhook" IsVisible="{Binding ServerStatus.AllowWebHook}">
</u:FormItem>
</u:Form>
</ScrollViewer>
</TabItem>
<TabItem Header="Statics" IsVisible="{Binding IsDeveloperRole}">
<StackPanel Width="600" HorizontalAlignment="Stretch">
</StackPanel>
</TabItem>
<TabItem Header="Hooks" IsVisible="{Binding IsOwnerRole}">
<StackPanel Width="600" HorizontalAlignment="Stretch">
</StackPanel>
<StackPanel Width="600" HorizontalAlignment="Stretch">
</StackPanel>
</TabItem>
</TabControl>
</UserControl>

View File

@ -163,7 +163,7 @@ public class RepositoryInnieController(
return rp;
}
[HttpPost("create_webhook")]
[HttpPost("webhooks/create")]
public async Task<IActionResult> CreateWebhook(
string userName,
string repositoryName,
@ -177,7 +177,7 @@ public class RepositoryInnieController(
return Created();
}
[HttpGet]
[HttpGet("webhooks")]
public async Task<ActionResult<IEnumerable<Webhook>>> GetWebhooks(string userName, string repositoryName)
{
var user = (await userManager.GetUserAsync(HttpContext.User))!;
@ -187,7 +187,7 @@ public class RepositoryInnieController(
return Ok(await webhookService.GetWebhooksAsync(rp.Id));
}
[HttpPost("{webhookId}/toggle")]
[HttpPost("webhooks/{webhookId}/toggle")]
public async Task<IActionResult> ToggleWebhook(string userName, string repositoryName, int webhookId, bool activate)
{
var user = (await userManager.GetUserAsync(HttpContext.User))!;
@ -198,7 +198,7 @@ public class RepositoryInnieController(
return Ok();
}
[HttpDelete("{webhookId}")]
[HttpDelete("webhooks/{webhookId}")]
public async Task<IActionResult> DeleteWebhook(string userName, string repositoryName, int webhookId)
{
var user = (await userManager.GetUserAsync(HttpContext.User))!;