|
|
@@ -1,9 +1,10 @@
|
|
|
-import { DataSource, Repository } from 'typeorm';
|
|
|
+import { DataSource, Repository, In } from 'typeorm';
|
|
|
import debug from 'debug';
|
|
|
import { z } from '@hono/zod-openapi';
|
|
|
import { PostEntity as Post } from './post.entity';
|
|
|
import { FollowEntity } from '../follows/follow.entity';
|
|
|
import { UserEntity as User } from '../users/user.entity';
|
|
|
+import { UserService } from '../users/user.service';
|
|
|
import type { CreatePostDto, UpdatePostDto } from './post.entity';
|
|
|
import { HTTPException } from 'hono/http-exception';
|
|
|
import { DeleteStatus } from '@/share/types';
|
|
|
@@ -13,10 +14,12 @@ const logger = debug('backend:posts:service');
|
|
|
export class PostService {
|
|
|
private postRepository: Repository<Post>;
|
|
|
private userRepository: Repository<User>;
|
|
|
+ private userService: UserService;
|
|
|
|
|
|
constructor(dataSource: DataSource) {
|
|
|
this.postRepository = dataSource.getRepository(Post);
|
|
|
this.userRepository = dataSource.getRepository(User);
|
|
|
+ this.userService = new UserService(dataSource);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -179,4 +182,39 @@ export class PostService {
|
|
|
|
|
|
return post;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据用户ID列表获取帖子
|
|
|
+ */
|
|
|
+ async getPostsByUserIds(userIds: number[], page: number = 1, pageSize: number = 10): Promise<[Post[], number]> {
|
|
|
+ const skip = (page - 1) * pageSize;
|
|
|
+
|
|
|
+ const [posts, total] = await this.postRepository.findAndCount({
|
|
|
+ where: {
|
|
|
+ userId: In(userIds),
|
|
|
+ isDeleted: DeleteStatus.NOT_DELETED
|
|
|
+ },
|
|
|
+ relations: ['user'],
|
|
|
+ skip,
|
|
|
+ take: pageSize,
|
|
|
+ order: { createdAt: 'DESC' }
|
|
|
+ });
|
|
|
+
|
|
|
+ return [posts, total];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取推荐用户的帖子
|
|
|
+ */
|
|
|
+ async getRecommendedPosts(currentUserId: number, page: number = 1, pageSize: number = 10): Promise<[Post[], number]> {
|
|
|
+ // 获取推荐用户
|
|
|
+ const recommendedUsers = await this.userService.getRecommendedUsers(currentUserId);
|
|
|
+ const recommendedUserIds = recommendedUsers.map(u => u.id);
|
|
|
+
|
|
|
+ if (recommendedUserIds.length > 0) {
|
|
|
+ return this.getPostsByUserIds(recommendedUserIds, page, pageSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ return [[], 0];
|
|
|
+ }
|
|
|
}
|