Skip to content

Commit

Permalink
feat: add transferredOrRegistered name sort
Browse files Browse the repository at this point in the history
  • Loading branch information
Lemmmy committed Apr 27, 2022
1 parent b0864a3 commit 30d20e3
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 7 deletions.
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "krist",
"version": "3.0.1",
"version": "3.0.2",
"description": "The new Krist node written in TypeScript.",
"main": "dist/src/index.js",
"scripts": {
Expand Down
15 changes: 12 additions & 3 deletions src/krist/names/lookup.ts
Expand Up @@ -19,7 +19,7 @@
* For more project information, see <https://github.com/tmpim/krist>.
*/

import { Limit, Offset, Name, PaginatedResult } from "../../database";
import { Limit, Offset, Name, PaginatedResult, db } from "../../database";
import { InferAttributes, Op } from "sequelize";

import { sanitiseLimit, sanitiseOffset } from "../../utils";
Expand All @@ -28,11 +28,20 @@ export async function lookupNames(
addressList: string[] | undefined,
limit: Limit,
offset: Offset,
orderBy: keyof InferAttributes<Name> = "name",
orderBy: (keyof InferAttributes<Name>) | "transferredOrRegistered" = "name",
order: "ASC" | "DESC" = "ASC"
): Promise<PaginatedResult<Name>> {
return Name.findAndCountAll({
order: [[orderBy, order]],
order: [[
// Ordering by `transferred` can return null results and may not be the
// desireable ordering for the user, so `transferredOrRegistered` is an
// alternative option that falls back to `registered` if `transferred` is
// null.
orderBy === "transferredOrRegistered"
? db.fn("COALESCE", db.col("transferred"), db.col("registered"))
: orderBy,
order
]],
limit: sanitiseLimit(limit),
offset: sanitiseOffset(offset),
where: addressList ? { owner: {[Op.in]: addressList} } : undefined,
Expand Down
6 changes: 4 additions & 2 deletions src/webserver/routes/lookup/index.ts
Expand Up @@ -42,9 +42,11 @@ export const TRANSACTION_FIELDS: TransactionLookupFields[] = ["id", "from",
"to", "value", "time", "sent_name", "sent_metaname"];
// Valid fields to order name lookups by
export type NameLookupFields = "name" | "owner" | "original_owner" |
"registered" | "updated" | "transferred" | "a" | "unpaid";
"registered" | "updated" | "transferred" | "transferredOrRegistered" | "a" |
"unpaid";
export const NAME_FIELDS: NameLookupFields[] = ["name", "owner",
"original_owner", "registered", "updated", "transferred", "a", "unpaid"];
"original_owner", "registered", "updated", "transferred",
"transferredOrRegistered", "a", "unpaid"];

export type LookupQuery<T = unknown> = ReqQuery<{
limit?: string;
Expand Down
3 changes: 2 additions & 1 deletion src/webserver/routes/lookup/names.ts
Expand Up @@ -55,7 +55,8 @@ export default (): Router => {
* @apiUse LimitOffset
* @apiQuery {String} [orderBy=name] The field to order the
* results by. Must be one of `name`, `owner`, `original_owner`,
* `registered` `updated`, `transferred`, `a` or `unpaid`.
* `registered` `updated`, `transferred`, `transferredOrRegistered`,
* `a` or `unpaid`.
* @apiQuery {String} [order=ASC] The direction to order
* the results in. Must be one of `ASC` or `DESC`.
*
Expand Down

0 comments on commit 30d20e3

Please sign in to comment.