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 < 2){ m.addColumn(user, user.profileCode); } }, ); Future deleteAllData() { return transaction( () async { for (var table in allTables) { await delete( table ).go( ); } } ); } Future deleteAllSections() { return transaction( () async { await delete( section ).go( ); await delete( lesson ).go( ); await delete( lessonFile ).go( ); } ); } } @UseDao( tables: [User] ) class UserDao extends DatabaseAccessor with _$UserDaoMixin { final AppDb db; UserDao(this.db) :super( db ); Future getSingleUser() { return ( select( user ) ..orderBy( [(t) => OrderingTerm( expression: t.id, mode: OrderingMode.desc )] ) ..limit( 1 ) ).getSingle( ); } Future 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 with _$PaymentDaoMixin { final AppDb db; PaymentDao(this.db) :super( db ); Future getCurrentMonthPaymentState(String monthKey) { return ( select( payment ) ..where( (t) => payment.monthKey.equals( monthKey ) ) ).getSingle( ); } Future 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 with _$SectionDaoMixin { final AppDb db; SectionDao(this.db) :super( db ); Future> getAllLessons() { return ( select( section ) ..orderBy( [(t) => OrderingTerm( expression: t.id, mode: OrderingMode.asc )] ) ).get( ); } Future getCurrentMonth(String monthKey) { return ( select( section ) ..where( (t) => section.monthKey.equals( monthKey ) ) ).getSingle( ); } Future 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 with _$LessonDaoMixin { final AppDb db; LessonDao(this.db) :super( db ); Future getLesson(int lessonId) { return ( select( lesson ) ..where( (t) => lesson.id.equals( lessonId ) ) ).getSingle( ); } Future> getAllLessons(monthKey) { return ( select( lesson ) ..where( (t) => lesson.parentMonthKey.equals( monthKey ) ) ).get( ); } Future 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 with _$LessonFileDaoMixin { final AppDb db; LessonFileDao(this.db) :super( db ); Future> getLesson(String parentLessonKey) { return ( select( lessonFile ) ..where( (t) => lessonFile.parentLessonKey.equals( parentLessonKey ) ) ).get( ); } Future getSingleLesson(String parentLessonKey) { return ( select( lessonFile ) ..where( (t) => lessonFile.parentLessonKey.equals( parentLessonKey ) ) ).getSingle( ); } Future 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 with _$ContactDaoMixin { final AppDb db; ContactDao(this.db) :super( db ); Future getContacts() { return ( select( contact ) ).getSingle( ); } Future insertContact(Insertable data) => into( contact ).insert( data ); }