< Summary

Line coverage
100%
Covered lines: 66
Uncovered lines: 0
Coverable lines: 66
Total lines: 157
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
File 1: GetCurrentUser()100%11100%
File 2: Initialize(...)100%22100%
File 2: GetCurrentUser()100%11100%
File 2: GetCurrentUser()100%11100%

File(s)

/home/runner/work/ProjectRead.ing/ProjectRead.ing/Api/Auth/Queries/CurrentUser.cs

#LineLine coverage
 1// SPDX-FileCopyrightText: 2026 Alper Çelik <alper@alper-celik.dev>
 2//
 3// SPDX-License-Identifier: AGPL-3.0-or-later
 4
 5using Api.Auth.Handlers;
 6using Api.Auth.Models;
 7using Api.Auth.Utils;
 8using Api.Database;
 9using Riok.Mapperly.Abstractions;
 10
 11namespace Api.Auth.Queries;
 12
 13[QueryType]
 14public partial class CurrentUserQueries
 15{
 16    [PermissionCheckAuthorize(UserPermissionBits.UserRead)]
 17    public static async Task<User> GetCurrentUser(
 18        [Service] PGContext db,
 19        [Service] ICurrentUserId id,
 20        CancellationToken ct
 21    )
 122    {
 123        return UserMapper.ToDto(
 124            await db.Users.FindAsync([id.Id], cancellationToken: ct)
 125        )!;
 126    }
 27}
 28
 29[Node]
 30public record User(
 31    Guid Id,
 32    int RowVersion,
 33    NodaTime.Instant MetadataAddedAt,
 34    NodaTime.Instant MetadataUpdatedAt,
 35    string Email,
 36    bool EmailVerified,
 37    bool Admin
 38) : IEntityMetadata, INode
 39{
 40    public static byte IdPostfix => UserEF.IdPostfix;
 41
 42    [PermissionCheckAuthorize(UserPermissionBits.UserRead)]
 43    public static async Task<User?> GetUserAsync(
 44        [Service] PGContext db,
 45        Guid id,
 46        CancellationToken ct
 47    )
 48    {
 49        var user = await db.Users.FindAsync([id], cancellationToken: ct);
 50        return user?.Id == id ? UserMapper.ToDto(user) : null;
 51    }
 52}
 53
 54[Mapper]
 55public static partial class UserMapper
 56{
 57    public static partial IQueryable<User> ProjectToDto(IQueryable<UserEF> q);
 58
 59    [MapperIgnoreSource(nameof(UserEF.PasswordHash))]
 60    public static partial User? ToDto(UserEF? o);
 61}

/home/runner/work/ProjectRead.ing/ProjectRead.ing/Api/obj/Debug/net10.0/generated/HotChocolate.Types.Analyzers/HotChocolate.Types.Analyzers.GraphQLServerGenerator/CurrentUserQueries.M6SmBChz_K6lfp_7b0aNFw.hc.g.cs

#LineLine coverage
 1// <auto-generated/>
 2
 3#nullable enable
 4#pragma warning disable
 5
 6using System;
 7using System.Runtime.CompilerServices;
 8using HotChocolate;
 9using HotChocolate.Types;
 10using HotChocolate.Execution.Configuration;
 11using Microsoft.Extensions.DependencyInjection;
 12using HotChocolate.Internal;
 13
 14namespace Api.Auth.Queries
 15{
 16    public partial class CurrentUserQueries
 17    {
 18        internal static void Initialize(global::HotChocolate.Types.IObjectTypeDescriptor descriptor)
 119        {
 120            var extension = descriptor.Extend();
 121            var configuration = extension.Configuration;
 122            var thisType = typeof(global::Api.Auth.Queries.CurrentUserQueries);
 123            var bindingResolver = extension.Context.ParameterBindingResolver;
 124            var resolvers = new __Resolvers();
 25
 126            HotChocolate.Internal.ConfigurationHelper.ApplyConfiguration(
 127                extension.Context,
 128                descriptor,
 129                typeof(global::Api.Auth.Queries.CurrentUserQueries),
 130                new global::HotChocolate.Types.QueryTypeAttribute());
 131            configuration.ConfigurationsAreApplied = true;
 32
 133            var naming = descriptor.Extend().Context.Naming;
 34
 135            descriptor
 136                .Field(naming.GetMemberName("CurrentUser", global::HotChocolate.Types.MemberKind.ObjectField))
 137                .ExtendWith(static (field, context) =>
 138                {
 139                    var configuration = field.Configuration;
 140                    var typeInspector = field.Context.TypeInspector;
 141                    var bindingResolver = field.Context.ParameterBindingResolver;
 142                    var naming = field.Context.Naming;
 143
 144                    configuration.Type = global::HotChocolate.Types.Descriptors.TypeReference.Create(
 145                        typeInspector.GetTypeRef(typeof(global::Api.Auth.Queries.User), HotChocolate.Types.TypeContext.O
 146                        new global::HotChocolate.Language.NonNullTypeNode(new global::HotChocolate.Language.NamedTypeNod
 147                    configuration.ResultType = typeof(global::Api.Auth.Queries.User);
 148                    configuration.DeclaringType = context.ThisType;
 149
 150                    configuration.SetSourceGeneratorFlags();
 151
 152                    configuration.Member = context.ThisType.GetMethod(
 153                        "GetCurrentUser",
 154                        global::HotChocolate.Utilities.ReflectionUtils.StaticMemberFlags,
 155                        new global::System.Type[]
 156                        {
 157                            typeof(global::Api.Database.PGContext),
 158                            typeof(global::Api.Auth.Utils.ICurrentUserId),
 159                            typeof(global::System.Threading.CancellationToken)
 160                        })!;
 161
 162                    var fieldDescriptor = global::HotChocolate.Types.Descriptors.ObjectFieldDescriptor.From(field.Contex
 163                    HotChocolate.Internal.ConfigurationHelper.ApplyConfiguration(
 164                        field.Context,
 165                        fieldDescriptor,
 166                        configuration.Member,
 167                        new global::Api.Auth.Handlers.PermissionCheckAuthorizeAttribute(global::Api.Auth.Models.UserPerm
 168                    configuration.ConfigurationsAreApplied = true;
 169                    fieldDescriptor.CreateConfiguration();
 170
 171                    configuration.Resolvers = context.Resolvers.GetCurrentUser();
 172                },
 173                (Resolvers: resolvers, ThisType: thisType));
 74
 75            Configure(descriptor);
 176        }
 77
 78        static partial void Configure(global::HotChocolate.Types.IObjectTypeDescriptor descriptor);
 79
 80        private sealed class __Resolvers
 81        {
 82            public HotChocolate.Resolvers.FieldResolverDelegates GetCurrentUser()
 183                => new global::HotChocolate.Resolvers.FieldResolverDelegates(resolver: GetCurrentUser);
 84
 85            private async global::System.Threading.Tasks.ValueTask<global::System.Object?> GetCurrentUser(global::HotCho
 186            {
 187                var args0 = context.Service<global::Api.Database.PGContext>();
 188                var args1 = context.Service<global::Api.Auth.Utils.ICurrentUserId>();
 189                var args2 = context.RequestAborted;
 190                var result = await global::Api.Auth.Queries.CurrentUserQueries.GetCurrentUser(args0, args1, args2);
 191                return result;
 192            }
 93        }
 94    }
 95}
 96