{"path":"NexusReader.Application/DTOs/User/UserProfileDto.cs","purpose":"Defines DTOs for returning user profile and last-read book information across the application boundary (UI/API), including helper computed properties for UI compatibility.","classification":{"role":"dto","layer":"application","confidence":0.9,"evidence":["DTO/view-model naming pattern","Namespace: NexusReader.Application.DTOs.User","File contains record types named *Dto and lives under DTOs folder","References PlanConstants and other DTOs (typical DTO composition)"]},"className":"UserProfileDto","methods":[],"types":[{"name":"UserProfileDto","kind":"dto","line":5,"purpose":"Represents a user's profile information, subscription plan, roles, recent activity and UI-friendly computed properties.","fields":[{"name":"Email","type":"string","required":true,"line":7,"description":"User email address (non-nullable, default empty string)"},{"name":"AITokensUsed","type":"int","required":true,"line":8,"description":"Count of AI tokens the user has consumed"},{"name":"TenantId","type":"Guid","required":true,"line":9,"description":"Tenant identifier for multi-tenant context"},{"name":"Plan","type":"SubscriptionPlanDto","required":true,"line":14,"description":"Relational data describing the user's subscription plan (initialized with new())"},{"name":"AverageQuizScore","type":"int","required":true,"line":16,"description":"Average score across quizzes"},{"name":"LastReadBook","type":"LastReadBookDto?","required":false,"line":21,"description":"Optional summary of the last-read book"},{"name":"Roles","type":"string[]","required":true,"line":23,"description":"Array of role names (default empty array)"},{"name":"CurrentPlan","type":"string (computed)","required":true,"line":26,"description":"Computed UI helper: plan name or default from PlanConstants"},{"name":"AITokenLimit","type":"int (computed)","required":true,"line":27,"description":"Computed UI helper: token limit from Plan or default"},{"name":"LastReadBookTitle","type":"string (computed)","required":true,"line":28,"description":"Computed UI helper: last read book title or default activity label"}]},{"name":"LastReadBookDto","kind":"dto","line":31,"purpose":"Carries a compact summary of the last book the user was reading, for display in UI and profile pages.","fields":[{"name":"Id","type":"Guid","required":true,"line":33,"description":"Book identifier"},{"name":"Title","type":"string","required":true,"line":34,"description":"Book title (non-nullable, default empty string)"},{"name":"Author","type":"AuthorDto","required":true,"line":35,"description":"Author information (initialized with new())"},{"name":"CoverUrl","type":"string?","required":false,"line":36,"description":"Optional URL to the book cover image"},{"name":"Progress","type":"double","required":true,"line":37,"description":"Reading progress (percentage or fraction)"},{"name":"LastChapter","type":"string?","required":false,"line":38,"description":"Optional title of the last-read chapter"},{"name":"LastChapterIndex","type":"int","required":true,"line":39,"description":"Index of the last-read chapter"},{"name":"Description","type":"string?","required":false,"line":40,"description":"Optional short description of the book"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Constants.PlanConstants (referenced)","SubscriptionPlanDto (referenced, external file)","AuthorDto (referenced, external file)"],"patterns":["DTO"],"domainConcepts":["User","SubscriptionPlan","Book","Author","Tenant"],"keyDetails":"Pure DTO definitions with computed helper properties for UI compatibility; no runtime logic, branches, or external calls in this file.","orchestrationMethods":[],"typedContracts":[{"name":"UserProfileDto","kind":"dto","line":5,"fieldCount":10,"evidencePaths":["NexusReader.Application/DTOs/User/UserProfileDto.cs"]},{"name":"LastReadBookDto","kind":"dto","line":31,"fieldCount":8,"evidencePaths":["NexusReader.Application/DTOs/User/UserProfileDto.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"UserProfileDto","line":5,"summary":"dto with 10 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/DTOs/User/UserProfileDto.cs"]},{"kind":"typed-contract","label":"LastReadBookDto","line":31,"summary":"dto with 8 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/DTOs/User/UserProfileDto.cs"]}],"cacheMetadata":{"schemaVersion":2,"analysisVersion":"2026-05-23.cache-v1","contentChecksum":"ca942958e4fffa4702e700f31ee1ca8a0954eb94d88265dfba123add50b20108","sourceByteSize":1422,"analyzedAt":"2026-05-23T16:17:26.892Z","technology":"dotnet"}}