Last active
December 22, 2019 07:59
-
-
Save pishguy/9cd69331c94b2082cd87dad49bc6162e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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<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 ); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment