-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpost.ts
More file actions
78 lines (66 loc) · 1.74 KB
/
post.ts
File metadata and controls
78 lines (66 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import type { Post, Prisma } from "@prisma/client";
import { getUserDataWithFollowesInfo, type UserDataWithFollowInfo } from "@/types/user";
export function getPostDataInclude(loggedInUserId: string) {
return {
_count: postDataCounts,
parent: postParentInfo,
likes: getPostLikeInfo(loggedInUserId),
reposts: getPostRepostInfo(loggedInUserId),
bookmarks: getPostBookmarkInfo(loggedInUserId),
user: { select: getUserDataWithFollowesInfo(loggedInUserId) }
} satisfies Prisma.PostInclude;
}
export type PostPayload = Prisma.PostGetPayload<{
include: ReturnType<typeof getPostDataInclude>;
}>;
export const postDataCounts = {
select: {
likes: true,
reposts: true,
replies: true
}
} satisfies Prisma.PostInclude["_count"];
export type PostDataCounts = {
[K in keyof typeof postDataCounts.select]: number;
};
export function getPostLikeInfo(loggedInUserId: string) {
return {
select: { id: true },
where: { userId: loggedInUserId }
} satisfies Prisma.Post$likesArgs;
}
export function getPostRepostInfo(loggedInUserId: string) {
return {
select: { id: true },
where: { userId: loggedInUserId }
} satisfies Prisma.Post$repostsArgs;
}
export function getPostBookmarkInfo(loggedInUserId: string) {
return {
select: { id: true },
where: { userId: loggedInUserId }
} satisfies Prisma.Post$bookmarksArgs;
}
export const postParentInfo = {
select: {
user: {
select: {
username: true
}
}
}
};
export interface PostsCount {
posts: number;
}
export interface PostData extends Post, PostDataCounts {
isLiked: boolean;
isReposted: boolean;
isBookmarked: boolean;
user: UserDataWithFollowInfo;
parent: { user: { username: string } } | null;
}
export interface PostPage {
posts: PostData[];
nextCursor: string | number | null;
}