Files
household-bot/packages/ports/src/anonymous-feedback.ts

55 lines
1.5 KiB
TypeScript

import type { Instant } from '@household/domain'
export type AnonymousFeedbackModerationStatus = 'accepted' | 'posted' | 'rejected' | 'failed'
export type AnonymousFeedbackRejectionReason =
| 'not_member'
| 'too_short'
| 'too_long'
| 'cooldown'
| 'daily_cap'
| 'blocklisted'
export interface AnonymousFeedbackMemberRecord {
id: string
telegramUserId: string
displayName: string
}
export interface AnonymousFeedbackRateLimitSnapshot {
acceptedCountSince: number
earliestAcceptedAtSince: Instant | null
lastAcceptedAt: Instant | null
}
export interface AnonymousFeedbackSubmissionRecord {
id: string
moderationStatus: AnonymousFeedbackModerationStatus
}
export interface AnonymousFeedbackRepository {
getMemberByTelegramUserId(telegramUserId: string): Promise<AnonymousFeedbackMemberRecord | null>
getRateLimitSnapshot(
memberId: string,
acceptedSince: Instant
): Promise<AnonymousFeedbackRateLimitSnapshot>
createSubmission(input: {
submittedByMemberId: string
rawText: string
sanitizedText: string | null
moderationStatus: AnonymousFeedbackModerationStatus
moderationReason: string | null
telegramChatId: string
telegramMessageId: string
telegramUpdateId: string
}): Promise<{ submission: AnonymousFeedbackSubmissionRecord; duplicate: boolean }>
markPosted(input: {
submissionId: string
postedChatId: string
postedThreadId: string
postedMessageId: string
postedAt: Instant
}): Promise<void>
markFailed(submissionId: string, failureReason: string): Promise<void>
}