mirror of
https://github.com/whekin/household-bot.git
synced 2026-03-31 19:14:03 +00:00
55 lines
1.5 KiB
TypeScript
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>
|
|
}
|