Add filter to package server and fix templates for devstudio

This commit is contained in:
2025-09-04 04:48:40 -05:00
parent 8bb45eae15
commit 55a15c9d98
17 changed files with 69 additions and 67 deletions

View File

@@ -149,10 +149,11 @@ func DB.UploadPackage(userId, filePath)
return {Success=true};
}
func DB.QueryPackages(q, offset, limit,$account)
func DB.QueryPackages(q, offset, limit,$account,$filter)
{
if(TypeOf(offset) != "Long") offset = 0;
if(TypeOf(limit) != "Long") limit = 20;
if(TypeOf(filter) != "String") var filter = "";
var q2 = Sqlite.Escape($"%{q}%");
var accountId = -1;
@@ -173,7 +174,7 @@ func DB.QueryPackages(q, offset, limit,$account)
}
}
var sql = accountId > -1 ? $"SELECT * FROM packages p inner join versions v on p.id = v.packageId and (p.packageName LIKE {q2} OR v.description LIKE {q2}) and v.version = (SELECT MAX(version) FROM versions WHERE packageId = v.packageId) INNER JOIN accounts a on a.id = p.accountId WHERE p.accountId == {accountId} LIMIT {limit} OFFSET {offset};" : $"SELECT * FROM packages p inner join versions v on p.id = v.packageId and (p.packageName LIKE {q2} OR v.description LIKE {q2}) and v.version = (SELECT MAX(version) FROM versions WHERE packageId = v.packageId) INNER JOIN accounts a on a.id = p.accountId LIMIT {limit} OFFSET {offset};";
var sql = accountId > -1 ? $"SELECT * FROM packages p inner join versions v on p.id = v.packageId{filter} and (p.packageName LIKE {q2} OR v.description LIKE {q2}) and v.version = (SELECT MAX(version) FROM versions WHERE packageId = v.packageId) INNER JOIN accounts a on a.id = p.accountId WHERE p.accountId == {accountId} LIMIT {limit} OFFSET {offset};" : $"SELECT * FROM packages p inner join versions v on p.id = v.packageId and (p.packageName LIKE {q2} OR v.description LIKE {q2}) and v.version = (SELECT MAX(version) FROM versions WHERE packageId = v.packageId) INNER JOIN accounts a on a.id = p.accountId LIMIT {limit} OFFSET {offset};";
DB.Lock();
var dbCon = DB.Open();
var res = Sqlite.Exec(dbCon, sql);

View File

@@ -71,6 +71,26 @@ func main(args)
}
if(ctx.Path == "/api/v1/search")
{
var filter = ctx.QueryParams.TryGetFirst("filter");
if(TypeOf(filter) != "String") filter = "";
var filters = filter.Length > 0 filter.Split(",") : [];
if(filters.Length > 0)
{
filter = " and (";
var first = true;
each(var item : filters)
{
if(!first) {
filter += " OR ";
}
filter += $"v.type = {Sqlite.Escape(item)}";
first=false;
}
filter += ")";
}
var q = ctx.QueryParams.TryGetFirst("q");
if(TypeOf(q) != "String") q = "";
var offset = ParseLong(ctx.QueryParams.TryGetFirst("offset"));
@@ -79,7 +99,7 @@ func main(args)
if(TypeOf(limit) != "Long") limit = 20;
if(limit <= 0) limit = 20;
var res = DB.QueryPackages(q, offset*limit, limit);
var res = DB.QueryPackages(q, offset*limit, limit, undefined, filter);
if(TypeOf(res) != "List")
{
ctx.StatusCode=500;