feat(backend): add problem/need submission module with workflow and events

Add submission CRUD with pagination and role scoping, challenge/location binding, automatic keyword extraction, a validated status workflow, and domain events for matchmaking and notifications. Create a problem record together with each submission.
This commit is contained in:
Rafał Tyński
2026-10-04 02:22:00 +02:00
parent 58cc2e4096
commit cadc321d96
12 changed files with 633 additions and 0 deletions
@@ -0,0 +1,13 @@
namespace TarninaHub.Application.Abstractions;
public sealed record SubmissionEvent(
string Type,
string SubmissionId,
string? ActorId,
string Status,
DateTimeOffset At);
public interface ISubmissionEventPublisher
{
Task PublishAsync(SubmissionEvent submissionEvent, CancellationToken cancellationToken);
}
@@ -0,0 +1,28 @@
using TarninaHub.Application.Dtos;
namespace TarninaHub.Application.Abstractions;
public interface ISubmissionService
{
Task<SubmissionResponse> CreateAsync(
string authorId,
CreateSubmissionRequest request,
CancellationToken cancellationToken);
Task<PagedResponse<SubmissionResponse>> ListAsync(
string viewerId,
bool isStaff,
string? status,
int page,
int pageSize,
CancellationToken cancellationToken);
Task<SubmissionResponse?> GetAsync(
string submissionId,
CancellationToken cancellationToken);
Task<SubmissionResponse?> UpdateStatusAsync(
string submissionId,
string newStatus,
CancellationToken cancellationToken);
}