Workspace project added
This commit is contained in:
parent
d89cac3c25
commit
55eaf3e789
@ -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