@igstack/app-catalog-backend-core 6.10.3 → 6.12.0
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/dist/db/syncAppCatalog.mjs +1 -1
- package/dist/generated/prisma/client.d.mts +1 -1
- package/dist/generated/prisma/client.mjs.map +1 -1
- package/dist/generated/prisma/commonInputTypes.d.mts +33 -3
- package/dist/generated/prisma/commonInputTypes.d.mts.map +1 -1
- package/dist/generated/prisma/enums.d.mts +6 -1
- package/dist/generated/prisma/enums.d.mts.map +1 -1
- package/dist/generated/prisma/internal/class.d.mts +84 -0
- package/dist/generated/prisma/internal/class.d.mts.map +1 -1
- package/dist/generated/prisma/internal/class.mjs +4 -4
- package/dist/generated/prisma/internal/class.mjs.map +1 -1
- package/dist/generated/prisma/internal/prismaNamespace.d.mts +617 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.mts.map +1 -1
- package/dist/generated/prisma/models/DbCommunityTool.d.mts +2852 -0
- package/dist/generated/prisma/models/DbCommunityTool.d.mts.map +1 -0
- package/dist/generated/prisma/models/DbCommunityToolLike.d.mts +1102 -0
- package/dist/generated/prisma/models/DbCommunityToolLike.d.mts.map +1 -0
- package/dist/generated/prisma/models/DbCommunityToolNamedOwner.d.mts +1034 -0
- package/dist/generated/prisma/models/DbCommunityToolNamedOwner.d.mts.map +1 -0
- package/dist/generated/prisma/models/DbCommunityToolOwner.d.mts +1034 -0
- package/dist/generated/prisma/models/DbCommunityToolOwner.d.mts.map +1 -0
- package/dist/generated/prisma/models/DbCommunityToolPin.d.mts +1110 -0
- package/dist/generated/prisma/models/DbCommunityToolPin.d.mts.map +1 -0
- package/dist/generated/prisma/models/DbCommunityToolTag.d.mts +1073 -0
- package/dist/generated/prisma/models/DbCommunityToolTag.d.mts.map +1 -0
- package/dist/generated/prisma/models/DbCommunityToolView.d.mts +1149 -0
- package/dist/generated/prisma/models/DbCommunityToolView.d.mts.map +1 -0
- package/dist/generated/prisma/models/DbFeedback.d.mts +361 -2
- package/dist/generated/prisma/models/DbFeedback.d.mts.map +1 -1
- package/dist/generated/prisma/models.d.mts +9 -2
- package/dist/index.d.mts +5 -2
- package/dist/index.mjs +3 -1
- package/dist/middleware/createAcMiddleware.d.mts.map +1 -1
- package/dist/middleware/createAcMiddleware.mjs +15 -1
- package/dist/middleware/createAcMiddleware.mjs.map +1 -1
- package/dist/middleware/database.d.mts +1 -1
- package/dist/middleware/types.d.mts +20 -1
- package/dist/middleware/types.d.mts.map +1 -1
- package/dist/modules/communityTools/capture.d.mts +27 -0
- package/dist/modules/communityTools/capture.d.mts.map +1 -0
- package/dist/modules/communityTools/capture.mjs +192 -0
- package/dist/modules/communityTools/capture.mjs.map +1 -0
- package/dist/modules/communityTools/healthJob.mjs +132 -0
- package/dist/modules/communityTools/healthJob.mjs.map +1 -0
- package/dist/modules/communityTools/router.d.mts +150 -0
- package/dist/modules/communityTools/router.d.mts.map +1 -0
- package/dist/modules/communityTools/router.mjs +91 -0
- package/dist/modules/communityTools/router.mjs.map +1 -0
- package/dist/modules/communityTools/service.mjs +255 -0
- package/dist/modules/communityTools/service.mjs.map +1 -0
- package/dist/modules/communityTools/toView.mjs +84 -0
- package/dist/modules/communityTools/toView.mjs.map +1 -0
- package/dist/modules/communityTools/writeService.d.mts +55 -0
- package/dist/modules/communityTools/writeService.d.mts.map +1 -0
- package/dist/modules/communityTools/writeService.mjs +280 -0
- package/dist/modules/communityTools/writeService.mjs.map +1 -0
- package/dist/modules/feedback/feedbackRouter.d.mts +3 -0
- package/dist/modules/feedback/feedbackRouter.mjs +6 -2
- package/dist/modules/feedback/feedbackRouter.mjs.map +1 -1
- package/dist/modules/feedback/service.d.mts +3 -0
- package/dist/modules/feedback/service.d.mts.map +1 -1
- package/dist/modules/feedback/service.mjs +50 -17
- package/dist/modules/feedback/service.mjs.map +1 -1
- package/dist/server/controller.d.mts +143 -0
- package/dist/server/controller.d.mts.map +1 -1
- package/dist/server/controller.mjs +2 -0
- package/dist/server/controller.mjs.map +1 -1
- package/dist/server/trpcSetup.mjs +1 -1
- package/package.json +12 -5
- package/prisma/schema.prisma +161 -0
- package/src/__tests__/communityTools.test.ts +800 -0
- package/src/__tests__/communityToolsCapture.test.ts +319 -0
- package/src/__tests__/communityToolsHealth.test.ts +154 -0
- package/src/__tests__/communityToolsRouter.test.ts +58 -0
- package/src/__tests__/communityToolsWrite.test.ts +562 -0
- package/src/__tests__/feedbackService.test.ts +160 -0
- package/src/generated/prisma/browser.ts +35 -0
- package/src/generated/prisma/client.ts +35 -0
- package/src/generated/prisma/commonInputTypes.ts +34 -0
- package/src/generated/prisma/enums.ts +8 -0
- package/src/generated/prisma/internal/class.ts +74 -4
- package/src/generated/prisma/internal/prismaNamespace.ts +635 -2
- package/src/generated/prisma/internal/prismaNamespaceBrowser.ts +95 -1
- package/src/generated/prisma/models/DbCommunityTool.ts +3135 -0
- package/src/generated/prisma/models/DbCommunityToolLike.ts +1313 -0
- package/src/generated/prisma/models/DbCommunityToolNamedOwner.ts +1243 -0
- package/src/generated/prisma/models/DbCommunityToolOwner.ts +1243 -0
- package/src/generated/prisma/models/DbCommunityToolPin.ts +1325 -0
- package/src/generated/prisma/models/DbCommunityToolTag.ts +1283 -0
- package/src/generated/prisma/models/DbCommunityToolView.ts +1361 -0
- package/src/generated/prisma/models/DbFeedback.ts +379 -1
- package/src/generated/prisma/models.ts +7 -0
- package/src/index.ts +16 -0
- package/src/middleware/createAcMiddleware.ts +20 -0
- package/src/middleware/types.ts +21 -0
- package/src/modules/communityTools/capture.ts +332 -0
- package/src/modules/communityTools/healthJob.ts +191 -0
- package/src/modules/communityTools/router.ts +172 -0
- package/src/modules/communityTools/service.ts +383 -0
- package/src/modules/communityTools/toView.ts +119 -0
- package/src/modules/communityTools/writeService.ts +408 -0
- package/src/modules/feedback/feedbackRouter.ts +20 -6
- package/src/modules/feedback/service.ts +68 -12
- package/src/server/controller.ts +8 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
3
|
+
import * as dbClient from '../db/client'
|
|
4
|
+
import type { PrismaClient } from '../generated/prisma/client'
|
|
5
|
+
import {
|
|
6
|
+
addFeedback,
|
|
7
|
+
dismissFeedback,
|
|
8
|
+
editFeedback,
|
|
9
|
+
listFeedback,
|
|
10
|
+
} from '../modules/feedback/service'
|
|
11
|
+
|
|
12
|
+
const NOW = new Date('2026-10-21T12:00:00.000Z')
|
|
13
|
+
const actor = {
|
|
14
|
+
hash: 'hash-user-1',
|
|
15
|
+
publicId: 'pub-user-1',
|
|
16
|
+
alias: 'Calm Otter',
|
|
17
|
+
kind: 'user' as const,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function row(fields: Record<string, unknown> = {}) {
|
|
21
|
+
return {
|
|
22
|
+
id: 'fb-1',
|
|
23
|
+
authorHash: 'hash-user-1',
|
|
24
|
+
authorAlias: 'Calm Otter',
|
|
25
|
+
authorName: null,
|
|
26
|
+
body: 'hi',
|
|
27
|
+
subject: null,
|
|
28
|
+
kind: null,
|
|
29
|
+
status: null,
|
|
30
|
+
reviewerReply: null,
|
|
31
|
+
reviewedAt: null,
|
|
32
|
+
editedAt: null,
|
|
33
|
+
createdAt: NOW,
|
|
34
|
+
resource: null,
|
|
35
|
+
attachments: [],
|
|
36
|
+
...fields,
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
describe('Feedback service', () => {
|
|
41
|
+
let db: ReturnType<typeof makeDb>
|
|
42
|
+
|
|
43
|
+
function makeDb() {
|
|
44
|
+
const d = {
|
|
45
|
+
$transaction: vi.fn((fn: (tx: unknown) => Promise<unknown>) => fn(d)),
|
|
46
|
+
dbCommunityTool: {
|
|
47
|
+
findUnique: vi.fn().mockResolvedValue({ id: 'tool-1' }),
|
|
48
|
+
},
|
|
49
|
+
dbResource: { findUnique: vi.fn().mockResolvedValue(null) },
|
|
50
|
+
dbFeedback: {
|
|
51
|
+
create: vi.fn().mockResolvedValue({ id: 'fb-1' }),
|
|
52
|
+
findUniqueOrThrow: vi.fn(),
|
|
53
|
+
findMany: vi.fn().mockResolvedValue([]),
|
|
54
|
+
findUnique: vi.fn(),
|
|
55
|
+
update: vi.fn(),
|
|
56
|
+
delete: vi.fn(),
|
|
57
|
+
},
|
|
58
|
+
dbFeedbackAttachment: { updateMany: vi.fn() },
|
|
59
|
+
}
|
|
60
|
+
return d
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
beforeEach(() => {
|
|
64
|
+
db = makeDb()
|
|
65
|
+
vi.spyOn(dbClient, 'getDbClient').mockReturnValue(
|
|
66
|
+
db as unknown as PrismaClient,
|
|
67
|
+
)
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
afterEach(() => {
|
|
71
|
+
vi.restoreAllMocks()
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
it('comment by signed-in user stores authorName', async () => {
|
|
75
|
+
db.dbFeedback.findUniqueOrThrow.mockResolvedValue(
|
|
76
|
+
row({ authorName: 'Ann Owner' }),
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
const view = await addFeedback(
|
|
80
|
+
{ communityToolSlug: 'my-tool', body: 'hi' },
|
|
81
|
+
actor,
|
|
82
|
+
{ id: 'user-1', name: 'Ann Owner' },
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
expect(db.dbFeedback.create.mock.calls[0]?.[0].data).toMatchObject({
|
|
86
|
+
resourceId: null,
|
|
87
|
+
communityToolId: 'tool-1',
|
|
88
|
+
authorUserId: 'user-1',
|
|
89
|
+
authorName: 'Ann Owner',
|
|
90
|
+
subject: null,
|
|
91
|
+
})
|
|
92
|
+
expect(view.authorName).toBe('Ann Owner')
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
it('anonymous comment keeps the alias as its name', async () => {
|
|
96
|
+
db.dbFeedback.findUniqueOrThrow.mockResolvedValue(row())
|
|
97
|
+
|
|
98
|
+
const view = await addFeedback(
|
|
99
|
+
{ communityToolSlug: 'my-tool', body: 'hi' },
|
|
100
|
+
{ ...actor, kind: 'visitor' },
|
|
101
|
+
null,
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
expect(db.dbFeedback.create.mock.calls[0]?.[0].data).toMatchObject({
|
|
105
|
+
authorUserId: null,
|
|
106
|
+
authorName: null,
|
|
107
|
+
})
|
|
108
|
+
expect(view.authorName).toBe('Calm Otter')
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
it('lists a community tool thread', async () => {
|
|
112
|
+
db.dbFeedback.findMany.mockResolvedValue([row()])
|
|
113
|
+
|
|
114
|
+
const list = await listFeedback({ communityToolSlug: 'my-tool' }, actor)
|
|
115
|
+
|
|
116
|
+
expect(db.dbFeedback.findMany.mock.calls[0]?.[0].where).toEqual({
|
|
117
|
+
communityToolId: 'tool-1',
|
|
118
|
+
})
|
|
119
|
+
expect(list.openCount).toBe(1)
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
describe("a community tool's review marker", () => {
|
|
123
|
+
const marker = row({ kind: 'marker', body: 'New tool added: My Tool' })
|
|
124
|
+
|
|
125
|
+
it('is a system line, not the publisher’s own note', async () => {
|
|
126
|
+
db.dbFeedback.findMany.mockResolvedValue([marker])
|
|
127
|
+
|
|
128
|
+
const { items } = await listFeedback(
|
|
129
|
+
{ communityToolSlug: 'my-tool' },
|
|
130
|
+
actor,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
expect(items[0]).toMatchObject({
|
|
134
|
+
isSystem: true,
|
|
135
|
+
isMine: false,
|
|
136
|
+
canEditUntil: null,
|
|
137
|
+
})
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
it('cannot be withdrawn by the publisher', async () => {
|
|
141
|
+
db.dbFeedback.findUnique.mockResolvedValue(marker)
|
|
142
|
+
|
|
143
|
+
await expect(dismissFeedback('fb-1', actor)).rejects.toMatchObject({
|
|
144
|
+
reason: 'not-author',
|
|
145
|
+
})
|
|
146
|
+
expect(db.dbFeedback.delete).not.toHaveBeenCalled()
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
it('cannot be edited by the publisher', async () => {
|
|
150
|
+
db.dbFeedback.findUnique.mockResolvedValue(marker)
|
|
151
|
+
|
|
152
|
+
await expect(
|
|
153
|
+
editFeedback('fb-1', 'rewritten', actor),
|
|
154
|
+
).rejects.toMatchObject({
|
|
155
|
+
reason: 'not-author',
|
|
156
|
+
})
|
|
157
|
+
expect(db.dbFeedback.update).not.toHaveBeenCalled()
|
|
158
|
+
})
|
|
159
|
+
})
|
|
160
|
+
})
|
|
@@ -107,3 +107,38 @@ export type Source = Prisma.SourceModel
|
|
|
107
107
|
*
|
|
108
108
|
*/
|
|
109
109
|
export type SourceReference = Prisma.SourceReferenceModel
|
|
110
|
+
/**
|
|
111
|
+
* Model DbCommunityTool
|
|
112
|
+
* A community-contributed tool or resource shared by catalog users.
|
|
113
|
+
*/
|
|
114
|
+
export type DbCommunityTool = Prisma.DbCommunityToolModel
|
|
115
|
+
/**
|
|
116
|
+
* Model DbCommunityToolOwner
|
|
117
|
+
* Many-to-many join between community tools and their owners.
|
|
118
|
+
*/
|
|
119
|
+
export type DbCommunityToolOwner = Prisma.DbCommunityToolOwnerModel
|
|
120
|
+
/**
|
|
121
|
+
* Model DbCommunityToolLike
|
|
122
|
+
* A signed-in person liked the tool; their name is kept for "Liked by".
|
|
123
|
+
*/
|
|
124
|
+
export type DbCommunityToolLike = Prisma.DbCommunityToolLikeModel
|
|
125
|
+
/**
|
|
126
|
+
* Model DbCommunityToolNamedOwner
|
|
127
|
+
* An owner outside the person directory: shown by name, never an editor.
|
|
128
|
+
*/
|
|
129
|
+
export type DbCommunityToolNamedOwner = Prisma.DbCommunityToolNamedOwnerModel
|
|
130
|
+
/**
|
|
131
|
+
* Model DbCommunityToolTag
|
|
132
|
+
* Tags attached to community tools (app associations and topics).
|
|
133
|
+
*/
|
|
134
|
+
export type DbCommunityToolTag = Prisma.DbCommunityToolTagModel
|
|
135
|
+
/**
|
|
136
|
+
* Model DbCommunityToolView
|
|
137
|
+
* View tracking for community tools (one row per viewer per tool per day).
|
|
138
|
+
*/
|
|
139
|
+
export type DbCommunityToolView = Prisma.DbCommunityToolViewModel
|
|
140
|
+
/**
|
|
141
|
+
* Model DbCommunityToolPin
|
|
142
|
+
* User-specific tool pins for personalized ordering.
|
|
143
|
+
*/
|
|
144
|
+
export type DbCommunityToolPin = Prisma.DbCommunityToolPinModel
|
|
@@ -131,3 +131,38 @@ export type Source = Prisma.SourceModel
|
|
|
131
131
|
*
|
|
132
132
|
*/
|
|
133
133
|
export type SourceReference = Prisma.SourceReferenceModel
|
|
134
|
+
/**
|
|
135
|
+
* Model DbCommunityTool
|
|
136
|
+
* A community-contributed tool or resource shared by catalog users.
|
|
137
|
+
*/
|
|
138
|
+
export type DbCommunityTool = Prisma.DbCommunityToolModel
|
|
139
|
+
/**
|
|
140
|
+
* Model DbCommunityToolOwner
|
|
141
|
+
* Many-to-many join between community tools and their owners.
|
|
142
|
+
*/
|
|
143
|
+
export type DbCommunityToolOwner = Prisma.DbCommunityToolOwnerModel
|
|
144
|
+
/**
|
|
145
|
+
* Model DbCommunityToolLike
|
|
146
|
+
* A signed-in person liked the tool; their name is kept for "Liked by".
|
|
147
|
+
*/
|
|
148
|
+
export type DbCommunityToolLike = Prisma.DbCommunityToolLikeModel
|
|
149
|
+
/**
|
|
150
|
+
* Model DbCommunityToolNamedOwner
|
|
151
|
+
* An owner outside the person directory: shown by name, never an editor.
|
|
152
|
+
*/
|
|
153
|
+
export type DbCommunityToolNamedOwner = Prisma.DbCommunityToolNamedOwnerModel
|
|
154
|
+
/**
|
|
155
|
+
* Model DbCommunityToolTag
|
|
156
|
+
* Tags attached to community tools (app associations and topics).
|
|
157
|
+
*/
|
|
158
|
+
export type DbCommunityToolTag = Prisma.DbCommunityToolTagModel
|
|
159
|
+
/**
|
|
160
|
+
* Model DbCommunityToolView
|
|
161
|
+
* View tracking for community tools (one row per viewer per tool per day).
|
|
162
|
+
*/
|
|
163
|
+
export type DbCommunityToolView = Prisma.DbCommunityToolViewModel
|
|
164
|
+
/**
|
|
165
|
+
* Model DbCommunityToolPin
|
|
166
|
+
* User-specific tool pins for personalized ordering.
|
|
167
|
+
*/
|
|
168
|
+
export type DbCommunityToolPin = Prisma.DbCommunityToolPinModel
|
|
@@ -372,6 +372,23 @@ export type EnumAssetTypeWithAggregatesFilter<$PrismaModel = never> = {
|
|
|
372
372
|
_max?: Prisma.NestedEnumAssetTypeFilter<$PrismaModel>
|
|
373
373
|
}
|
|
374
374
|
|
|
375
|
+
export type EnumCommunityTagKindFilter<$PrismaModel = never> = {
|
|
376
|
+
equals?: $Enums.CommunityTagKind | Prisma.EnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
377
|
+
in?: $Enums.CommunityTagKind[] | Prisma.ListEnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
378
|
+
notIn?: $Enums.CommunityTagKind[] | Prisma.ListEnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
379
|
+
not?: Prisma.NestedEnumCommunityTagKindFilter<$PrismaModel> | $Enums.CommunityTagKind
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
export type EnumCommunityTagKindWithAggregatesFilter<$PrismaModel = never> = {
|
|
383
|
+
equals?: $Enums.CommunityTagKind | Prisma.EnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
384
|
+
in?: $Enums.CommunityTagKind[] | Prisma.ListEnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
385
|
+
notIn?: $Enums.CommunityTagKind[] | Prisma.ListEnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
386
|
+
not?: Prisma.NestedEnumCommunityTagKindWithAggregatesFilter<$PrismaModel> | $Enums.CommunityTagKind
|
|
387
|
+
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
|
388
|
+
_min?: Prisma.NestedEnumCommunityTagKindFilter<$PrismaModel>
|
|
389
|
+
_max?: Prisma.NestedEnumCommunityTagKindFilter<$PrismaModel>
|
|
390
|
+
}
|
|
391
|
+
|
|
375
392
|
export type NestedStringFilter<$PrismaModel = never> = {
|
|
376
393
|
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
|
|
377
394
|
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
|
|
@@ -689,4 +706,21 @@ export type NestedEnumAssetTypeWithAggregatesFilter<$PrismaModel = never> = {
|
|
|
689
706
|
_max?: Prisma.NestedEnumAssetTypeFilter<$PrismaModel>
|
|
690
707
|
}
|
|
691
708
|
|
|
709
|
+
export type NestedEnumCommunityTagKindFilter<$PrismaModel = never> = {
|
|
710
|
+
equals?: $Enums.CommunityTagKind | Prisma.EnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
711
|
+
in?: $Enums.CommunityTagKind[] | Prisma.ListEnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
712
|
+
notIn?: $Enums.CommunityTagKind[] | Prisma.ListEnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
713
|
+
not?: Prisma.NestedEnumCommunityTagKindFilter<$PrismaModel> | $Enums.CommunityTagKind
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
export type NestedEnumCommunityTagKindWithAggregatesFilter<$PrismaModel = never> = {
|
|
717
|
+
equals?: $Enums.CommunityTagKind | Prisma.EnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
718
|
+
in?: $Enums.CommunityTagKind[] | Prisma.ListEnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
719
|
+
notIn?: $Enums.CommunityTagKind[] | Prisma.ListEnumCommunityTagKindFieldRefInput<$PrismaModel>
|
|
720
|
+
not?: Prisma.NestedEnumCommunityTagKindWithAggregatesFilter<$PrismaModel> | $Enums.CommunityTagKind
|
|
721
|
+
_count?: Prisma.NestedIntFilter<$PrismaModel>
|
|
722
|
+
_min?: Prisma.NestedEnumCommunityTagKindFilter<$PrismaModel>
|
|
723
|
+
_max?: Prisma.NestedEnumCommunityTagKindFilter<$PrismaModel>
|
|
724
|
+
}
|
|
725
|
+
|
|
692
726
|
|
|
@@ -34,3 +34,11 @@ export const AssetType = {
|
|
|
34
34
|
} as const
|
|
35
35
|
|
|
36
36
|
export type AssetType = (typeof AssetType)[keyof typeof AssetType]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
export const CommunityTagKind = {
|
|
40
|
+
app: 'app',
|
|
41
|
+
topic: 'topic'
|
|
42
|
+
} as const
|
|
43
|
+
|
|
44
|
+
export type CommunityTagKind = (typeof CommunityTagKind)[keyof typeof CommunityTagKind]
|