diff --git a/src/api/MicCheck.Api/Audit/AuditLog.cs b/src/api/MicCheck.Api/Audit/AuditLog.cs index 683aee1..39bc405 100755 --- a/src/api/MicCheck.Api/Audit/AuditLog.cs +++ b/src/api/MicCheck.Api/Audit/AuditLog.cs @@ -1,6 +1,6 @@ namespace MicCheck.Api.Audit; -public class AuditLog +public record AuditLog { public int Id { get; init; } public required string ResourceType { get; init; } diff --git a/src/api/MicCheck.Api/Audit/AuditLogQueryService.cs b/src/api/MicCheck.Api/Audit/AuditLogQueryService.cs index cf4bb52..7175790 100755 --- a/src/api/MicCheck.Api/Audit/AuditLogQueryService.cs +++ b/src/api/MicCheck.Api/Audit/AuditLogQueryService.cs @@ -6,29 +6,25 @@ namespace MicCheck.Api.Audit; public class AuditLogQueryService(IMicCheckDbContext db) { - public async Task> ListByOrganizationAsync( - int organizationId, AuditLogFilter filter, CancellationToken ct = default) + public async Task> ListByOrganizationAsync(int organizationId, AuditLogFilter filter, CancellationToken ct = default) { var query = db.AuditLogs.Where(l => l.OrganizationId == organizationId); return await ApplyFilterAndPageAsync(query, filter, ct); } - public async Task> ListByProjectAsync( - int projectId, AuditLogFilter filter, CancellationToken ct = default) + public async Task> ListByProjectAsync(int projectId, AuditLogFilter filter, CancellationToken ct = default) { var query = db.AuditLogs.Where(l => l.ProjectId == projectId); return await ApplyFilterAndPageAsync(query, filter, ct); } - public async Task> ListByEnvironmentAsync( - int environmentId, AuditLogFilter filter, CancellationToken ct = default) + public async Task> ListByEnvironmentAsync(int environmentId, AuditLogFilter filter, CancellationToken ct = default) { var query = db.AuditLogs.Where(l => l.EnvironmentId == environmentId); return await ApplyFilterAndPageAsync(query, filter, ct); } - private async Task> ApplyFilterAndPageAsync( - IQueryable query, AuditLogFilter filter, CancellationToken ct) + private async Task> ApplyFilterAndPageAsync(IQueryable query, AuditLogFilter filter, CancellationToken ct) { if (filter.From.HasValue) query = query.Where(l => l.CreatedAt >= filter.From.Value); @@ -66,4 +62,4 @@ public class AuditLogQueryService(IMicCheckDbContext db) return new PagedResult(total, items); } -} +} \ No newline at end of file diff --git a/src/api/MicCheck.Api/Audit/AuditService.cs b/src/api/MicCheck.Api/Audit/AuditService.cs index a8fd5b4..e54e285 100755 --- a/src/api/MicCheck.Api/Audit/AuditService.cs +++ b/src/api/MicCheck.Api/Audit/AuditService.cs @@ -33,7 +33,7 @@ public class AuditService(IMicCheckDbContext db, IHttpContextAccessor httpContex }, JsonOptions); } - var actorUserId = ResolveActorUserId(); + var actorUserId = GetCurrentUserId(); var log = new AuditLog { @@ -78,7 +78,7 @@ public class AuditService(IMicCheckDbContext db, IHttpContextAccessor httpContex string? changes = null, CancellationToken ct = default) { - var actorUserId = ResolveActorUserId(); + var actorUserId = GetCurrentUserId(); var log = new AuditLog { @@ -112,7 +112,7 @@ public class AuditService(IMicCheckDbContext db, IHttpContextAccessor httpContex }); } - private int? ResolveActorUserId() + private int? GetCurrentUserId() { var claim = httpContextAccessor.HttpContext?.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value; return int.TryParse(claim, out var id) ? id : null; diff --git a/src/api/MicCheck.Api/Common/Security/Authorization/ProjectPermissionRequirement.cs b/src/api/MicCheck.Api/Common/Security/Authorization/ProjectPermissionRequirement.cs index 503447a..f98f995 100755 --- a/src/api/MicCheck.Api/Common/Security/Authorization/ProjectPermissionRequirement.cs +++ b/src/api/MicCheck.Api/Common/Security/Authorization/ProjectPermissionRequirement.cs @@ -2,9 +2,4 @@ using Microsoft.AspNetCore.Authorization; namespace MicCheck.Api.Common.Security.Authorization; -public class ProjectPermissionRequirement : IAuthorizationRequirement -{ - public ProjectPermission Permission { get; } - - public ProjectPermissionRequirement(ProjectPermission permission) => Permission = permission; -} +public record ProjectPermissionRequirement(ProjectPermission Permission) : IAuthorizationRequirement; diff --git a/src/api/MicCheck.Api/Features/CreateFeatureRequest.cs b/src/api/MicCheck.Api/Features/CreateFeatureRequest.cs index 1c3a23b..376b484 100755 --- a/src/api/MicCheck.Api/Features/CreateFeatureRequest.cs +++ b/src/api/MicCheck.Api/Features/CreateFeatureRequest.cs @@ -3,12 +3,7 @@ using MicCheck.Api.Common.Validation; namespace MicCheck.Api.Features; -public record CreateFeatureRequest( - string Name, - FeatureType Type, - string? InitialValue, - string? Description -); +public record CreateFeatureRequest(string Name, FeatureType Type, string? InitialValue, string? Description); public class CreateFeatureRequestValidator : IModelValidator { diff --git a/src/api/MicCheck.Api/Features/FeatureStateResult.cs b/src/api/MicCheck.Api/Features/FeatureStateResult.cs index 636ecbd..d371606 100755 --- a/src/api/MicCheck.Api/Features/FeatureStateResult.cs +++ b/src/api/MicCheck.Api/Features/FeatureStateResult.cs @@ -1,6 +1,6 @@ namespace MicCheck.Api.Features; -public class FeatureStateResult +public record FeatureStateResult { public required Feature Feature { get; init; } public bool Enabled { get; init; } diff --git a/src/api/MicCheck.Api/Features/Tag.cs b/src/api/MicCheck.Api/Features/Tag.cs index e848dbc..f004d7e 100755 --- a/src/api/MicCheck.Api/Features/Tag.cs +++ b/src/api/MicCheck.Api/Features/Tag.cs @@ -1,9 +1,9 @@ namespace MicCheck.Api.Features; -public class Tag +public record Tag { public int Id { get; init; } - public required string Label { get; set; } - public required string Color { get; set; } + public required string Label { get; init; } + public required string Color { get; init; } public int ProjectId { get; init; } } diff --git a/src/api/MicCheck.Api/Features/TagsController.cs b/src/api/MicCheck.Api/Features/TagsController.cs index 709bcb4..a5e390b 100755 --- a/src/api/MicCheck.Api/Features/TagsController.cs +++ b/src/api/MicCheck.Api/Features/TagsController.cs @@ -8,23 +8,24 @@ namespace MicCheck.Api.Features; [ApiController] [Authorize(Policy = AuthorizationPolicies.AdminApiAccess)] [EnableRateLimiting("AdminApi")] +[Route("api/v1/project/{projectId}")] public class TagsController(TagService tagService) : ControllerBase { - [HttpGet("api/v1/project/{projectId}/tags")] + [HttpGet("tags")] public async Task>> List(int projectId, CancellationToken ct) { var tags = await tagService.ListByProjectAsync(projectId, ct); return Ok(tags.Select(TagResponse.From).ToList()); } - [HttpPost("api/v1/project/{projectId}/tags")] + [HttpPost("tags")] public async Task> Create(int projectId, CreateTagRequest request, CancellationToken ct) { var tag = await tagService.CreateAsync(projectId, request.Label, request.Color, ct); return CreatedAtAction(nameof(List), new { projectId }, TagResponse.From(tag)); } - [HttpDelete("api/v1/project/{projectId}/tag/{id}")] + [HttpDelete("tag/{id}")] public async Task Delete(int projectId, int id, CancellationToken ct) { var tag = await tagService.FindByIdAsync(id, ct); diff --git a/src/api/MicCheck.Api/Features/UpdateFeatureRequest.cs b/src/api/MicCheck.Api/Features/UpdateFeatureRequest.cs index 8e8de0e..4dde7e0 100755 --- a/src/api/MicCheck.Api/Features/UpdateFeatureRequest.cs +++ b/src/api/MicCheck.Api/Features/UpdateFeatureRequest.cs @@ -3,10 +3,7 @@ using MicCheck.Api.Common.Validation; namespace MicCheck.Api.Features; -public record UpdateFeatureRequest( - string Name, - string? Description -); +public record UpdateFeatureRequest(string Name, string? Description); public class UpdateFeatureRequestValidator : IModelValidator { diff --git a/src/api/MicCheck.Api/Features/Usage/FeatureUsageDaily.cs b/src/api/MicCheck.Api/Features/Usage/FeatureUsageDaily.cs index 5507b81..114975a 100644 --- a/src/api/MicCheck.Api/Features/Usage/FeatureUsageDaily.cs +++ b/src/api/MicCheck.Api/Features/Usage/FeatureUsageDaily.cs @@ -1,12 +1,12 @@ namespace MicCheck.Api.Features.Usage; -public class FeatureUsageDaily +public record FeatureUsageDaily { public int Id { get; init; } public int EnvironmentId { get; init; } public int FeatureId { get; init; } - public required string FeatureName { get; set; } + public required string FeatureName { get; init; } public DateOnly UsageDate { get; init; } - public long Count { get; set; } - public DateTimeOffset UpdatedAt { get; set; } + public long Count { get; init; } + public DateTimeOffset UpdatedAt { get; init; } } diff --git a/src/api/MicCheck.Api/Features/Usage/FeatureUsageResponses.cs b/src/api/MicCheck.Api/Features/Usage/FeatureUsageResponses.cs index 61833fc..b067b80 100644 --- a/src/api/MicCheck.Api/Features/Usage/FeatureUsageResponses.cs +++ b/src/api/MicCheck.Api/Features/Usage/FeatureUsageResponses.cs @@ -4,6 +4,4 @@ public record TopFeatureUsage(int FeatureId, string FeatureName, long Count); public record DailyUsage(DateOnly Date, long TotalCount, IReadOnlyList Features); -public record DashboardUsageResponse( - IReadOnlyList TopFeaturesLastDay, - IReadOnlyList DailyUsage); +public record DashboardUsageResponse(IReadOnlyList TopFeaturesLastDay, IReadOnlyList DailyUsage); diff --git a/src/api/MicCheck.Api/Webhooks/WebhookEvent.cs b/src/api/MicCheck.Api/Webhooks/WebhookEvent.cs index 0f603d0..76a5fb5 100755 --- a/src/api/MicCheck.Api/Webhooks/WebhookEvent.cs +++ b/src/api/MicCheck.Api/Webhooks/WebhookEvent.cs @@ -1,6 +1,6 @@ namespace MicCheck.Api.Webhooks; -public class WebhookEvent +public record WebhookEvent { public required string EventType { get; init; } public int? EnvironmentId { get; init; }