Implement the idea creator and application generator: idea status workflow, social canvas card, grant call windows with 409 when closed, and an LLM-backed idea assistant with offline fallback.
60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
using TarninaHub.Application.Dtos;
|
|
|
|
namespace TarninaHub.Application.Abstractions;
|
|
|
|
public interface IIdeaService
|
|
{
|
|
Task<IdeaResponse> CreateAsync(string authorId, CreateIdeaRequest request, CancellationToken cancellationToken);
|
|
|
|
Task<IdeaResponse?> GetAsync(string ideaId, CancellationToken cancellationToken);
|
|
|
|
Task<IReadOnlyList<IdeaResponse>> ListForAuthorAsync(string authorId, CancellationToken cancellationToken);
|
|
|
|
Task<IdeaResponse?> UpdateAsync(string ideaId, UpdateIdeaRequest request, CancellationToken cancellationToken);
|
|
|
|
Task<IdeaCardResponse?> GetCardAsync(string ideaId, CancellationToken cancellationToken);
|
|
|
|
Task<IdeaCardResponse?> UpdateCardAsync(string ideaId, IdeaCardRequest request, CancellationToken cancellationToken);
|
|
}
|
|
|
|
public interface IIdeaAssistant
|
|
{
|
|
Task<IdeaAssistResponse?> AssistAsync(
|
|
string ideaId,
|
|
IdeaAssistRequest request,
|
|
CancellationToken cancellationToken);
|
|
}
|
|
|
|
public interface IGrantCallService
|
|
{
|
|
Task<IReadOnlyList<GrantCallResponse>> ListAsync(string? status, CancellationToken cancellationToken);
|
|
|
|
Task<GrantCallResponse?> GetAsync(string grantCallId, CancellationToken cancellationToken);
|
|
}
|
|
|
|
public enum CreateApplicationOutcome
|
|
{
|
|
Created,
|
|
CallNotFound,
|
|
CallNotOpen,
|
|
IdeaNotFound,
|
|
}
|
|
|
|
public sealed record CreateApplicationResult(
|
|
CreateApplicationOutcome Outcome,
|
|
ApplicationResponse? Application);
|
|
|
|
public interface IApplicationService
|
|
{
|
|
Task<CreateApplicationResult> CreateAsync(
|
|
string userId,
|
|
CreateApplicationRequest request,
|
|
CancellationToken cancellationToken);
|
|
|
|
Task<ApplicationResponse?> GetAsync(string applicationId, CancellationToken cancellationToken);
|
|
|
|
Task<IReadOnlyList<ApplicationResponse>> ListForAuthorAsync(
|
|
string authorId,
|
|
CancellationToken cancellationToken);
|
|
}
|