35 lines
950 B
Plaintext
35 lines
950 B
Plaintext
import 'package:lensai/features/topics/data/database/drift/converters/color.dart';
|
|
import 'package:lensai/features/topics/data/database/drift/converters/uri.dart';
|
|
import 'package:lensai/features/topics/data/models/topic_data.dart';
|
|
|
|
CREATE TABLE topic (
|
|
id TEXT PRIMARY KEY NOT NULL,
|
|
name TEXT,
|
|
color INTEGER NOT NULL MAPPED BY `const ColorConverter()`
|
|
) WITH TopicData;
|
|
|
|
CREATE TABLE tab (
|
|
id TEXT PRIMARY KEY NOT NULL,
|
|
topic_id TEXT REFERENCES topic (id) ON DELETE CASCADE,
|
|
timestamp DATETIME NOT NULL,
|
|
url TEXT NOT NULL MAPPED BY `const UriConverter()`,
|
|
title TEXT,
|
|
screenshot BLOB
|
|
);
|
|
|
|
topicsWithCount WITH TopicDataWithCount:
|
|
SELECT
|
|
topic.*,
|
|
tab_agg.tab_count
|
|
FROM topic
|
|
LEFT JOIN (
|
|
SELECT
|
|
topic_id,
|
|
COUNT(*) AS tab_count,
|
|
MAX(timestamp) AS last_updated
|
|
FROM tab
|
|
GROUP BY topic_id
|
|
) AS tab_agg ON topic.id = tab_agg.topic_id
|
|
ORDER BY tab_agg.last_updated DESC NULLS FIRST;
|
|
|