wip: upgrade dependencies

This commit is contained in:
2022-01-11 18:54:55 +08:00
parent b7d0ec75eb
commit 58263f4548
16 changed files with 458 additions and 117 deletions
+17
View File
@@ -20,4 +20,21 @@ abstract class _LikeRecord extends BaseModel {
@Column(isNullable: false, indexType: IndexType.standardIndex)
@SerializableField(isNullable: false)
bool? get liked;
}
@serializable
@Orm(tableName: 'like_records', generateMigrations: false)
abstract class _UserLikes {
@Column(isNullable: false)
@SerializableField(isNullable: false)
int? id;
@Column(isNullable: false)
@SerializableField(exclude: true)
int? get uid;
@Column(isNullable: false)
@SerializableField(exclude: true)
bool? get liked;
}
+58
View File
@@ -70,6 +70,9 @@ abstract class _SimpleScheme {
@serializable
abstract class _SimpleSchemeTransMetaData {
@SerializableField(isNullable: false)
int? id;
@SerializableField(isNullable: false)
String? get uuid;
@@ -90,6 +93,7 @@ abstract class _SimpleSchemeTransMetaData {
}
SimpleSchemeTransMetaData transSimpleSchemeMetaData(SimpleScheme scheme) => SimpleSchemeTransMetaData(
id: scheme.id,
description: scheme.description,
uuid: scheme.uuid,
name: scheme.name,
@@ -121,3 +125,57 @@ SchemeForDownload transSchemeForDownload(Scheme scheme) => SchemeForDownload(
description: scheme.description,
gestures: scheme.gestures,
);
@serializable
@Orm(tableName: 'schemes', generateMigrations: false)
abstract class _MarketScheme {
@Column()
int? id;
@Column(isNullable: false, indexType: IndexType.unique)
@SerializableField(isNullable: false)
String? get uuid;
@Column(isNullable: false)
@SerializableField(isNullable: false)
String? get name;
@Column(type: ColumnType.text)
String? description;
@Column(isNullable: false)
@SerializableField(exclude: true)
bool? get shared;
@SerializableField(isNullable: true)
@Column(type: ColumnType.json)
Map<String, dynamic>? get metadata;
}
@serializable
abstract class _MarketSchemeTransMetaData {
@SerializableField(isNullable: false)
int? id;
@SerializableField(isNullable: false)
String? get uuid;
@SerializableField(isNullable: false)
String? get name;
@SerializableField(isNullable: false)
String? description;
int? get downloads;
int? get likes;
}
MarketSchemeTransMetaData transMarketSchemeMetaData(MarketScheme scheme) => MarketSchemeTransMetaData(
id: scheme.id,
description: scheme.description,
uuid: scheme.uuid,
name: scheme.name,
likes: scheme.metadata?['likes'] ?? 0,
downloads: scheme.metadata?['downloads'] ?? 0,
);
@@ -61,41 +61,6 @@ Future configureServer(Angel app) async {
),
);
app.get(
Apis.scheme.user.route,
chain(
[
jwtMiddleware(),
(req, res) async {
var schemeQuery = SimpleSchemeQuery();
var type = req.params['type'];
var likeRecordTableName = LikeRecordQuery().tableName;
schemeQuery.leftJoin(likeRecordTableName, SchemeFields.id, LikeRecordFields.schemeId, alias: 'lr');
switch (type) {
case 'uploaded':
schemeQuery.where!.uid.equals(req.user!.idAsInt);
break;
case 'downloaded':
var downloadHistoryTableName = DownloadHistoryQuery().tableName;
schemeQuery.leftJoin(downloadHistoryTableName, SchemeFields.id, DownloadHistoryFields.schemeId,
alias: 'dh');
schemeQuery.where!.raw('dh.${DownloadHistoryFields.uid} = ${req.user!.idAsInt}');
break;
case 'liked':
schemeQuery.where!.raw('lr.${LikeRecordFields.uid} = ${req.user!.idAsInt}');
schemeQuery.where!.raw('lr.${LikeRecordFields.liked} = true');
break;
default:
return res.unProcessableEntity();
}
schemeQuery.orderBy('${schemeQuery.tableName}.${SchemeFields.updatedAt}', descending: true);
return schemeQuery.get(req.queryExecutor).then((value) => value.map(transSimpleSchemeMetaData).toList());
},
],
),
);
app.get(
Apis.scheme.download.route,
chain(
@@ -185,4 +150,100 @@ Future configureServer(Angel app) async {
],
),
);
app.get(
Apis.scheme.user.route,
chain(
[
jwtMiddleware(),
(req, res) async {
var schemeQuery = SimpleSchemeQuery();
var type = req.params['type'];
var likeRecordTableName = LikeRecordQuery().tableName;
schemeQuery.leftJoin(likeRecordTableName, SchemeFields.id, LikeRecordFields.schemeId, alias: 'lr');
switch (type) {
case 'uploaded':
schemeQuery.where!.uid.equals(req.user!.idAsInt);
break;
case 'downloaded':
var downloadHistoryTableName = DownloadHistoryQuery().tableName;
schemeQuery.leftJoin(downloadHistoryTableName, SchemeFields.id, DownloadHistoryFields.schemeId,
alias: 'dh');
schemeQuery.where!.raw('dh.${DownloadHistoryFields.uid} = ${req.user!.idAsInt}');
break;
case 'liked':
schemeQuery.where!.raw('lr.${LikeRecordFields.uid} = ${req.user!.idAsInt}');
schemeQuery.where!.raw('lr.${LikeRecordFields.liked} = true');
break;
default:
return res.unProcessableEntity();
}
schemeQuery.orderBy('${schemeQuery.tableName}.${SchemeFields.updatedAt}', descending: true);
return schemeQuery.get(req.queryExecutor).then((value) => value.map(transSimpleSchemeMetaData).toList());
},
],
),
);
const recommend = "(metadata->'recommends') is null ,(metadata->'recommends')::int";
const updated = "updated_at";
const likes = "(metadata->'likes') is null ,(metadata->'likes')::int";
const downloads = "(metadata->'downloads') is null ,(metadata->'downloads')::int";
app.get(Apis.scheme.market.route, (req, res) async {
var schemeQuery = MarketSchemeQuery();
var type = req.params['type'];
var page = req.params['page'] as int;
var pageSize = req.params['pageSize'] as int;
schemeQuery.where?.shared.equals(true);
late List<String> orders;
switch (type) {
case 'recommend':
// orders = [recommend, likes, downloads, SchemeFields.id];
orders = [recommend];
break;
case 'updated':
orders = [updated];
break;
case 'likes':
// orders = [likes, recommend, downloads, SchemeFields.id];
orders = [likes];
break;
case 'downloads':
// orders = [downloads, recommend, likes, SchemeFields.id];
orders = [downloads];
break;
default:
return res.unProcessableEntity();
}
for (var order in orders) {
schemeQuery.orderBy(order, descending: true);
}
schemeQuery.offset(page * pageSize);
schemeQuery.limit(pageSize + 1);
return schemeQuery.get(req.queryExecutor).then((value) {
var hasMore = value.length > pageSize;
if (hasMore) value.removeLast();
return {
'hasMore': hasMore,
'items': value.map(transMarketSchemeMetaData).toList(),
};
});
});
app.get(
Apis.scheme.userLikes,
chain(
[
jwtMiddleware(),
(req, res) async => (UserLikesQuery()
..where?.uid.equals(req.user!.idAsInt)
..where?.liked.equals(true))
.get(req.queryExecutor)
.then((value) => value.map((e) => e.id).toList()),
],
),
);
}