-
-
Notifications
You must be signed in to change notification settings - Fork 1
Add comprehensive interface inheritance hierarchy for Publisher, Project, and User entities #41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 5 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
1055d90
Initial plan
Copilot b977131
Initial setup: Update target framework to .NET 8.0 for compatibility
Copilot 13f87a2
Add comprehensive interface graph inventory for Publisher, Project, a…
Copilot f7c4555
Merge branch 'main' into copilot/fix-40
Arlodotexe 20d9840
Address PR review feedback: fix TFM, move docs, remove dependent libr…
Copilot 513e20f
Address review feedback: create comprehensive interface graphs for ea…
Copilot 806f359
Fix interface hierarchy graphs: entity interfaces at root, IHasId at …
Copilot db9e910
Create strict inheritance hierarchies without reference graph details
Copilot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,260 @@ | ||
| # Interface Graph Inventory for WindowsAppCommunity.Sdk | ||
|
|
||
| This document provides a comprehensive inventory of the interface hierarchy for the three main entities in the WindowsAppCommunity.Sdk: **Publisher**, **Project**, and **User**. This mapping helps developers understand the type relationships and data access patterns. | ||
|
|
||
| ## Core Entity Interfaces | ||
|
|
||
| ### IReadOnlyUser | ||
| ``` | ||
| IReadOnlyUser : IReadOnlyEntity, IReadOnlyPublisherRoleCollection, IReadOnlyProjectRoleCollection, IHasId | ||
| ``` | ||
|
|
||
| **Purpose**: Represents a user with access to their entity data, publisher roles, and project roles. | ||
|
|
||
| **Key Properties**: | ||
| - Inherits all properties from `IReadOnlyEntity` (name, description, connections, links, images) | ||
| - Access to publisher roles via `IReadOnlyPublisherRoleCollection` | ||
| - Access to project roles via `IReadOnlyProjectRoleCollection` | ||
|
|
||
| ### IReadOnlyPublisher | ||
| ``` | ||
| IReadOnlyPublisher : IReadOnlyPublisher<IReadOnlyPublisherRoleCollection> | ||
|
|
||
| IReadOnlyPublisher<TPublisherCollection> : IReadOnlyEntity, IReadOnlyAccentColor, IReadOnlyUserRoleCollection, IReadOnlyProjectCollection, IHasId | ||
| where TPublisherCollection : IReadOnlyPublisherCollection<IReadOnlyPublisherRole> | ||
| ``` | ||
|
|
||
| **Purpose**: Represents a publisher entity with accent color, user roles, projects, and hierarchical publisher relationships. | ||
|
|
||
| **Key Properties**: | ||
| - Inherits all properties from `IReadOnlyEntity` (name, description, connections, links, images) | ||
| - `AccentColor` via `IReadOnlyAccentColor` | ||
| - User roles via `IReadOnlyUserRoleCollection` | ||
| - Projects via `IReadOnlyProjectCollection` | ||
| - `ParentPublishers` and `ChildPublishers` (hierarchical relationships) | ||
|
|
||
| ### IReadOnlyProject | ||
| ``` | ||
| IReadOnlyProject : IReadOnlyProject<IReadOnlyProjectCollection> | ||
|
|
||
| IReadOnlyProject<TDependencyCollection> : IReadOnlyEntity, IReadOnlyImagesCollection, IReadOnlyUserRoleCollection, IReadOnlyAccentColor, IReadOnlyFeaturesCollection, IHasId | ||
| where TDependencyCollection : IReadOnlyProjectCollection<IReadOnlyProject> | ||
| ``` | ||
|
|
||
| **Purpose**: Represents a project entity with dependencies, features, accent color, users, and images. | ||
|
|
||
| **Key Properties**: | ||
| - Inherits all properties from `IReadOnlyEntity` (name, description, connections, links, images) | ||
| - Additional images via `IReadOnlyImagesCollection` | ||
| - User roles via `IReadOnlyUserRoleCollection` | ||
| - `AccentColor` via `IReadOnlyAccentColor` | ||
| - `Features` via `IReadOnlyFeaturesCollection` | ||
| - `Dependencies` (other projects this project depends on) | ||
| - `Category` (string property for app store categorization) | ||
| - `GetPublisherAsync()` method to retrieve associated publisher | ||
|
|
||
| ## Supporting Interface Hierarchy | ||
|
|
||
| ### Base Entity Interface | ||
| ``` | ||
| IReadOnlyEntity : IReadOnlyConnectionsCollection, IReadOnlyLinksCollection, IReadOnlyImagesCollection, IHasId | ||
| ``` | ||
|
|
||
| **Properties**: | ||
| - `Name` (string) | ||
| - `Description` (string, supports markdown) | ||
| - `ExtendedDescription` (string, supports markdown) | ||
| - `ForgetMe` (bool?) | ||
| - `IsUnlisted` (bool) | ||
|
|
||
| **Events**: | ||
| - `NameUpdated` | ||
| - `DescriptionUpdated` | ||
| - `ExtendedDescriptionUpdated` | ||
| - `ForgetMeUpdated` | ||
| - `IsUnlistedUpdated` | ||
|
|
||
| ### Collection Interfaces | ||
|
|
||
| #### IReadOnlyConnectionsCollection | ||
| ``` | ||
| IReadOnlyConnectionsCollection : IHasId | ||
| ``` | ||
| - `GetConnectionsAsync()` → `IAsyncEnumerable<IReadOnlyConnection>` | ||
| - Events: `ConnectionsAdded`, `ConnectionsRemoved` | ||
|
|
||
| #### IReadOnlyLinksCollection | ||
| ``` | ||
| IReadOnlyLinksCollection : IHasId | ||
| ``` | ||
| - `Links` (Link[] property) | ||
| - Events: `LinksAdded`, `LinksRemoved` | ||
|
|
||
| #### IReadOnlyImagesCollection | ||
| ``` | ||
| IReadOnlyImagesCollection : IHasId | ||
| ``` | ||
| - `GetImageFilesAsync()` → `IAsyncEnumerable<IFile>` | ||
| - Events: `ImagesAdded`, `ImagesRemoved` | ||
|
|
||
| #### IReadOnlyAccentColor | ||
| ``` | ||
| IReadOnlyAccentColor : IHasId | ||
| ``` | ||
| - `AccentColor` (string?) | ||
| - Events: `AccentColorUpdated` | ||
|
|
||
| #### IReadOnlyFeaturesCollection | ||
| ``` | ||
| IReadOnlyFeaturesCollection : IHasId | ||
| ``` | ||
| - `Features` (string[]) | ||
| - Events: `FeaturesAdded`, `FeaturesRemoved` | ||
|
|
||
| ### Role-Based Collections | ||
|
|
||
| #### IReadOnlyUserRoleCollection | ||
| ``` | ||
| IReadOnlyUserRoleCollection : IReadOnlyUserCollection<IReadOnlyUserRole> | ||
| IReadOnlyUserCollection<TUser> : IHasId where TUser : IReadOnlyUser | ||
| ``` | ||
| - `GetUsersAsync()` → `IAsyncEnumerable<TUser>` | ||
|
|
||
| #### IReadOnlyProjectRoleCollection | ||
| ``` | ||
| IReadOnlyProjectRoleCollection : IReadOnlyProjectCollection<IReadOnlyProjectRole> | ||
| ``` | ||
|
|
||
| #### IReadOnlyPublisherRoleCollection | ||
| ``` | ||
| IReadOnlyPublisherRoleCollection : IReadOnlyPublisherCollection<IReadOnlyPublisherRole> | ||
| ``` | ||
|
|
||
| #### IReadOnlyProjectCollection | ||
| ``` | ||
| IReadOnlyProjectCollection<TProject> : IHasId where TProject : IReadOnlyProject | ||
| ``` | ||
| - `GetProjectsAsync()` → `IAsyncEnumerable<TProject>` | ||
| - Events: `ProjectsAdded`, `ProjectsRemoved` | ||
|
|
||
| #### IReadOnlyPublisherCollection | ||
| ``` | ||
| IReadOnlyPublisherCollection<TPublisher> : IHasId where TPublisher : IReadOnlyPublisher | ||
| ``` | ||
| - `GetPublishersAsync()` → `IAsyncEnumerable<TPublisher>` | ||
| - Events: `PublishersAdded`, `PublishersRemoved` | ||
|
|
||
| ### Role Interfaces | ||
|
|
||
| #### IReadOnlyUserRole | ||
| ``` | ||
| IReadOnlyUserRole : IReadOnlyUser | ||
| ``` | ||
| - `Role` (Role property) | ||
|
|
||
| #### IReadOnlyProjectRole | ||
| ``` | ||
| IReadOnlyProjectRole : IReadOnlyProject | ||
| ``` | ||
| - `Role` (Role property) | ||
|
|
||
| #### IReadOnlyPublisherRole | ||
| ``` | ||
| IReadOnlyPublisherRole : IReadOnlyPublisher | ||
| ``` | ||
| - `Role` (Role property) | ||
|
|
||
| ## Supporting Data Classes | ||
|
|
||
| ### Role | ||
| ```csharp | ||
| public class Role | ||
| { | ||
| public required string Id { get; init; } | ||
| public required string Name { get; init; } | ||
| public required string Description { get; init; } | ||
| } | ||
| ``` | ||
|
|
||
| ### Link | ||
| ```csharp | ||
| public class Link : IStorable | ||
| { | ||
| public required string Id { get; init; } | ||
| public required string Url { get; set; } | ||
| public required string Name { get; set; } | ||
| public required string Description { get; set; } | ||
| } | ||
| ``` | ||
|
|
||
| ### IReadOnlyConnection | ||
| ```csharp | ||
| public interface IReadOnlyConnection | ||
| { | ||
| string Id { get; } | ||
| Task<string> GetValueAsync(CancellationToken cancellationToken = default); | ||
| event EventHandler<string>? ValueUpdated; | ||
| } | ||
| ``` | ||
|
|
||
| ## Data Access Patterns | ||
|
|
||
| ### For User Profiles | ||
| 1. **Basic Info**: `IReadOnlyEntity` → name, description, extendedDescription | ||
| 2. **Visual Elements**: `IReadOnlyImagesCollection` → profile images | ||
| 3. **External Links**: `IReadOnlyLinksCollection` → social/external profiles | ||
| 4. **App Connections**: `IReadOnlyConnectionsCollection` → connected applications | ||
| 5. **Project Involvement**: `IReadOnlyProjectRoleCollection` → projects and roles | ||
| 6. **Publisher Involvement**: `IReadOnlyPublisherRoleCollection` → publishers and roles | ||
|
|
||
| ### For Publisher Profiles | ||
| 1. **Basic Info**: `IReadOnlyEntity` → name, description, extendedDescription | ||
| 2. **Branding**: `IReadOnlyAccentColor` → brand color | ||
| 3. **Visual Elements**: `IReadOnlyImagesCollection` → logos, banners | ||
| 4. **External Links**: `IReadOnlyLinksCollection` → websites, social media | ||
| 5. **App Connections**: `IReadOnlyConnectionsCollection` → connected applications | ||
| 6. **Team Members**: `IReadOnlyUserRoleCollection` → users and their roles | ||
| 7. **Published Projects**: `IReadOnlyProjectCollection` → all projects under publisher | ||
| 8. **Publisher Hierarchy**: `ParentPublishers`, `ChildPublishers` → organizational structure | ||
|
|
||
| ### For Project Profiles | ||
| 1. **Basic Info**: `IReadOnlyEntity` → name, description, extendedDescription | ||
| 2. **Categorization**: `Category` → app store category | ||
| 3. **Branding**: `IReadOnlyAccentColor` → project theme color | ||
| 4. **Visual Elements**: `IReadOnlyImagesCollection` → screenshots, icons | ||
| 5. **External Links**: `IReadOnlyLinksCollection` → project website, documentation | ||
| 6. **App Connections**: `IReadOnlyConnectionsCollection` → integrations | ||
| 7. **Features**: `IReadOnlyFeaturesCollection` → feature list | ||
| 8. **Team Members**: `IReadOnlyUserRoleCollection` → contributors and roles | ||
| 9. **Dependencies**: `Dependencies` → other projects this depends on | ||
| 10. **Publisher**: `GetPublisherAsync()` → owning publisher | ||
|
|
||
| ## Interface Dependency Graph | ||
|
|
||
| ``` | ||
| IHasId (base interface with Id property) | ||
| │ | ||
| ├── IReadOnlyEntity | ||
| │ ├── IReadOnlyConnectionsCollection | ||
| │ ├── IReadOnlyLinksCollection | ||
| │ └── IReadOnlyImagesCollection | ||
| │ | ||
| ├── IReadOnlyAccentColor | ||
| │ | ||
| ├── IReadOnlyFeaturesCollection | ||
| │ | ||
| ├── Collection Interfaces: | ||
| │ ├── IReadOnlyUserCollection<T> | ||
| │ │ └── IReadOnlyUserRoleCollection | ||
| │ ├── IReadOnlyProjectCollection<T> | ||
| │ │ └── IReadOnlyProjectRoleCollection | ||
| │ └── IReadOnlyPublisherCollection<T> | ||
| │ └── IReadOnlyPublisherRoleCollection | ||
| │ | ||
| └── Main Entity Interfaces: | ||
| ├── IReadOnlyUser : IReadOnlyEntity, IReadOnlyPublisherRoleCollection, IReadOnlyProjectRoleCollection | ||
| ├── IReadOnlyProject<T> : IReadOnlyEntity, IReadOnlyImagesCollection, IReadOnlyUserRoleCollection, IReadOnlyAccentColor, IReadOnlyFeaturesCollection | ||
| └── IReadOnlyPublisher<T> : IReadOnlyEntity, IReadOnlyAccentColor, IReadOnlyUserRoleCollection, IReadOnlyProjectCollection | ||
| ``` | ||
|
|
||
| This interface inventory provides a comprehensive reference for understanding the type hierarchy and relationships within the WindowsAppCommunity.Sdk. | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This whole section can be removed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removed the entire "Data Access Patterns" section as requested in commit 513e20f.