Skip to content

Instantly share code, notes, and snippets.

@pishguy
Last active December 22, 2019 07:59
Show Gist options
  • Select an option

  • Save pishguy/9cd69331c94b2082cd87dad49bc6162e to your computer and use it in GitHub Desktop.

Select an option

Save pishguy/9cd69331c94b2082cd87dad49bc6162e to your computer and use it in GitHub Desktop.

Revisions

  1. pishguy revised this gist Dec 22, 2019. 1 changed file with 0 additions and 3 deletions.
    3 changes: 0 additions & 3 deletions database
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,3 @@
    ```dart
    import 'package:moor_flutter/moor_flutter.dart';

    part 'database.g.dart';
    @@ -284,5 +283,3 @@ class ContactDao extends DatabaseAccessor<AppDb> with _$ContactDaoMixin {
    Future<int> insertContact(Insertable data) => into( contact ).insert( data );
    }


    ```
  2. pishguy revised this gist Dec 22, 2019. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions database
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,4 @@
    ```dart
    import 'package:moor_flutter/moor_flutter.dart';

    part 'database.g.dart';
    @@ -283,3 +284,5 @@ class ContactDao extends DatabaseAccessor<AppDb> with _$ContactDaoMixin {
    Future<int> insertContact(Insertable data) => into( contact ).insert( data );
    }


    ```
  3. pishguy revised this gist Dec 22, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion database
    Original file line number Diff line number Diff line change
    @@ -122,7 +122,7 @@ class AppDb extends _$AppDb {
    MigrationStrategy get migration =>
    MigrationStrategy(
    onUpgrade: (m, from, to) async {
    if(from > 1){
    if(from < 2){
    m.addColumn(user, user.profileCode);
    }
    },
  4. pishguy created this gist Dec 22, 2019.
    285 changes: 285 additions & 0 deletions database
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,285 @@
    import 'package:moor_flutter/moor_flutter.dart';

    part 'database.g.dart';

    class User extends Table {
    //@formatter:off
    IntColumn get id =>integer().autoIncrement()();
    IntColumn get active =>integer()();
    TextColumn get name =>text()();
    TextColumn get email =>text().nullable()();
    TextColumn get mobileNumber =>text().nullable()();
    TextColumn get profileCode =>text()();
    TextColumn get apiToken =>text()();
    TextColumn get supporter =>text().nullable()();
    TextColumn get createdAt =>text()();
    TextColumn get updatedAt =>text()();
    //@formatter:on
    }

    class Payment extends Table {
    //@formatter:off
    IntColumn get id=>integer().autoIncrement()();
    IntColumn get payment=>integer()();
    TextColumn get monthKey=>text()();
    TextColumn get price=>text()();
    TextColumn get createdAt=>text()();
    TextColumn get updatedAt=>text()();
    //@formatter:on
    }

    class Section extends Table {
    //@formatter:off
    IntColumn get id =>integer().autoIncrement()();
    TextColumn get title =>text()();
    TextColumn get description =>text()();
    TextColumn get price =>text().nullable()();
    TextColumn get monthKey =>text()();
    IntColumn get monthId =>integer()();
    TextColumn get createdAt =>text()();
    TextColumn get updatedAt =>text()();
    //@formatter:on
    }

    class Lesson extends Table {
    //@formatter:off
    IntColumn get id =>integer().autoIncrement()();
    TextColumn get parentMonthKey =>text()();
    TextColumn get title =>text()();
    TextColumn get content =>text()();
    TextColumn get lessonKey =>text()();
    //TextColumn get fileUrl=>text().nullable()();
    //TextColumn get filename=>text()();
    TextColumn get time =>text()();
    TextColumn get createdAt =>text()();
    TextColumn get updatedAt =>text()();
    //@formatter:on
    }

    class LessonFile extends Table {
    //@formatter:off
    IntColumn get id =>integer().autoIncrement()();
    TextColumn get parentLessonKey =>text()();
    TextColumn get title =>text()();
    IntColumn get level =>integer()();
    TextColumn get time =>text()();
    TextColumn get lessonFileKey =>text()();
    TextColumn get createdAt =>text()();
    TextColumn get updatedAt =>text()();
    //@formatter:on
    }

    class Contact extends Table {
    //@formatter:off
    IntColumn get id =>integer().autoIncrement()();
    TextColumn get mobileNumber =>text()();
    TextColumn get telephone =>text()();
    TextColumn get sellSupports =>text().nullable()();
    TextColumn get sectionSupporters =>text()();
    TextColumn get applicationSupport =>text()();
    TextColumn get website =>text()();
    TextColumn get code =>text()();
    TextColumn get channelLink =>text()();
    TextColumn get groupLink =>text()();
    TextColumn get gStandard1 =>text()();
    TextColumn get gStandard2 =>text()();
    TextColumn get gStandard3 =>text()();
    TextColumn get gStandard4 =>text()();
    TextColumn get gStandard5 =>text()();
    TextColumn get gStandard6 =>text()();
    TextColumn get gStandard7 =>text()();
    TextColumn get gStandard8 =>text()();
    TextColumn get gStandard9 =>text()();
    TextColumn get gSpecialty1 =>text()();
    TextColumn get gSpecialty2 =>text()();
    TextColumn get gSpecialty3 =>text()();
    TextColumn get gSpecialty4 =>text()();
    TextColumn get gSpecialty5 =>text()();
    TextColumn get gSpecialty6 =>text()();
    TextColumn get gSpecialty7 =>text()();
    TextColumn get gSpecialty8 =>text()();
    TextColumn get gSpecialty9 =>text()();
    TextColumn get instagramPage =>text()();
    //@formatter:on
    }

    @UseMoor(
    tables: [
    User, Payment, Section, Lesson, Contact, LessonFile
    ],
    daos: [
    UserDao, PaymentDao, SectionDao, LessonDao, ContactDao, LessonFileDao
    ],
    queries: {
    } )
    class AppDb extends _$AppDb {
    AppDb() : super( FlutterQueryExecutor.inDatabaseFolder( path: 'unlimitedpower.sqlite', logStatements: true ) );

    @override
    int get schemaVersion => 2;

    @override
    MigrationStrategy get migration =>
    MigrationStrategy(
    onUpgrade: (m, from, to) async {
    if(from > 1){
    m.addColumn(user, user.profileCode);
    }
    },
    );

    Future<void> deleteAllData() {
    return transaction( () async {
    for (var table in allTables) {
    await delete( table ).go( );
    }
    } );
    }

    Future<void> deleteAllSections() {
    return transaction( () async {
    await delete( section ).go( );
    await delete( lesson ).go( );
    await delete( lessonFile ).go( );
    } );
    }
    }

    @UseDao( tables: [User] )
    class UserDao extends DatabaseAccessor<AppDb> with _$UserDaoMixin {
    final AppDb db;

    UserDao(this.db) :super( db );

    Future<UserData> getSingleUser() {
    return (
    select( user )
    ..orderBy( [(t) => OrderingTerm( expression: t.id, mode: OrderingMode.desc )] )
    ..limit( 1 )
    ).getSingle( );
    }

    Future<int> insertUser(Insertable data) => into( user ).insert( data );

    Future updateUser(Insertable data) => update( user ).replace( data );

    Future deleteUser(Insertable data) => delete( user ).delete( data );
    }

    @UseDao( tables: [Payment] )
    class PaymentDao extends DatabaseAccessor<AppDb> with _$PaymentDaoMixin {
    final AppDb db;

    PaymentDao(this.db) :super( db );

    Future<PaymentData> getCurrentMonthPaymentState(String monthKey) {
    return (
    select( payment )
    ..where( (t) => payment.monthKey.equals( monthKey ) )
    ).getSingle( );
    }

    Future<int> insertPayment(Insertable data) => into( payment ).insert( data );

    Future updateUser(Insertable data) => update( payment ).replace( data );

    Future deleteUser(Insertable data) => delete( payment ).delete( data );
    }

    @UseDao( tables: [Section] )
    class SectionDao extends DatabaseAccessor<AppDb> with _$SectionDaoMixin {
    final AppDb db;

    SectionDao(this.db) :super( db );

    Future<List<SectionData>> getAllLessons() {
    return (
    select( section )
    ..orderBy( [(t) => OrderingTerm( expression: t.id, mode: OrderingMode.asc )] )
    ).get( );
    }

    Future<SectionData> getCurrentMonth(String monthKey) {
    return (
    select( section )
    ..where( (t) => section.monthKey.equals( monthKey ) )
    ).getSingle( );
    }

    Future<int> insertSection(Insertable data) => into( section ).insert( data );

    Future updateUser(Insertable data) => update( section ).replace( data );

    Future deleteUser(Insertable data) => delete( section ).delete( data );
    }

    @UseDao( tables: [Lesson] )
    class LessonDao extends DatabaseAccessor<AppDb> with _$LessonDaoMixin {
    final AppDb db;

    LessonDao(this.db) :super( db );

    Future<LessonData> getLesson(int lessonId) {
    return (
    select( lesson )
    ..where( (t) => lesson.id.equals( lessonId ) )
    ).getSingle( );
    }

    Future<List<LessonData>> getAllLessons(monthKey) {
    return (
    select( lesson )
    ..where( (t) => lesson.parentMonthKey.equals( monthKey ) )
    ).get( );
    }

    Future<int> insertLesson(Insertable data) => into( lesson ).insert( data );

    Future updateUser(Insertable data) => update( lesson ).replace( data );

    Future deleteUser(Insertable data) => delete( lesson ).delete( data );
    }

    @UseDao( tables: [LessonFile] )
    class LessonFileDao extends DatabaseAccessor<AppDb> with _$LessonFileDaoMixin {
    final AppDb db;

    LessonFileDao(this.db) :super( db );

    Future<List<LessonFileData>> getLesson(String parentLessonKey) {
    return (
    select( lessonFile )
    ..where( (t) => lessonFile.parentLessonKey.equals( parentLessonKey ) )
    ).get( );
    }

    Future<LessonFileData> getSingleLesson(String parentLessonKey) {
    return (
    select( lessonFile )
    ..where( (t) => lessonFile.parentLessonKey.equals( parentLessonKey ) )
    ).getSingle( );
    }

    Future<int> insertLesson(Insertable data) => into( lessonFile ).insert( data );

    Future updateUser(Insertable data) => update( lessonFile ).replace( data );

    Future deleteUser(Insertable data) => delete( lessonFile ).delete( data );
    }


    @UseDao( tables: [Contact] )
    class ContactDao extends DatabaseAccessor<AppDb> with _$ContactDaoMixin {
    final AppDb db;

    ContactDao(this.db) :super( db );

    Future<ContactData> getContacts() {
    return (
    select( contact )
    ).getSingle( );
    }

    Future<int> insertContact(Insertable data) => into( contact ).insert( data );
    }