Skip to content

Commit aa225d7

Browse files
committed
Enhance tag fetching functionality by adding search capability in getTags action. Update TagRepositoryInput to include optional search parameter. Refactor ArticlePage component imports for better organization and clarity.
1 parent a89f382 commit aa225d7

File tree

6 files changed

+12
-8
lines changed

6 files changed

+12
-8
lines changed

src/app/[username]/[articleHandle]/page.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import HomeLeftSidebar from "@/app/(home)/_components/HomeLeftSidebar";
2+
import { persistenceRepository } from "@/backend/persistence-repositories";
3+
import { eq } from "@/backend/persistence/persistence-where-operator";
24
import * as articleActions from "@/backend/services/article.actions";
35
import AppImage from "@/components/AppImage";
4-
import type { Article, WithContext } from "schema-dts";
56
import HomepageLayout from "@/components/layout/HomepageLayout";
67
import { readingTime, removeMarkdownSyntax } from "@/lib/utils";
8+
import getFileUrl from "@/utils/getFileUrl";
79
import { markdocParser } from "@/utils/markdoc-parser";
8-
import { Metadata, NextPage, ResolvingMetadata } from "next";
10+
import { Metadata, NextPage } from "next";
911
import Image from "next/image";
1012
import Link from "next/link";
1113
import { notFound } from "next/navigation";
14+
import type { Article, WithContext } from "schema-dts";
1215
import ArticleSidebar from "./_components/ArticleSidebar";
13-
import getFileUrl from "@/utils/getFileUrl";
14-
import { persistenceRepository } from "@/backend/persistence-repositories";
15-
import { eq } from "@/backend/persistence/persistence-where-operator";
1616

1717
interface ArticlePageProps {
1818
params: Promise<{

src/app/test/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { getTags } from "@/backend/services/tag.action";
22
import React from "react";
33

44
const Page = async () => {
5-
const tags = await getTags({ page: 1, limit: -1 });
5+
const tags = await getTags({ page: 1, limit: -1, search: "ww" });
66
return <pre className="p-10">{JSON.stringify(tags, null, 2)}</pre>;
77
};
88

src/backend/persistence/persistence-contracts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export interface IPersistenceJoin {
6161
columns: string[];
6262
}
6363

64-
export interface IPersistentPaginationPayload<T, U = any> {
64+
export interface IPersistentPaginationPayload<T> {
6565
where?: WhereCondition<T>;
6666
joins?: IPersistenceJoin[];
6767
orderBy?: Array<IPersistentOrderBy<T>>;

src/backend/persistence/persistence.repository.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
toSnakeCase,
1717
} from "./persistence-utils";
1818
import { removeNullOrUndefinedFromObject } from "@/lib/utils";
19+
import { and } from "./persistence-where-operator";
1920

2021
export class PersistentRepository<DOMAIN_MODEL_TYPE> {
2122
constructor(
@@ -67,6 +68,7 @@ export class PersistentRepository<DOMAIN_MODEL_TYPE> {
6768
payload.columns
6869
?.map((col) => `${this.tableName}.${col.toString()}`)
6970
.join(",") ?? `${this.tableName}.*`;
71+
7072
const { whereClause, values } = buildWhereClause(payload.where);
7173
const orderByClause = buildOrderByClause(payload?.orderBy);
7274
const { joinConditionClause, joinSelectClause } = buildJoinClause(

src/backend/services/inputs/tag.input.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { color } from "@cloudinary/url-gen/qualifiers/background";
21
import { z } from "zod";
32

43
export const TagRepositoryInput = {
54
findAllInput: z.object({
65
page: z.number().default(1),
76
limit: z.number().default(10),
7+
search: z.string().optional().nullable(),
88
}),
99
createInput: z.object({
1010
name: z.string(),

src/backend/services/tag.action.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { z } from "zod";
44
import { persistenceRepository } from "../persistence-repositories";
55
import { TagRepositoryInput } from "./inputs/tag.input";
66
import { handleRepositoryException } from "./RepositoryException";
7+
import { like } from "../persistence/persistence-where-operator";
78

89
export const getTags = async (
910
_input: z.infer<typeof TagRepositoryInput.findAllInput>
@@ -13,6 +14,7 @@ export const getTags = async (
1314
return persistenceRepository.tags.findAllWithPagination({
1415
page: input.page,
1516
limit: input.limit,
17+
where: input.search ? like("name", `%${input.search}%`) : undefined,
1618
});
1719
} catch (error) {
1820
handleRepositoryException(error);

0 commit comments

Comments
 (0)