Skip to content

Instantly share code, notes, and snippets.

@pishguy
Last active December 22, 2019 07:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pishguy/9cd69331c94b2082cd87dad49bc6162e to your computer and use it in GitHub Desktop.
Save pishguy/9cd69331c94b2082cd87dad49bc6162e to your computer and use it in GitHub Desktop.
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