Compare commits
	
		
			1 Commits
		
	
	
		
			55eaf3e789
			...
			c6ef3b184c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					c6ef3b184c | 
@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					<Project Sdk="Microsoft.NET.Sdk">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <PropertyGroup>
 | 
				
			||||||
 | 
					    <TargetFramework>net7.0</TargetFramework>
 | 
				
			||||||
 | 
					    <ImplicitUsings>enable</ImplicitUsings>
 | 
				
			||||||
 | 
					    <Nullable>enable</Nullable>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <Folder Include="Events\" />
 | 
				
			||||||
 | 
					    <Folder Include="Documents\" />
 | 
				
			||||||
 | 
					    <Folder Include="Notifications\" />
 | 
				
			||||||
 | 
					    <Folder Include="Tasks\" />
 | 
				
			||||||
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <ProjectReference Include="..\..\..\connected.framework\src\Connected.Entities\Connected.Entities.csproj" />
 | 
				
			||||||
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
							
								
								
									
										114
									
								
								src/Connected.Common.Workspace/IWorkspaceEntity.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								src/Connected.Common.Workspace/IWorkspaceEntity.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					using Connected.Common.Workspace.Messaging;
 | 
				
			||||||
 | 
					using Connected.Entities.Consistency;
 | 
				
			||||||
 | 
					using Connected.Security.Identity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Connected.Common.Workspace;
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Specifies the read state of the <see cref="IWorkspaceEntity"/> entity.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					public enum ReadStatus
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The entity has not been read by the <see cref="IWorkspaceEntity.IdentityId"/>.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						New = 0,
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The entity has been read by the <see cref="IWorkspaceEntity.IdentityId"/>.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						Read = 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Specifies what kind of actions can be performed by the identity on each <see cref="IWorkspaceEntity"/> entity.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					[Flags]
 | 
				
			||||||
 | 
					public enum IdentityVerbs
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The entity is read only. Identity cannot perform any actions on it 
 | 
				
			||||||
 | 
						/// except reading.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						ReadOnly = 0,
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The entity can be deleted from the workspace by the identity.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						AllowDelete = 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Represents a base entity for all workspace related entities.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					/// <remarks>
 | 
				
			||||||
 | 
					/// Digital Workspace offers many different services serving different purposes. Each service introduces
 | 
				
			||||||
 | 
					/// its own set of entities. All top level entities inherits from this entity, for example <see cref="IMessage"/>.
 | 
				
			||||||
 | 
					/// </remarks>
 | 
				
			||||||
 | 
					public interface IWorkspaceEntity : IConsistentEntity<long>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The type of identity to which workspace entity belongs to (like Recipient).
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						/// <remarks>
 | 
				
			||||||
 | 
						/// The most common type of the identity entity is <see cref="IUser"/>.
 | 
				
			||||||
 | 
						/// </remarks>
 | 
				
			||||||
 | 
						string IdentityEntity { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The id of the identity to which workspace entity belongs. This could be the id of the user,
 | 
				
			||||||
 | 
						/// device, organization unit or any other entity id. 
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						string IdentityId { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The date and time the workspace entity has been created.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						/// <remarks>
 | 
				
			||||||
 | 
						/// This value can represent the value when the origin entity has been created or when
 | 
				
			||||||
 | 
						/// the workspace entity has been created. This value is specific to the service implementation.
 | 
				
			||||||
 | 
						/// </remarks>
 | 
				
			||||||
 | 
						DateTimeOffset Created { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The date and time the workspace entity expires.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						/// <remarks>
 | 
				
			||||||
 | 
						/// Expired workspace entities are automatically deleted from the system. If this value is <c>null</c>,
 | 
				
			||||||
 | 
						/// workspace entity never expires.
 | 
				
			||||||
 | 
						/// </remarks>
 | 
				
			||||||
 | 
						DateTimeOffset? Expires { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The title of the entity.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						/// <remarks>
 | 
				
			||||||
 | 
						/// This should be as short as possible so user can quickly recognize the nature of the entity.
 | 
				
			||||||
 | 
						/// </remarks>
 | 
				
			||||||
 | 
						string Title { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The short description of the entity. Can be <c>null</c>.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						string? Description { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The read status of the entity. This serves primary for a UI purpose to enable visual feedback
 | 
				
			||||||
 | 
						/// to the user.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						ReadStatus Status { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The domain to which this entity belongs.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						/// <remarks>
 | 
				
			||||||
 | 
						/// Each workspace entity should have one and only one domain to which it originates.
 | 
				
			||||||
 | 
						/// </remarks>
 | 
				
			||||||
 | 
						string Domain { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// Zero or more tags that represents additional meta data of the workspace entity.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						string? Tags { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The entity which triggered this workspace entity to be created. Can be <c>null</c> if it was
 | 
				
			||||||
 | 
						/// automatically generated by the underlying system.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						string? AuthorEntity { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The id of the entity which created this workspace entity. Can be <c>null</c> if it was
 | 
				
			||||||
 | 
						/// automatically generated by the underlying system.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						string? AuthorId { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// Actions that can be performed by the identity on the workspace entity.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						IdentityVerbs Verbs { get; init; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										22
									
								
								src/Connected.Common.Workspace/Identities/IIdentity.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/Connected.Common.Workspace/Identities/IIdentity.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					using Connected.Data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Connected.Common.Workspace.Identities;
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Represents the workspace identity.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					/// <remarks>
 | 
				
			||||||
 | 
					/// Workspace supports identities through the <see cref="IIdentityService"/>. There could
 | 
				
			||||||
 | 
					/// be any number of different identities, such as users or devices which are provided via
 | 
				
			||||||
 | 
					/// different identity providers.
 | 
				
			||||||
 | 
					/// </remarks>
 | 
				
			||||||
 | 
					public interface IIdentity : IPrimaryKey<string>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The display name of the identity. This should be short and descriptive.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						string DisplayName { get; init; }
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// The Url of the identity's avatar if it is supported.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						string Avatar { get; init; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					using System.Collections.Immutable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Connected.Common.Workspace.Identities;
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// The provider service used for providing identity descriptors.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					public interface IIdentityService
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/// <summary>
 | 
				
			||||||
 | 
						/// Queries identities for the specified set of entity types and their ids.
 | 
				
			||||||
 | 
						/// </summary>
 | 
				
			||||||
 | 
						/// <param name="args">The arguments containing entity types and their ids.</param>
 | 
				
			||||||
 | 
						/// <returns>The list of identities that matches the specified criteria.</returns>
 | 
				
			||||||
 | 
						Task<ImmutableList<IIdentity>> Query(QueryIdentitiesArgs args);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					using Connected.Annotations;
 | 
				
			||||||
 | 
					using Connected.ServiceModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Connected.Common.Workspace.Identities;
 | 
				
			||||||
 | 
					public sealed class QueryIdentitiesArgs : QueryArgs
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						[NonDefault]
 | 
				
			||||||
 | 
						public Dictionary<string, string> Items { get; set; } = default!;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										5
									
								
								src/Connected.Common.Workspace/Messaging/IMessage.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/Connected.Common.Workspace/Messaging/IMessage.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					namespace Connected.Common.Workspace.Messaging;
 | 
				
			||||||
 | 
					public interface IMessage : IWorkspaceEntity
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										15
									
								
								src/Connected.Common.Workspace/Messaging/IMessagesService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/Connected.Common.Workspace/Messaging/IMessagesService.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					using System.Collections.Immutable;
 | 
				
			||||||
 | 
					using Connected.Notifications;
 | 
				
			||||||
 | 
					using Connected.ServiceModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Connected.Common.Workspace.Messaging;
 | 
				
			||||||
 | 
					public interface IMessagesService : IServiceNotifications<long>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Task<ImmutableList<IMessage>> Query(QueryMessageArgs args);
 | 
				
			||||||
 | 
						Task<IMessage?> Select(PrimaryKeyArgs<long> args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Task<long> Insert(InsertMessageArgs args);
 | 
				
			||||||
 | 
						Task Update(UpdateMessageArgs args);
 | 
				
			||||||
 | 
						Task Patch(PatchArgs<long> args);
 | 
				
			||||||
 | 
						Task Delete(PrimaryKeyArgs<long> args);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										21
									
								
								src/Connected.Common.Workspace/Messaging/MessageArgs.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/Connected.Common.Workspace/Messaging/MessageArgs.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					using System.ComponentModel.DataAnnotations;
 | 
				
			||||||
 | 
					using Connected.ServiceModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Connected.Common.Workspace.Messaging;
 | 
				
			||||||
 | 
					public sealed class QueryMessageArgs : QueryArgs
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						[Required, MaxLength(128)]
 | 
				
			||||||
 | 
						public string IdentityEntity { get; set; } = default!;
 | 
				
			||||||
 | 
						[Required, MaxLength(128)]
 | 
				
			||||||
 | 
						public string IdentityId { get; set; } = default!;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public sealed class InsertMessageArgs : InsertWorkspaceArgs
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public sealed class UpdateMessageArgs : UpdateWorkspaceArgs
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										67
									
								
								src/Connected.Common.Workspace/WorkspaceArgs.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								src/Connected.Common.Workspace/WorkspaceArgs.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					using System.ComponentModel.DataAnnotations;
 | 
				
			||||||
 | 
					using Connected.ServiceModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Connected.Common.Workspace;
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// The base class for the arguments used when inserting one of the
 | 
				
			||||||
 | 
					/// implementations of the <see cref="IWorkspaceEntity"/> entity.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					public abstract class InsertWorkspaceArgs : Dto
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.IdentityEntity"/>
 | 
				
			||||||
 | 
						[Required, MaxLength(128)]
 | 
				
			||||||
 | 
						public string IdentityEntity { get; set; } = default!;
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.IdentityId"/>
 | 
				
			||||||
 | 
						[Required, MaxLength(128)]
 | 
				
			||||||
 | 
						public string IdentityId { get; set; } = default!;
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Created"/>
 | 
				
			||||||
 | 
						public DateTimeOffset? Created { get; set; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Expires"/>
 | 
				
			||||||
 | 
						public DateTimeOffset? Expires { get; set; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Title"/>
 | 
				
			||||||
 | 
						[Required, MaxLength(128)]
 | 
				
			||||||
 | 
						public string Title { get; set; } = default!;
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Description"/>
 | 
				
			||||||
 | 
						[MaxLength(256)]
 | 
				
			||||||
 | 
						public string? Description { get; set; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Status"/>
 | 
				
			||||||
 | 
						public ReadStatus? Status { get; set; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Domain"/>
 | 
				
			||||||
 | 
						[Required, MaxLength(128)]
 | 
				
			||||||
 | 
						public string Domain { get; init; } = default!;
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Tags"/>
 | 
				
			||||||
 | 
						[MaxLength(256)]
 | 
				
			||||||
 | 
						public string? Tags { get; init; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.AuthorEntity"/>
 | 
				
			||||||
 | 
						[MaxLength(128)]
 | 
				
			||||||
 | 
						public string? AuthorEntity { get; init; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.AuthorId"/>
 | 
				
			||||||
 | 
						[MaxLength(128)]
 | 
				
			||||||
 | 
						public string? AuthorId { get; init; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Verbs"/>
 | 
				
			||||||
 | 
						public IdentityVerbs? Verbs { get; init; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// The base class used when updating one of the
 | 
				
			||||||
 | 
					/// implementations of the <see cref="IWorkspaceEntity"/> entity.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					public abstract class UpdateWorkspaceArgs : PrimaryKeyArgs<long>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Created"/>
 | 
				
			||||||
 | 
						public DateTimeOffset? Created { get; set; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Expires"/>
 | 
				
			||||||
 | 
						public DateTimeOffset? Expires { get; set; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Title"/>
 | 
				
			||||||
 | 
						[Required, MaxLength(128)]
 | 
				
			||||||
 | 
						public string Title { get; set; } = default!;
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Description"/>
 | 
				
			||||||
 | 
						[MaxLength(256)]
 | 
				
			||||||
 | 
						public string? Description { get; set; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Status"/>
 | 
				
			||||||
 | 
						public ReadStatus? Status { get; set; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Tags"/>
 | 
				
			||||||
 | 
						[MaxLength(256)]
 | 
				
			||||||
 | 
						public string? Tags { get; init; }
 | 
				
			||||||
 | 
						/// <inheritdoc cref="IWorkspaceEntity.Verbs"/>
 | 
				
			||||||
 | 
						public IdentityVerbs? Verbs { get; init; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user