File size: 1,986 Bytes
1187856
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { getDb } from "@/lib/db";
import { all } from "@/lib/db/helpers";
import type { Dataset, UploadRequirement, SubmissionFileType } from "@/lib/db/schema";
import { contentValue, hasLocalizedText, localized } from "@/lib/i18n";

export function getDatasetsWithVersions(): {
  datasets: Dataset[];
  uploadRequirements: UploadRequirement[];
  fileTypes: SubmissionFileType[];
} {
  const db = getDb();
  const uploadRequirements = all<UploadRequirement>(
    db.prepare("SELECT * FROM upload_requirements ORDER BY sort_order, id")
  )
    .map((row) => ({
      ...row,
      titleText: localized(row.title_en || row.title, row.title_zh),
      bodyText: localized(row.body_en || row.body, row.body_zh),
    }))
    .filter((row) => hasLocalizedText(row.titleText) || hasLocalizedText(row.bodyText));
  const fileTypes = all<SubmissionFileType>(
    db.prepare("SELECT * FROM submission_file_types ORDER BY id")
  )
    .map((row) => ({
      ...row,
      accepted_extensions: contentValue(row.accepted_extensions),
      labelText: localized(row.label_en || row.label, row.label_zh),
      descriptionText: localized(row.description_en || row.description || "", row.description_zh),
    }))
    .filter(
      (row) =>
        hasLocalizedText(row.labelText) ||
        hasLocalizedText(row.descriptionText) ||
        Boolean(row.accepted_extensions)
    );
  return {
    datasets: all<Dataset>(db.prepare(
      `SELECT d.*, v.version_label, v.release_date, v.download_url, v.checksum, v.notes AS version_notes
       FROM datasets d LEFT JOIN dataset_versions v ON v.dataset_id = d.id AND v.is_latest = 1 ORDER BY d.id`
    )),
    uploadRequirements,
    fileTypes,
  };
}

export function getDatasets(): Dataset[] {
  return all<Dataset>(getDb().prepare(
    `SELECT d.*, v.version_label, v.release_date, v.download_url, v.checksum, v.notes AS version_notes
     FROM datasets d LEFT JOIN dataset_versions v ON v.dataset_id = d.id AND v.is_latest = 1 ORDER BY d.id`
  ));
}