initLessons function

Future<void> initLessons(
  1. SharedDatabase database
)

Implementation

Future<void> initLessons(SharedDatabase database) async {
  String content = await AssetsUtils.loadTextAsset(
    "statics/init-data/lessons.txt",
  );

  List<BookData> books = await database.select(database.book).get();
  Map<String, int> bookMap = {for (var v in books) v.code: v.id};
  //
  List<String> lines = content.split("\n");
  for (String li in lines) {
    String line = li.trim();
    if (line.startsWith("#") || line.isEmpty) {
      continue;
    }
    List<String> values = line.split(";");
    //
    // @line: "BookCode , LessonTitle, SeqNum, Locked, Published, Description"
    //
    String bookCode = values[0].trim();
    String title = values[1].trim();
    int seqNum = int.parse(values[2].trim());
    bool locked = bool.parse(values[3].trim());
    bool published = bool.parse(values[4].trim());
    String description = values[5].trim();
    String imageName = values[6].trim();

    await database
        .into(database.lesson)
        .insert(
          LessonCompanion.insert(
            title: title,
            titleInEnglish: title,
            seqNum: seqNum,
            locked: locked,
            published: published,
            publishDate: Value.absentIfNull(DateTime.now()),
            imagePath: Value("/static/images/lesson/$imageName"),
            bookId: bookMap[bookCode]!,
            description: Value.absentIfNull(description),
            note: const Value.absent(),
          ),
        );
  }
}