@nubase/create 0.1.23 → 0.1.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/templates/backend/src/api/routes/ticket.ts +13 -1
- package/templates/backend/src/api/routes/user.ts +13 -1
- package/templates/frontend/src/resources/user.ts +2 -1
- package/templates/schema/src/endpoints/ticket/get-tickets.ts +2 -2
- package/templates/schema/src/endpoints/user/get-users.ts +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHttpHandler, HttpError } from "@nubase/backend";
|
|
2
2
|
import type { SQL } from "drizzle-orm";
|
|
3
|
-
import { and, eq, ilike, inArray } from "drizzle-orm";
|
|
3
|
+
import { and, eq, ilike, inArray, or } from "drizzle-orm";
|
|
4
4
|
import { apiEndpoints } from "schema";
|
|
5
5
|
import { getDb } from "../../db/helpers/drizzle";
|
|
6
6
|
import { tickets } from "../../db/schema";
|
|
@@ -14,6 +14,18 @@ export const ticketHandlers = {
|
|
|
14
14
|
// Build filter conditions
|
|
15
15
|
const conditions: SQL[] = [];
|
|
16
16
|
|
|
17
|
+
// Global text search - OR across searchable text fields
|
|
18
|
+
if (params.q) {
|
|
19
|
+
const searchTerm = `%${params.q}%`;
|
|
20
|
+
const searchCondition = or(
|
|
21
|
+
ilike(tickets.title, searchTerm),
|
|
22
|
+
ilike(tickets.description, searchTerm),
|
|
23
|
+
);
|
|
24
|
+
if (searchCondition) {
|
|
25
|
+
conditions.push(searchCondition);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
17
29
|
// Filter by title (case-insensitive partial match)
|
|
18
30
|
if (params.title) {
|
|
19
31
|
conditions.push(ilike(tickets.title, `%${params.title}%`));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHttpHandler, HttpError } from "@nubase/backend";
|
|
2
2
|
import type { SQL } from "drizzle-orm";
|
|
3
|
-
import { and, eq, ilike } from "drizzle-orm";
|
|
3
|
+
import { and, eq, ilike, or } from "drizzle-orm";
|
|
4
4
|
import { apiEndpoints } from "schema";
|
|
5
5
|
import { getDb } from "../../db/helpers/drizzle";
|
|
6
6
|
import { users } from "../../db/schema";
|
|
@@ -15,6 +15,18 @@ export const userHandlers = {
|
|
|
15
15
|
// Build filter conditions
|
|
16
16
|
const conditions: SQL[] = [];
|
|
17
17
|
|
|
18
|
+
// Global text search - OR across searchable text fields
|
|
19
|
+
if (params.q) {
|
|
20
|
+
const searchTerm = `%${params.q}%`;
|
|
21
|
+
const searchCondition = or(
|
|
22
|
+
ilike(users.displayName, searchTerm),
|
|
23
|
+
ilike(users.email, searchTerm),
|
|
24
|
+
);
|
|
25
|
+
if (searchCondition) {
|
|
26
|
+
conditions.push(searchCondition);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
18
30
|
// Filter by displayName (case-insensitive partial match)
|
|
19
31
|
if (params.displayName) {
|
|
20
32
|
conditions.push(ilike(users.displayName, `%${params.displayName}%`));
|
|
@@ -100,12 +100,13 @@ export const userResource = createResource("user")
|
|
|
100
100
|
id: "search-users",
|
|
101
101
|
title: "Users",
|
|
102
102
|
schemaGet: (api) => api.getUsers.responseBody,
|
|
103
|
+
schemaFilter: (api) => api.getUsers.requestParams,
|
|
103
104
|
breadcrumbs: () => [{ label: "Users", to: "/r/user/search" }],
|
|
104
105
|
tableActions: ["delete"],
|
|
105
106
|
rowActions: ["delete"],
|
|
106
107
|
onLoad: async ({ context }) => {
|
|
107
108
|
return context.http.getUsers({
|
|
108
|
-
params: {},
|
|
109
|
+
params: context.params || {},
|
|
109
110
|
});
|
|
110
111
|
},
|
|
111
112
|
},
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { nu, type RequestSchema } from "@nubase/core";
|
|
1
|
+
import { nu, type RequestSchema, withSearchParams } from "@nubase/core";
|
|
2
2
|
import { ticketSchema } from "../../resources/ticket";
|
|
3
3
|
|
|
4
4
|
export const getTicketsSchema = {
|
|
5
5
|
method: "GET" as const,
|
|
6
6
|
path: "/tickets",
|
|
7
|
-
requestParams: ticketSchema.omit("id").partial(),
|
|
7
|
+
requestParams: withSearchParams(ticketSchema.omit("id").partial()),
|
|
8
8
|
responseBody: nu.array(ticketSchema),
|
|
9
9
|
} satisfies RequestSchema;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { nu, type RequestSchema } from "@nubase/core";
|
|
1
|
+
import { nu, type RequestSchema, withSearchParams } from "@nubase/core";
|
|
2
2
|
import { userSchema } from "../../resources/user";
|
|
3
3
|
|
|
4
4
|
export const getUsersSchema = {
|
|
5
5
|
method: "GET" as const,
|
|
6
6
|
path: "/users",
|
|
7
|
-
requestParams: userSchema.omit("id").partial(),
|
|
7
|
+
requestParams: withSearchParams(userSchema.omit("id").partial()),
|
|
8
8
|
responseBody: nu.array(userSchema),
|
|
9
9
|
} satisfies RequestSchema;
|