---
# System prepended metadata

title: Forum item data
tags: [ELK-ROOM]

---

###### tags: `ELK-ROOM`

# Forum item data

## sql

```sql=
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

/* copyPostsToFourmItems */
INSERT INTO "ForumItem" (
  "uuid",
  "createAt",
  "updatedAt",
  "type",
  "userId",
  "gameId",
  "lang",
  "country",
  "postId"
)
SELECT
  uuid_generate_v4(),
  "createAt",
  "updatedAt",
  'POST',
  "userId",
  "gameId",
  "lang",
  "country",
  "id"
FROM
  "Post"
WHERE NOT EXISTS (
  SELECT 1
  FROM "ForumItem"
  WHERE "postId" = "Post"."id"
    AND "type" = 'POST'
);

/* copyVideosToForumItems */
INSERT INTO "ForumItem" (
  "uuid",
  "createAt",
  "updatedAt",
  "type",
  "userId",
  "gameId",
  "lang",
  "country",
  "ytVideoId"
)
SELECT
  uuid_generate_v4(),
  "YtVideo"."createAt",
  "YtVideo"."updatedAt",
  'YTVIDEO',
  "YtChannel"."userId",
  "YtVideo"."taggedGameId",
  "YtVideo"."lang",
  "YtVideo"."country",
  "YtVideo"."id"
FROM
  "YtVideo"
  LEFT JOIN "YtChannel"
    ON "YtVideo"."ytChannelId" = "YtChannel"."id"
WHERE NOT EXISTS (
  SELECT 1
  FROM "ForumItem"
  WHERE "ytVideoId" = "YtVideo"."id"
    AND "type" = 'YTVIDEO'
);

/* connectForumItemIdToComments */
UPDATE
  "Comment"
SET
  "forumItemId" = "ForumItem"."id",
  "targetId" = "ForumItem"."id",
  "targetType" = 'FORUM_ITEM'
FROM
  "ForumItem"
WHERE
  "Comment"."postId" = "ForumItem"."postId"
  AND "ForumItem"."id" IS NOT NULL;

/* connectForumItemIdToLikes */
UPDATE
  "Like"
SET
  "forumItemId" = "ForumItem"."id"
FROM
  "ForumItem"
WHERE
  "Like"."postId" = "ForumItem"."postId"
  AND "ForumItem"."id" IS NOT NULL;

/* connectForumItemIdToNotifications */
UPDATE
  "NotificationEntity"
SET
  "forumItemId" = "ForumItem"."id"
FROM
  "ForumItem"
WHERE
  "NotificationEntity"."postId" = "ForumItem"."postId"
  AND "ForumItem"."id" IS NOT NULL;
```

## script

```typescript=
    await ForumService.copyPostsToFourmItems()
    await ForumService.copyVideosToForumItems()
    await ForumService.connectForumItemIdToComments()
    await ForumService.connectForumItemIdToLikes()
    await ForumService.connectForumItemIdToNotifications()
```

```typescript=
static async copyPostsToFourmItems() {
    const arr: Prisma.Prisma__ForumItemClient<ForumItem>[] = []
    const posts = await prisma.post.findMany()
    posts.forEach((post) => arr.push(
      prisma.forumItem.create({
        data: {
          createAt: post.createAt,
          updatedAt: post.updatedAt,
          type: ForumItemType.POST,
          userId: post.userId,
          gameId: post.gameId,
          lang: post.lang,
          country: post.country,
          postId: post.id,
        },
      }),
    ))
    const result = await prisma.$transaction(arr)
    console.log('--->', result.length)
  }

  static async copyVideosToForumItems() {
    const arr: Prisma.Prisma__ForumItemClient<ForumItem>[] = []
    const videos = await prisma.ytVideo.findMany({
      include: { ytChannel: { select: { user: { select: { id: true } } } } },
    })
    videos.forEach((video) => arr.push(
      prisma.forumItem.create({
        data: {
          createAt: video.createAt,
          updatedAt: video.updatedAt,
          type: ForumItemType.YTVIDEO,
          userId: video.ytChannel.user.id,
          gameId: video.taggedGameId,
          lang: video.lang,
          country: video.country,
          ytVideoId: video.id,
        },
      }),
    ))
    const result = await prisma.$transaction(arr)
    console.log('--->', result.length)
  }

  static async connectForumItemIdToComments() {
    const arr: Prisma.Prisma__CommentClient<Comment>[] = []
    const comments = await prisma.comment.findMany()
    comments.forEach((comment) => arr.push(
      prisma.comment.update({
        where: { id: comment.id },
        data: {
          forumItem: {
            connect: comment.postId ? {
              postId: comment.postId,
            } : undefined,
          },
        },
      }),
    ))
    const result = await prisma.$transaction(arr)
    console.log('--->', result.length)
  }

  static async connectForumItemIdToLikes() {
    const arr: Prisma.Prisma__LikeClient<Like>[] = []
    const likes = await prisma.like.findMany()
    likes.forEach((like) => arr.push(
      prisma.like.update({
        where: { id: like.id },
        data: {
          forumItem: {
            connect: like.postId ? {
              postId: like.postId,
            } : undefined,
          },
        },
      }),
    ))
    const result = await prisma.$transaction(arr)
    console.log('--->', result.length)
  }

  static async connectForumItemIdToNotifications() {
    const arr: Prisma.Prisma__NotificationEntityClient<NotificationEntity>[] = []
    const notifications = await prisma.notificationEntity.findMany({
      where: { NOT: { postId: null } },
    })
    notifications.forEach((notification) => arr.push(
      prisma.notificationEntity.update({
        where: { id: notification.id },
        data: {
          forumItem: {
            connect: notification.postId ? {
              postId: notification.postId,
            } : undefined,
          },
        },
      }),
    ))
    const result = await prisma.$transaction(arr)
    console.log('--->', result.length)
  }
```