flutter架 构项目基础
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import 'package:isar_community/isar.dart';
|
||||
|
||||
part 'answer_record.g.dart';
|
||||
|
||||
/// ============================================================
|
||||
/// 【AnswerRecord】答题进度持久化模型(续答功能)
|
||||
///
|
||||
/// 一、解决什么问题:
|
||||
/// 答题中途退出 → 答案只存在 Riverpod 内存里,进程一杀就丢。
|
||||
/// 本模型按"试卷"维度把每题答案落 Isar,下次进卷按 paperId
|
||||
/// 读回注入 answerProvider,实现续答。
|
||||
///
|
||||
/// 二、设计要点:
|
||||
/// 1. paperId 加 @Index() 索引:进卷恢复、交卷清理都按它查
|
||||
/// (where(paperId).equalTo() 走索引,100 题毫秒级);
|
||||
/// 2. answer 统一 String:选择 "A,B" / 判断 "对" / 解答文本,
|
||||
/// 与 Question 模型的存储约定一致,交卷序列化也简单;
|
||||
/// 3. 交卷成功后按 paperId 批量删除,磁盘上永远只留
|
||||
/// "进行中"的试卷答案,不会膨胀。
|
||||
///
|
||||
/// 三、高频坑:
|
||||
/// 1. 和 Question 一样必须有 Id 主键 + 重跑 build_runner;
|
||||
/// 2. 模型 import 了 isar,web 端不能 import 本文件——
|
||||
/// store 层用条件导出(见 answer_record_store.dart)。
|
||||
/// ============================================================
|
||||
@collection
|
||||
class AnswerRecord {
|
||||
Id id = Isar.autoIncrement; // Isar 内部主键(自动递增)
|
||||
|
||||
@Index()
|
||||
int? paperId; // 试卷 id(续答恢复/交卷清理的维度)
|
||||
int? questionId; // 题目 id(对应 Question.questionId)
|
||||
String? answer; // 用户答案(多选 "A,B" 逗号拼接)
|
||||
DateTime? updatedAt; // 作答时间
|
||||
}
|
||||
@@ -0,0 +1,981 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'answer_record.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// IsarCollectionGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types
|
||||
|
||||
extension GetAnswerRecordCollection on Isar {
|
||||
IsarCollection<AnswerRecord> get answerRecords => this.collection();
|
||||
}
|
||||
|
||||
const AnswerRecordSchema = CollectionSchema(
|
||||
name: r'AnswerRecord',
|
||||
id: -783120389370632988,
|
||||
properties: {
|
||||
r'answer': PropertySchema(id: 0, name: r'answer', type: IsarType.string),
|
||||
r'paperId': PropertySchema(id: 1, name: r'paperId', type: IsarType.long),
|
||||
r'questionId': PropertySchema(
|
||||
id: 2,
|
||||
name: r'questionId',
|
||||
type: IsarType.long,
|
||||
),
|
||||
r'updatedAt': PropertySchema(
|
||||
id: 3,
|
||||
name: r'updatedAt',
|
||||
type: IsarType.dateTime,
|
||||
),
|
||||
},
|
||||
|
||||
estimateSize: _answerRecordEstimateSize,
|
||||
serialize: _answerRecordSerialize,
|
||||
deserialize: _answerRecordDeserialize,
|
||||
deserializeProp: _answerRecordDeserializeProp,
|
||||
idName: r'id',
|
||||
indexes: {
|
||||
r'paperId': IndexSchema(
|
||||
id: -7152058561277781812,
|
||||
name: r'paperId',
|
||||
unique: false,
|
||||
replace: false,
|
||||
properties: [
|
||||
IndexPropertySchema(
|
||||
name: r'paperId',
|
||||
type: IndexType.value,
|
||||
caseSensitive: false,
|
||||
),
|
||||
],
|
||||
),
|
||||
},
|
||||
links: {},
|
||||
embeddedSchemas: {},
|
||||
|
||||
getId: _answerRecordGetId,
|
||||
getLinks: _answerRecordGetLinks,
|
||||
attach: _answerRecordAttach,
|
||||
version: '3.3.2',
|
||||
);
|
||||
|
||||
int _answerRecordEstimateSize(
|
||||
AnswerRecord object,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
var bytesCount = offsets.last;
|
||||
{
|
||||
final value = object.answer;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
return bytesCount;
|
||||
}
|
||||
|
||||
void _answerRecordSerialize(
|
||||
AnswerRecord object,
|
||||
IsarWriter writer,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
writer.writeString(offsets[0], object.answer);
|
||||
writer.writeLong(offsets[1], object.paperId);
|
||||
writer.writeLong(offsets[2], object.questionId);
|
||||
writer.writeDateTime(offsets[3], object.updatedAt);
|
||||
}
|
||||
|
||||
AnswerRecord _answerRecordDeserialize(
|
||||
Id id,
|
||||
IsarReader reader,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
final object = AnswerRecord();
|
||||
object.answer = reader.readStringOrNull(offsets[0]);
|
||||
object.id = id;
|
||||
object.paperId = reader.readLongOrNull(offsets[1]);
|
||||
object.questionId = reader.readLongOrNull(offsets[2]);
|
||||
object.updatedAt = reader.readDateTimeOrNull(offsets[3]);
|
||||
return object;
|
||||
}
|
||||
|
||||
P _answerRecordDeserializeProp<P>(
|
||||
IsarReader reader,
|
||||
int propertyId,
|
||||
int offset,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
switch (propertyId) {
|
||||
case 0:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 1:
|
||||
return (reader.readLongOrNull(offset)) as P;
|
||||
case 2:
|
||||
return (reader.readLongOrNull(offset)) as P;
|
||||
case 3:
|
||||
return (reader.readDateTimeOrNull(offset)) as P;
|
||||
default:
|
||||
throw IsarError('Unknown property with id $propertyId');
|
||||
}
|
||||
}
|
||||
|
||||
Id _answerRecordGetId(AnswerRecord object) {
|
||||
return object.id;
|
||||
}
|
||||
|
||||
List<IsarLinkBase<dynamic>> _answerRecordGetLinks(AnswerRecord object) {
|
||||
return [];
|
||||
}
|
||||
|
||||
void _answerRecordAttach(
|
||||
IsarCollection<dynamic> col,
|
||||
Id id,
|
||||
AnswerRecord object,
|
||||
) {
|
||||
object.id = id;
|
||||
}
|
||||
|
||||
extension AnswerRecordQueryWhereSort
|
||||
on QueryBuilder<AnswerRecord, AnswerRecord, QWhere> {
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhere> anyId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(const IdWhereClause.any());
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhere> anyPaperId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
const IndexWhereClause.any(indexName: r'paperId'),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension AnswerRecordQueryWhere
|
||||
on QueryBuilder<AnswerRecord, AnswerRecord, QWhereClause> {
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> idEqualTo(Id id) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> idNotEqualTo(
|
||||
Id id,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
if (query.whereSort == Sort.asc) {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: false),
|
||||
)
|
||||
.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: false),
|
||||
);
|
||||
} else {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: false),
|
||||
)
|
||||
.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: false),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> idGreaterThan(
|
||||
Id id, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: include),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> idLessThan(
|
||||
Id id, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: include),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> idBetween(
|
||||
Id lowerId,
|
||||
Id upperId, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.between(
|
||||
lower: lowerId,
|
||||
includeLower: includeLower,
|
||||
upper: upperId,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> paperIdIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IndexWhereClause.equalTo(indexName: r'paperId', value: [null]),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause>
|
||||
paperIdIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IndexWhereClause.between(
|
||||
indexName: r'paperId',
|
||||
lower: [null],
|
||||
includeLower: false,
|
||||
upper: [],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> paperIdEqualTo(
|
||||
int? paperId,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IndexWhereClause.equalTo(indexName: r'paperId', value: [paperId]),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> paperIdNotEqualTo(
|
||||
int? paperId,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
if (query.whereSort == Sort.asc) {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IndexWhereClause.between(
|
||||
indexName: r'paperId',
|
||||
lower: [],
|
||||
upper: [paperId],
|
||||
includeUpper: false,
|
||||
),
|
||||
)
|
||||
.addWhereClause(
|
||||
IndexWhereClause.between(
|
||||
indexName: r'paperId',
|
||||
lower: [paperId],
|
||||
includeLower: false,
|
||||
upper: [],
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IndexWhereClause.between(
|
||||
indexName: r'paperId',
|
||||
lower: [paperId],
|
||||
includeLower: false,
|
||||
upper: [],
|
||||
),
|
||||
)
|
||||
.addWhereClause(
|
||||
IndexWhereClause.between(
|
||||
indexName: r'paperId',
|
||||
lower: [],
|
||||
upper: [paperId],
|
||||
includeUpper: false,
|
||||
),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause>
|
||||
paperIdGreaterThan(int? paperId, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IndexWhereClause.between(
|
||||
indexName: r'paperId',
|
||||
lower: [paperId],
|
||||
includeLower: include,
|
||||
upper: [],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> paperIdLessThan(
|
||||
int? paperId, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IndexWhereClause.between(
|
||||
indexName: r'paperId',
|
||||
lower: [],
|
||||
upper: [paperId],
|
||||
includeUpper: include,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterWhereClause> paperIdBetween(
|
||||
int? lowerPaperId,
|
||||
int? upperPaperId, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IndexWhereClause.between(
|
||||
indexName: r'paperId',
|
||||
lower: [lowerPaperId],
|
||||
includeLower: includeLower,
|
||||
upper: [upperPaperId],
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension AnswerRecordQueryFilter
|
||||
on QueryBuilder<AnswerRecord, AnswerRecord, QFilterCondition> {
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
answerIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'answer'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
answerIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'answer'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition> answerEqualTo(
|
||||
String? value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(
|
||||
property: r'answer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
answerGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'answer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
answerLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'answer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition> answerBetween(
|
||||
String? lower,
|
||||
String? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'answer',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
answerStartsWith(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.startsWith(
|
||||
property: r'answer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
answerEndsWith(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.endsWith(
|
||||
property: r'answer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
answerContains(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.contains(
|
||||
property: r'answer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition> answerMatches(
|
||||
String pattern, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.matches(
|
||||
property: r'answer',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
answerIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'answer', value: ''),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
answerIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(property: r'answer', value: ''),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition> idEqualTo(
|
||||
Id value,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'id', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition> idGreaterThan(
|
||||
Id value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'id',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition> idLessThan(
|
||||
Id value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'id',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition> idBetween(
|
||||
Id lower,
|
||||
Id upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'id',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
paperIdIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'paperId'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
paperIdIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'paperId'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
paperIdEqualTo(int? value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'paperId', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
paperIdGreaterThan(int? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'paperId',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
paperIdLessThan(int? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'paperId',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
paperIdBetween(
|
||||
int? lower,
|
||||
int? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'paperId',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
questionIdIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'questionId'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
questionIdIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'questionId'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
questionIdEqualTo(int? value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'questionId', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
questionIdGreaterThan(int? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'questionId',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
questionIdLessThan(int? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'questionId',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
questionIdBetween(
|
||||
int? lower,
|
||||
int? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'questionId',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
updatedAtIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'updatedAt'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
updatedAtIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'updatedAt'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
updatedAtEqualTo(DateTime? value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'updatedAt', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
updatedAtGreaterThan(DateTime? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'updatedAt',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
updatedAtLessThan(DateTime? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'updatedAt',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterFilterCondition>
|
||||
updatedAtBetween(
|
||||
DateTime? lower,
|
||||
DateTime? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'updatedAt',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension AnswerRecordQueryObject
|
||||
on QueryBuilder<AnswerRecord, AnswerRecord, QFilterCondition> {}
|
||||
|
||||
extension AnswerRecordQueryLinks
|
||||
on QueryBuilder<AnswerRecord, AnswerRecord, QFilterCondition> {}
|
||||
|
||||
extension AnswerRecordQuerySortBy
|
||||
on QueryBuilder<AnswerRecord, AnswerRecord, QSortBy> {
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> sortByAnswer() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'answer', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> sortByAnswerDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'answer', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> sortByPaperId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'paperId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> sortByPaperIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'paperId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> sortByQuestionId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'questionId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy>
|
||||
sortByQuestionIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'questionId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> sortByUpdatedAt() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updatedAt', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> sortByUpdatedAtDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updatedAt', Sort.desc);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension AnswerRecordQuerySortThenBy
|
||||
on QueryBuilder<AnswerRecord, AnswerRecord, QSortThenBy> {
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> thenByAnswer() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'answer', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> thenByAnswerDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'answer', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> thenById() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'id', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> thenByIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'id', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> thenByPaperId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'paperId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> thenByPaperIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'paperId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> thenByQuestionId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'questionId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy>
|
||||
thenByQuestionIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'questionId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> thenByUpdatedAt() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updatedAt', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QAfterSortBy> thenByUpdatedAtDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updatedAt', Sort.desc);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension AnswerRecordQueryWhereDistinct
|
||||
on QueryBuilder<AnswerRecord, AnswerRecord, QDistinct> {
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QDistinct> distinctByAnswer({
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'answer', caseSensitive: caseSensitive);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QDistinct> distinctByPaperId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'paperId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QDistinct> distinctByQuestionId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'questionId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, AnswerRecord, QDistinct> distinctByUpdatedAt() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'updatedAt');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension AnswerRecordQueryProperty
|
||||
on QueryBuilder<AnswerRecord, AnswerRecord, QQueryProperty> {
|
||||
QueryBuilder<AnswerRecord, int, QQueryOperations> idProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'id');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, String?, QQueryOperations> answerProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'answer');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, int?, QQueryOperations> paperIdProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'paperId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, int?, QQueryOperations> questionIdProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'questionId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<AnswerRecord, DateTime?, QQueryOperations> updatedAtProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'updatedAt');
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import 'package:isar_community/isar.dart';
|
||||
|
||||
part 'play_record.g.dart';
|
||||
|
||||
/// ============================================================
|
||||
/// 【PlayRecord】播放记录模型(对应 AppDatabase 的播放记录集合)
|
||||
///
|
||||
/// 一、字段设计:课程 id + 进度(0~1)+ 最近播放时间,
|
||||
/// 下次进课程直接按 progress 续播。
|
||||
///
|
||||
/// 二、高频坑:
|
||||
/// 1. progress 用 double 存小数进度,展示成百分比自己换算;
|
||||
/// 2. updatedAt 每次播放暂停都更新,用于"最近播放"排序;
|
||||
/// 3. 改字段后记得重跑 build_runner。
|
||||
/// ============================================================
|
||||
@collection
|
||||
class PlayRecord {
|
||||
Id id = Isar.autoIncrement; // Isar 内部主键(自动递增)
|
||||
|
||||
int? courseId; // 课程/课时 id
|
||||
String? courseName; // 课程名
|
||||
double? progress; // 播放进度 0~1
|
||||
DateTime? updatedAt; // 最近播放时间
|
||||
}
|
||||
@@ -0,0 +1,852 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'play_record.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// IsarCollectionGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types
|
||||
|
||||
extension GetPlayRecordCollection on Isar {
|
||||
IsarCollection<PlayRecord> get playRecords => this.collection();
|
||||
}
|
||||
|
||||
const PlayRecordSchema = CollectionSchema(
|
||||
name: r'PlayRecord',
|
||||
id: -7338646677296495696,
|
||||
properties: {
|
||||
r'courseId': PropertySchema(id: 0, name: r'courseId', type: IsarType.long),
|
||||
r'courseName': PropertySchema(
|
||||
id: 1,
|
||||
name: r'courseName',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'progress': PropertySchema(
|
||||
id: 2,
|
||||
name: r'progress',
|
||||
type: IsarType.double,
|
||||
),
|
||||
r'updatedAt': PropertySchema(
|
||||
id: 3,
|
||||
name: r'updatedAt',
|
||||
type: IsarType.dateTime,
|
||||
),
|
||||
},
|
||||
|
||||
estimateSize: _playRecordEstimateSize,
|
||||
serialize: _playRecordSerialize,
|
||||
deserialize: _playRecordDeserialize,
|
||||
deserializeProp: _playRecordDeserializeProp,
|
||||
idName: r'id',
|
||||
indexes: {},
|
||||
links: {},
|
||||
embeddedSchemas: {},
|
||||
|
||||
getId: _playRecordGetId,
|
||||
getLinks: _playRecordGetLinks,
|
||||
attach: _playRecordAttach,
|
||||
version: '3.3.2',
|
||||
);
|
||||
|
||||
int _playRecordEstimateSize(
|
||||
PlayRecord object,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
var bytesCount = offsets.last;
|
||||
{
|
||||
final value = object.courseName;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
return bytesCount;
|
||||
}
|
||||
|
||||
void _playRecordSerialize(
|
||||
PlayRecord object,
|
||||
IsarWriter writer,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
writer.writeLong(offsets[0], object.courseId);
|
||||
writer.writeString(offsets[1], object.courseName);
|
||||
writer.writeDouble(offsets[2], object.progress);
|
||||
writer.writeDateTime(offsets[3], object.updatedAt);
|
||||
}
|
||||
|
||||
PlayRecord _playRecordDeserialize(
|
||||
Id id,
|
||||
IsarReader reader,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
final object = PlayRecord();
|
||||
object.courseId = reader.readLongOrNull(offsets[0]);
|
||||
object.courseName = reader.readStringOrNull(offsets[1]);
|
||||
object.id = id;
|
||||
object.progress = reader.readDoubleOrNull(offsets[2]);
|
||||
object.updatedAt = reader.readDateTimeOrNull(offsets[3]);
|
||||
return object;
|
||||
}
|
||||
|
||||
P _playRecordDeserializeProp<P>(
|
||||
IsarReader reader,
|
||||
int propertyId,
|
||||
int offset,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
switch (propertyId) {
|
||||
case 0:
|
||||
return (reader.readLongOrNull(offset)) as P;
|
||||
case 1:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 2:
|
||||
return (reader.readDoubleOrNull(offset)) as P;
|
||||
case 3:
|
||||
return (reader.readDateTimeOrNull(offset)) as P;
|
||||
default:
|
||||
throw IsarError('Unknown property with id $propertyId');
|
||||
}
|
||||
}
|
||||
|
||||
Id _playRecordGetId(PlayRecord object) {
|
||||
return object.id;
|
||||
}
|
||||
|
||||
List<IsarLinkBase<dynamic>> _playRecordGetLinks(PlayRecord object) {
|
||||
return [];
|
||||
}
|
||||
|
||||
void _playRecordAttach(IsarCollection<dynamic> col, Id id, PlayRecord object) {
|
||||
object.id = id;
|
||||
}
|
||||
|
||||
extension PlayRecordQueryWhereSort
|
||||
on QueryBuilder<PlayRecord, PlayRecord, QWhere> {
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterWhere> anyId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(const IdWhereClause.any());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension PlayRecordQueryWhere
|
||||
on QueryBuilder<PlayRecord, PlayRecord, QWhereClause> {
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterWhereClause> idEqualTo(Id id) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterWhereClause> idNotEqualTo(Id id) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
if (query.whereSort == Sort.asc) {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: false),
|
||||
)
|
||||
.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: false),
|
||||
);
|
||||
} else {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: false),
|
||||
)
|
||||
.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: false),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterWhereClause> idGreaterThan(
|
||||
Id id, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: include),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterWhereClause> idLessThan(
|
||||
Id id, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: include),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterWhereClause> idBetween(
|
||||
Id lowerId,
|
||||
Id upperId, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.between(
|
||||
lower: lowerId,
|
||||
includeLower: includeLower,
|
||||
upper: upperId,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension PlayRecordQueryFilter
|
||||
on QueryBuilder<PlayRecord, PlayRecord, QFilterCondition> {
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> courseIdIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'courseId'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseIdIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'courseId'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> courseIdEqualTo(
|
||||
int? value,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'courseId', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseIdGreaterThan(int? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'courseId',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> courseIdLessThan(
|
||||
int? value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'courseId',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> courseIdBetween(
|
||||
int? lower,
|
||||
int? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'courseId',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseNameIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'courseName'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseNameIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'courseName'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> courseNameEqualTo(
|
||||
String? value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(
|
||||
property: r'courseName',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseNameGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'courseName',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseNameLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'courseName',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> courseNameBetween(
|
||||
String? lower,
|
||||
String? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'courseName',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseNameStartsWith(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.startsWith(
|
||||
property: r'courseName',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseNameEndsWith(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.endsWith(
|
||||
property: r'courseName',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseNameContains(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.contains(
|
||||
property: r'courseName',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> courseNameMatches(
|
||||
String pattern, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.matches(
|
||||
property: r'courseName',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseNameIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'courseName', value: ''),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
courseNameIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(property: r'courseName', value: ''),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> idEqualTo(
|
||||
Id value,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'id', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> idGreaterThan(
|
||||
Id value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'id',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> idLessThan(
|
||||
Id value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'id',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> idBetween(
|
||||
Id lower,
|
||||
Id upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'id',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> progressIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'progress'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
progressIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'progress'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> progressEqualTo(
|
||||
double? value, {
|
||||
double epsilon = Query.epsilon,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(
|
||||
property: r'progress',
|
||||
value: value,
|
||||
|
||||
epsilon: epsilon,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
progressGreaterThan(
|
||||
double? value, {
|
||||
bool include = false,
|
||||
double epsilon = Query.epsilon,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'progress',
|
||||
value: value,
|
||||
|
||||
epsilon: epsilon,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> progressLessThan(
|
||||
double? value, {
|
||||
bool include = false,
|
||||
double epsilon = Query.epsilon,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'progress',
|
||||
value: value,
|
||||
|
||||
epsilon: epsilon,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> progressBetween(
|
||||
double? lower,
|
||||
double? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
double epsilon = Query.epsilon,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'progress',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
|
||||
epsilon: epsilon,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
updatedAtIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'updatedAt'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
updatedAtIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'updatedAt'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> updatedAtEqualTo(
|
||||
DateTime? value,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'updatedAt', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition>
|
||||
updatedAtGreaterThan(DateTime? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'updatedAt',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> updatedAtLessThan(
|
||||
DateTime? value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'updatedAt',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterFilterCondition> updatedAtBetween(
|
||||
DateTime? lower,
|
||||
DateTime? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'updatedAt',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension PlayRecordQueryObject
|
||||
on QueryBuilder<PlayRecord, PlayRecord, QFilterCondition> {}
|
||||
|
||||
extension PlayRecordQueryLinks
|
||||
on QueryBuilder<PlayRecord, PlayRecord, QFilterCondition> {}
|
||||
|
||||
extension PlayRecordQuerySortBy
|
||||
on QueryBuilder<PlayRecord, PlayRecord, QSortBy> {
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> sortByCourseId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'courseId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> sortByCourseIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'courseId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> sortByCourseName() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'courseName', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> sortByCourseNameDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'courseName', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> sortByProgress() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'progress', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> sortByProgressDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'progress', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> sortByUpdatedAt() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updatedAt', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> sortByUpdatedAtDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updatedAt', Sort.desc);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension PlayRecordQuerySortThenBy
|
||||
on QueryBuilder<PlayRecord, PlayRecord, QSortThenBy> {
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenByCourseId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'courseId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenByCourseIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'courseId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenByCourseName() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'courseName', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenByCourseNameDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'courseName', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenById() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'id', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenByIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'id', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenByProgress() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'progress', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenByProgressDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'progress', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenByUpdatedAt() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updatedAt', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QAfterSortBy> thenByUpdatedAtDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'updatedAt', Sort.desc);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension PlayRecordQueryWhereDistinct
|
||||
on QueryBuilder<PlayRecord, PlayRecord, QDistinct> {
|
||||
QueryBuilder<PlayRecord, PlayRecord, QDistinct> distinctByCourseId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'courseId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QDistinct> distinctByCourseName({
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'courseName', caseSensitive: caseSensitive);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QDistinct> distinctByProgress() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'progress');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, PlayRecord, QDistinct> distinctByUpdatedAt() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'updatedAt');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension PlayRecordQueryProperty
|
||||
on QueryBuilder<PlayRecord, PlayRecord, QQueryProperty> {
|
||||
QueryBuilder<PlayRecord, int, QQueryOperations> idProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'id');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, int?, QQueryOperations> courseIdProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'courseId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, String?, QQueryOperations> courseNameProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'courseName');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, double?, QQueryOperations> progressProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'progress');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<PlayRecord, DateTime?, QQueryOperations> updatedAtProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'updatedAt');
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import 'package:isar_community/isar.dart';
|
||||
|
||||
part 'question.g.dart';
|
||||
|
||||
/// ============================================================
|
||||
/// 【Question】题库题目模型(Isar 业务集合,对应 AppDatabase 的题库)
|
||||
///
|
||||
/// 一、为什么用强类型类而不是 Hive 的 Map:
|
||||
/// Isar 是强类型 NoSQL,每张"表"(集合)必须对应一个 Dart 类,
|
||||
/// 类字段即数据库列。字段名/类型写错会在编译期直接报错,
|
||||
/// 比 Hive 存 Map(运行时才崩)安全得多。
|
||||
///
|
||||
/// 二、题型字段 type(与试卷接口模型 ExamQuestion 共用约定):
|
||||
/// 1 单选 / 2 多选 / 3 判断 / 4 解答;
|
||||
/// ⚠ 本 Isar 模型是"题库下载/收藏"等本地资产用途,
|
||||
/// 试卷做题页必须用纯 Dart 的 ExamQuestion(features/exam/),
|
||||
/// 业务代码 import 本模型会把 schema 哈希拉进 web 编译图导致
|
||||
/// dart2js 编译失败(详见 ExamQuestion 头注释)。
|
||||
/// options 统一存 JSON 字符串(选择题存选项数组,判断/解答可空),
|
||||
/// answer 统一存字符串(多选 "A,B" 逗号拼接),渲染层按题型解析。
|
||||
///
|
||||
/// 三、高频坑:
|
||||
/// 1. 每个集合必须有 Id 主键,Id id = Isar.autoIncrement 表示自增,
|
||||
/// 写入时 Isar 会自动分配 id 回填到对象上;
|
||||
/// 2. 字段尽量用可空类型(String?),未赋值存 null;
|
||||
/// 3. 改字段结构后必须重跑 build_runner,否则 Schema 还是旧的。
|
||||
/// ============================================================
|
||||
@collection
|
||||
class Question {
|
||||
Id id = Isar.autoIncrement; // Isar 内部主键(自动递增,别手动赋值)
|
||||
|
||||
int? questionId; // 服务器题号(业务去重用)
|
||||
String? title; // 题干(HTML 富文本,RichTextContent 渲染)
|
||||
String? options; // 选项(JSON 字符串,如 ["A项","B项","C项","D项"])
|
||||
String? answer; // 正确答案(多选 "A,B" 逗号拼接)
|
||||
int? type; // 题型:1 单选 / 2 多选 / 3 判断 / 4 解答
|
||||
String? analysis; // 解析(交卷后查看答案用)
|
||||
int? categoryId; // 分类 id
|
||||
DateTime? createdAt; // 收藏/下载时间
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,24 @@
|
||||
import 'package:isar_community/isar.dart';
|
||||
|
||||
part 'wrong_question.g.dart';
|
||||
|
||||
/// ============================================================
|
||||
/// 【WrongQuestion】错题本模型(对应 AppDatabase 的错题集合)
|
||||
///
|
||||
/// 一、字段设计:存题目快照 + 我的错误答案 + 时间,
|
||||
/// 离线也能看错题,不用每次进错题本都拉接口。
|
||||
///
|
||||
/// 二、高频坑:
|
||||
/// 1. 和 Question 一样必须有 Id 主键;
|
||||
/// 2. 服务器题号存 questionId 用于去重(同一题错多次只留一条);
|
||||
/// 3. 改字段后记得重跑 build_runner。
|
||||
/// ============================================================
|
||||
@collection
|
||||
class WrongQuestion {
|
||||
Id id = Isar.autoIncrement; // Isar 内部主键(自动递增)
|
||||
|
||||
int? questionId; // 题目 id(去重)
|
||||
String? title; // 题干快照
|
||||
String? wrongAnswer; // 我提交的错误答案
|
||||
DateTime? wrongAt; // 加入错题本时间
|
||||
}
|
||||
@@ -0,0 +1,931 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'wrong_question.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// IsarCollectionGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types
|
||||
|
||||
extension GetWrongQuestionCollection on Isar {
|
||||
IsarCollection<WrongQuestion> get wrongQuestions => this.collection();
|
||||
}
|
||||
|
||||
const WrongQuestionSchema = CollectionSchema(
|
||||
name: r'WrongQuestion',
|
||||
id: -8005968927277545936,
|
||||
properties: {
|
||||
r'questionId': PropertySchema(
|
||||
id: 0,
|
||||
name: r'questionId',
|
||||
type: IsarType.long,
|
||||
),
|
||||
r'title': PropertySchema(id: 1, name: r'title', type: IsarType.string),
|
||||
r'wrongAnswer': PropertySchema(
|
||||
id: 2,
|
||||
name: r'wrongAnswer',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'wrongAt': PropertySchema(
|
||||
id: 3,
|
||||
name: r'wrongAt',
|
||||
type: IsarType.dateTime,
|
||||
),
|
||||
},
|
||||
|
||||
estimateSize: _wrongQuestionEstimateSize,
|
||||
serialize: _wrongQuestionSerialize,
|
||||
deserialize: _wrongQuestionDeserialize,
|
||||
deserializeProp: _wrongQuestionDeserializeProp,
|
||||
idName: r'id',
|
||||
indexes: {},
|
||||
links: {},
|
||||
embeddedSchemas: {},
|
||||
|
||||
getId: _wrongQuestionGetId,
|
||||
getLinks: _wrongQuestionGetLinks,
|
||||
attach: _wrongQuestionAttach,
|
||||
version: '3.3.2',
|
||||
);
|
||||
|
||||
int _wrongQuestionEstimateSize(
|
||||
WrongQuestion object,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
var bytesCount = offsets.last;
|
||||
{
|
||||
final value = object.title;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
{
|
||||
final value = object.wrongAnswer;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
return bytesCount;
|
||||
}
|
||||
|
||||
void _wrongQuestionSerialize(
|
||||
WrongQuestion object,
|
||||
IsarWriter writer,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
writer.writeLong(offsets[0], object.questionId);
|
||||
writer.writeString(offsets[1], object.title);
|
||||
writer.writeString(offsets[2], object.wrongAnswer);
|
||||
writer.writeDateTime(offsets[3], object.wrongAt);
|
||||
}
|
||||
|
||||
WrongQuestion _wrongQuestionDeserialize(
|
||||
Id id,
|
||||
IsarReader reader,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
final object = WrongQuestion();
|
||||
object.id = id;
|
||||
object.questionId = reader.readLongOrNull(offsets[0]);
|
||||
object.title = reader.readStringOrNull(offsets[1]);
|
||||
object.wrongAnswer = reader.readStringOrNull(offsets[2]);
|
||||
object.wrongAt = reader.readDateTimeOrNull(offsets[3]);
|
||||
return object;
|
||||
}
|
||||
|
||||
P _wrongQuestionDeserializeProp<P>(
|
||||
IsarReader reader,
|
||||
int propertyId,
|
||||
int offset,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
switch (propertyId) {
|
||||
case 0:
|
||||
return (reader.readLongOrNull(offset)) as P;
|
||||
case 1:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 2:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 3:
|
||||
return (reader.readDateTimeOrNull(offset)) as P;
|
||||
default:
|
||||
throw IsarError('Unknown property with id $propertyId');
|
||||
}
|
||||
}
|
||||
|
||||
Id _wrongQuestionGetId(WrongQuestion object) {
|
||||
return object.id;
|
||||
}
|
||||
|
||||
List<IsarLinkBase<dynamic>> _wrongQuestionGetLinks(WrongQuestion object) {
|
||||
return [];
|
||||
}
|
||||
|
||||
void _wrongQuestionAttach(
|
||||
IsarCollection<dynamic> col,
|
||||
Id id,
|
||||
WrongQuestion object,
|
||||
) {
|
||||
object.id = id;
|
||||
}
|
||||
|
||||
extension WrongQuestionQueryWhereSort
|
||||
on QueryBuilder<WrongQuestion, WrongQuestion, QWhere> {
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterWhere> anyId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(const IdWhereClause.any());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension WrongQuestionQueryWhere
|
||||
on QueryBuilder<WrongQuestion, WrongQuestion, QWhereClause> {
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterWhereClause> idEqualTo(
|
||||
Id id,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(IdWhereClause.between(lower: id, upper: id));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterWhereClause> idNotEqualTo(
|
||||
Id id,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
if (query.whereSort == Sort.asc) {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: false),
|
||||
)
|
||||
.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: false),
|
||||
);
|
||||
} else {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: false),
|
||||
)
|
||||
.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: false),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterWhereClause> idGreaterThan(
|
||||
Id id, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: include),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterWhereClause> idLessThan(
|
||||
Id id, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: include),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterWhereClause> idBetween(
|
||||
Id lowerId,
|
||||
Id upperId, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.between(
|
||||
lower: lowerId,
|
||||
includeLower: includeLower,
|
||||
upper: upperId,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension WrongQuestionQueryFilter
|
||||
on QueryBuilder<WrongQuestion, WrongQuestion, QFilterCondition> {
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition> idEqualTo(
|
||||
Id value,
|
||||
) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'id', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
idGreaterThan(Id value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'id',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition> idLessThan(
|
||||
Id value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'id',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition> idBetween(
|
||||
Id lower,
|
||||
Id upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'id',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
questionIdIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'questionId'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
questionIdIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'questionId'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
questionIdEqualTo(int? value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'questionId', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
questionIdGreaterThan(int? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'questionId',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
questionIdLessThan(int? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'questionId',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
questionIdBetween(
|
||||
int? lower,
|
||||
int? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'questionId',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'title'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'title'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleEqualTo(String? value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(
|
||||
property: r'title',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'title',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'title',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleBetween(
|
||||
String? lower,
|
||||
String? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'title',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleStartsWith(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.startsWith(
|
||||
property: r'title',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleEndsWith(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.endsWith(
|
||||
property: r'title',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleContains(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.contains(
|
||||
property: r'title',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleMatches(String pattern, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.matches(
|
||||
property: r'title',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'title', value: ''),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
titleIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(property: r'title', value: ''),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'wrongAnswer'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'wrongAnswer'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerEqualTo(String? value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(
|
||||
property: r'wrongAnswer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'wrongAnswer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'wrongAnswer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerBetween(
|
||||
String? lower,
|
||||
String? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'wrongAnswer',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerStartsWith(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.startsWith(
|
||||
property: r'wrongAnswer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerEndsWith(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.endsWith(
|
||||
property: r'wrongAnswer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerContains(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.contains(
|
||||
property: r'wrongAnswer',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerMatches(String pattern, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.matches(
|
||||
property: r'wrongAnswer',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'wrongAnswer', value: ''),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAnswerIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(property: r'wrongAnswer', value: ''),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAtIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNull(property: r'wrongAt'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAtIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
const FilterCondition.isNotNull(property: r'wrongAt'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAtEqualTo(DateTime? value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.equalTo(property: r'wrongAt', value: value),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAtGreaterThan(DateTime? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'wrongAt',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAtLessThan(DateTime? value, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'wrongAt',
|
||||
value: value,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterFilterCondition>
|
||||
wrongAtBetween(
|
||||
DateTime? lower,
|
||||
DateTime? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(
|
||||
FilterCondition.between(
|
||||
property: r'wrongAt',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension WrongQuestionQueryObject
|
||||
on QueryBuilder<WrongQuestion, WrongQuestion, QFilterCondition> {}
|
||||
|
||||
extension WrongQuestionQueryLinks
|
||||
on QueryBuilder<WrongQuestion, WrongQuestion, QFilterCondition> {}
|
||||
|
||||
extension WrongQuestionQuerySortBy
|
||||
on QueryBuilder<WrongQuestion, WrongQuestion, QSortBy> {
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> sortByQuestionId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'questionId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy>
|
||||
sortByQuestionIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'questionId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> sortByTitle() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'title', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> sortByTitleDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'title', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> sortByWrongAnswer() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'wrongAnswer', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy>
|
||||
sortByWrongAnswerDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'wrongAnswer', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> sortByWrongAt() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'wrongAt', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> sortByWrongAtDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'wrongAt', Sort.desc);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension WrongQuestionQuerySortThenBy
|
||||
on QueryBuilder<WrongQuestion, WrongQuestion, QSortThenBy> {
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> thenById() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'id', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> thenByIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'id', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> thenByQuestionId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'questionId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy>
|
||||
thenByQuestionIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'questionId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> thenByTitle() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'title', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> thenByTitleDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'title', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> thenByWrongAnswer() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'wrongAnswer', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy>
|
||||
thenByWrongAnswerDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'wrongAnswer', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> thenByWrongAt() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'wrongAt', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QAfterSortBy> thenByWrongAtDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'wrongAt', Sort.desc);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension WrongQuestionQueryWhereDistinct
|
||||
on QueryBuilder<WrongQuestion, WrongQuestion, QDistinct> {
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QDistinct> distinctByQuestionId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'questionId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QDistinct> distinctByTitle({
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'title', caseSensitive: caseSensitive);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QDistinct> distinctByWrongAnswer({
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'wrongAnswer', caseSensitive: caseSensitive);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, WrongQuestion, QDistinct> distinctByWrongAt() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'wrongAt');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension WrongQuestionQueryProperty
|
||||
on QueryBuilder<WrongQuestion, WrongQuestion, QQueryProperty> {
|
||||
QueryBuilder<WrongQuestion, int, QQueryOperations> idProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'id');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, int?, QQueryOperations> questionIdProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'questionId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, String?, QQueryOperations> titleProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'title');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, String?, QQueryOperations> wrongAnswerProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'wrongAnswer');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<WrongQuestion, DateTime?, QQueryOperations> wrongAtProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'wrongAt');
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user