Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions js/src/lib/api/utils/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import type { Api } from "@/lib/api/types";

import { PARENT_TAGS_TO_CHILD_TAGS } from "@/lib/api/types/complex";
import {
PARENT_TAGS_TO_CHILD_TAGS,
TOPIC_METADATA_LIST,
} from "@/lib/api/types/complex";
import { LeetcodeTopicEnum, Tag } from "@/lib/api/types/schema";
import {
TAG_METADATA_LIST,
UNUSED_TAGS,
NON_SCHOOL_TAGS,
} from "@/lib/api/utils/metadata/tag";
import { TOPIC_METADATA_LIST } from "@/lib/api/utils/metadata/topic";
import { ApiTypeUtils } from "@/lib/api/utils/types";

/**
Expand Down
87 changes: 0 additions & 87 deletions js/src/lib/api/utils/metadata/topic/index.ts

This file was deleted.

10 changes: 5 additions & 5 deletions js/src/lib/api/utils/types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import type { Api } from "@/lib/api/types";

import { TagMetadataObject } from "@/lib/api/types/complex";
import {
TagMetadataObject,
TopicMetadataObject,
} from "@/lib/api/types/complex";
import { Tag } from "@/lib/api/types/schema";
import { UNUSED_TAGS } from "@/lib/api/utils/metadata/tag";

Expand Down Expand Up @@ -42,8 +45,5 @@ export namespace ApiTypeUtils {
/**
* Pretty name for the given topic.
*/
export type QuestionTopicTopicMetadata = {
name: string;
aliases?: string[];
};
export type QuestionTopicTopicMetadata = TopicMetadataObject;
}
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move this to the org.patinanetwork.codebloom.shared package

Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
package org.patinanetwork.codebloom.common.db.models.question.topic;

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public final class TopicMetadataList {
private TopicMetadataList() {}

public static final Map<LeetcodeTopicEnum, TopicMetadataObject> ENUM_TO_TOPIC_METADATA =
Collections.unmodifiableMap(generate());

private static Map<LeetcodeTopicEnum, TopicMetadataObject> generate() {
return Arrays.stream(LeetcodeTopicEnum.values())
.collect(Collectors.toMap(
topic -> topic, TopicMetadataList::buildMetadata, (a, b) -> a, LinkedHashMap::new));
}

private static TopicMetadataObject buildMetadata(LeetcodeTopicEnum topic) {
return switch (topic) {
case STACK -> TopicMetadataObject.builder().name("Stack").build();
case DATA_STREAM ->
TopicMetadataObject.builder().name("Data Stream").build();
case REJECTION_SAMPLING ->
TopicMetadataObject.builder().name("Rejection Sampling").build();
case GEOMETRY -> TopicMetadataObject.builder().name("Geometry").build();
case COUNTING -> TopicMetadataObject.builder().name("Counting").build();
case DESIGN -> TopicMetadataObject.builder().name("Design").build();
case PROBABILITY_AND_STATISTICS ->
TopicMetadataObject.builder().name("Probability and Statistics").build();
case MINIMUM_SPANNING_TREE ->
TopicMetadataObject.builder()
.name("Minimum Spanning Tree")
.aliases(List.of("MST"))
.build();
case LINE_SWEEP -> TopicMetadataObject.builder().name("Line Sweep").build();
case NUMBER_THEORY ->
TopicMetadataObject.builder().name("Number Theory").build();
case ROLLING_HASH ->
TopicMetadataObject.builder().name("Rolling Hash").build();
case SEGMENT_TREE ->
TopicMetadataObject.builder().name("Segment Tree").build();
case BICONNECTED_COMPONENT ->
TopicMetadataObject.builder().name("Biconnected Component").build();
case MONOTONIC_STACK ->
TopicMetadataObject.builder().name("Monotonic Stack").build();
case ITERATOR -> TopicMetadataObject.builder().name("Iterator").build();
case QUEUE -> TopicMetadataObject.builder().name("Queue").build();
case RADIX_SORT -> TopicMetadataObject.builder().name("Radix Sort").build();
case BUCKET_SORT ->
TopicMetadataObject.builder().name("Bucket Sort").build();
case SHELL -> TopicMetadataObject.builder().name("Shell Sort").build();
case MEMOIZATION ->
TopicMetadataObject.builder().name("Memoization").build();
case STRING -> TopicMetadataObject.builder().name("String").build();
case PREFIX_SUM -> TopicMetadataObject.builder().name("Prefix Sum").build();
case CONCURRENCY ->
TopicMetadataObject.builder().name("Concurrency").build();
case DATABASE ->
TopicMetadataObject.builder()
.name("Database")
.aliases(List.of("DB"))
.build();
case SHORTEST_PATH ->
TopicMetadataObject.builder().name("Shortest Path").build();
case SORTING -> TopicMetadataObject.builder().name("Sorting").build();
case LINKED_LIST ->
TopicMetadataObject.builder().name("Linked List").build();
case SLIDING_WINDOW ->
TopicMetadataObject.builder().name("Sliding Window").build();
case SUFFIX_ARRAY ->
TopicMetadataObject.builder().name("Suffix Array").build();
case DOUBLY_LINKED_LIST ->
TopicMetadataObject.builder().name("Doubly Linked List").build();
case SIMULATION -> TopicMetadataObject.builder().name("Simulation").build();
case ORDERED_SET ->
TopicMetadataObject.builder().name("Ordered Set").build();
case GRAPH -> TopicMetadataObject.builder().name("Graph").build();
case MATH -> TopicMetadataObject.builder().name("Math").build();
case ORDERED_MAP ->
TopicMetadataObject.builder().name("Ordered Map").build();
case GAME_THEORY ->
TopicMetadataObject.builder().name("Game Theory").build();
case DYNAMIC_PROGRAMMING ->
TopicMetadataObject.builder()
.name("Dynamic Programming")
.aliases(List.of("DP"))
.build();
case RECURSION -> TopicMetadataObject.builder().name("Recursion").build();
case MONOTONIC_QUEUE ->
TopicMetadataObject.builder().name("Monotonic Queue").build();
case MATRIX -> TopicMetadataObject.builder().name("Matrix").build();
case RESERVOIR_SAMPLING ->
TopicMetadataObject.builder().name("Reservoir Sampling").build();
case MERGE_SORT -> TopicMetadataObject.builder().name("Merge Sort").build();
case COMBINATORICS ->
TopicMetadataObject.builder().name("Combinatorics").build();
case INTERACTIVE ->
TopicMetadataObject.builder().name("Interactive").build();
case BINARY_TREE ->
TopicMetadataObject.builder().name("Binary Tree").build();
case RANDOMIZED -> TopicMetadataObject.builder().name("Randomized").build();
case BITMASK -> TopicMetadataObject.builder().name("Bitmask").build();
case BREADTH_FIRST_SEARCH ->
TopicMetadataObject.builder()
.name("Breadth-First Search")
.aliases(List.of("BFS"))
.build();
case STRING_MATCHING ->
TopicMetadataObject.builder().name("String Matching").build();
case GREEDY -> TopicMetadataObject.builder().name("Greedy").build();
case BRAINTEASER ->
TopicMetadataObject.builder().name("Brainteaser").build();
case BACKTRACKING ->
TopicMetadataObject.builder().name("Backtracking").build();
case BIT_MANIPULATION ->
TopicMetadataObject.builder().name("Bit Manipulation").build();
case UNION_FIND -> TopicMetadataObject.builder().name("Union-Find").build();
case BINARY_SEARCH_TREE ->
TopicMetadataObject.builder()
.name("Binary Search Tree")
.aliases(List.of("BST"))
.build();
case TWO_POINTERS ->
TopicMetadataObject.builder().name("Two Pointers").build();
case ARRAY -> TopicMetadataObject.builder().name("Array").build();
case DEPTH_FIRST_SEARCH ->
TopicMetadataObject.builder()
.name("Depth-First Search")
.aliases(List.of("DFS"))
.build();
case EULERIAN_CIRCUIT ->
TopicMetadataObject.builder().name("Eulerian Circuit").build();
case TREE -> TopicMetadataObject.builder().name("Tree").build();
case BINARY_SEARCH ->
TopicMetadataObject.builder()
.name("Binary Search")
.aliases(List.of("BS"))
.build();
case STRONGLY_CONNECTED_COMPONENT ->
TopicMetadataObject.builder()
.name("Strongly Connected Component")
.build();
case ENUMERATION ->
TopicMetadataObject.builder().name("Enumeration").build();
case HEAP_PRIORITY_QUEUE ->
TopicMetadataObject.builder().name("Heap / Priority Queue").build();
case DIVIDE_AND_CONQUER ->
TopicMetadataObject.builder().name("Divide and Conquer").build();
case HASH_FUNCTION ->
TopicMetadataObject.builder().name("Hash Function").build();
case HASH_TABLE -> TopicMetadataObject.builder().name("Hash Table").build();
case TRIE -> TopicMetadataObject.builder().name("Trie").build();
case TOPOLOGICAL_SORT ->
TopicMetadataObject.builder().name("Topological Sort").build();
case QUICKSELECT ->
TopicMetadataObject.builder().name("Quickselect").build();
case BINARY_INDEXED_TREE ->
TopicMetadataObject.builder().name("Binary Indexed Tree").build();
case COUNTING_SORT ->
TopicMetadataObject.builder().name("Counting Sort").build();
case UNKNOWN -> TopicMetadataObject.builder().name("Unknown").build();
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.patinanetwork.codebloom.common.db.models.question.topic;

import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.List;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TopicMetadataObject {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it might be good to create an interface called TypableObject that exports a getTsType method so we can inforce a shared way to get the type out (as well as some useful documentation about how it should work)

public static final String TS_TYPE =
"export type TopicMetadataObject = {\n" + " name: string;\n" + " aliases?: string[];\n" + "};\n\n";
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make this a multi line string so it's easier to edit & parse (with .stripIdent() to normalize the zero-point pad size)


private final String name;
private final List<String> aliases;
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
package org.patinanetwork.codebloom.shared.tag;

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import org.patinanetwork.codebloom.common.db.models.usertag.Tag;

public class TagMetadataList {
public static final Map<Tag, Map<String, String>> ENUM_TO_STRING_VALUE_MAP = generate();
public static final String TS_TYPE = "export type TagMetadataObject = {\n"
+ " shortName: string;\n"
+ " name: string;\n"
+ " apiKey: string;\n"
+ " alt: string;\n"
+ "};\n\n";
Comment on lines +11 to +16
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make this a multi line string so it's easier to edit & parse (with .stripIdent() to normalize the zero-point pad size)


public static final Map<Tag, Map<String, String>> ENUM_TO_STRING_VALUE_MAP =
Collections.unmodifiableMap(generate());

private static Map<Tag, Map<String, String>> generate() {
return Arrays.stream(Tag.values())
Expand Down
Loading
Loading