35 lines
1.3 KiB
Dart
35 lines
1.3 KiB
Dart
import 'package:drift/drift.dart';
|
|
|
|
/// On-device tone / style samples (tech-design.md §2 — never upload the full corpus).
|
|
class ToneSamples extends Table {
|
|
TextColumn get id => text()();
|
|
TextColumn get sampleText => text()();
|
|
IntColumn get createdAtMs => integer()();
|
|
IntColumn get sortOrder => integer()();
|
|
|
|
@override
|
|
Set<Column<Object>> get primaryKey => {id};
|
|
}
|
|
|
|
/// Small key/value bag for onboarding flags and local prefs that must stay encrypted.
|
|
class LocalKv extends Table {
|
|
TextColumn get key => text()();
|
|
TextColumn get value => text()();
|
|
|
|
@override
|
|
Set<Column<Object>> get primaryKey => {key};
|
|
}
|
|
|
|
/// 답장 마감 알림(roadmap.md §2.7-F) — 대화방별 "이따 답장" 스누즈 시각. 다른 사람에게는
|
|
/// 절대 보이지 않고 서버에도 올라가지 않는 순수 온디바이스 상태(개인 전용 리마인드,
|
|
/// AGENTS.md "Tone/style learning: on-device first" 원칙과 동일한 이유).
|
|
class ConversationSnoozes extends Table {
|
|
/// `Conversation.id`를 문자열로 저장 (drift 기본 타입 일관성을 위해 다른 테이블과
|
|
/// 마찬가지로 text 기본키를 사용).
|
|
TextColumn get conversationId => text()();
|
|
IntColumn get snoozedUntilMs => integer()();
|
|
|
|
@override
|
|
Set<Column<Object>> get primaryKey => {conversationId};
|
|
}
|