A prisma.schema for an advance Social Media Website

Rmag Breaking News

This is a Prisma schema file that defines the data models, enums, and relationships for a social media application.

You can suggest things in Comments. ❤️

This is example Repository :- https://github.com/SH20RAJ/shadev2/

generator client {
provider = “prisma-client-js”
}

datasource db {
provider = “mysql”
url = env(“DATABASE_URL”)
}
enum Type {
VIDEO
SHORTVIDEO
TEXT
IMAGE
AUDIO
POLL
GAME
}

enum Status {
PUBLIC
PRIVATE
UNLISTED
}

enum ReactionType {
LIKE
LOVE
HAHA
WOW
SAD
ANGRY
}

model User {
id Int @id @default(autoincrement())
username String @unique
email String @unique
password String
name String?
bio String?
avatar String?
coverPhoto String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
posts Post[]
likes Like[]
status Status @default(PUBLIC)
comments Comment[]
followers Follow[] @relation(“UserFollowers”)
following Follow[] @relation(“UserFollowing”)
roles UserRole[]
receivedMessages Message[] @relation(“ReceiverMessages”)
sentMessages Message[] @relation(“SenderMessages”)
pollResponses PollResponse[]

}

model Post {
id Int @id @default(autoincrement())
content String
image String?
contentURL String?
type Type? @default(TEXT)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
author User @relation(fields: [authorId], references: [id])
authorId Int
status Status @default(PUBLIC)
likes Like[]
comments Comment[]
tags Tag[]
pollOptions PollOption[]

}

model Like {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId Int
post Post @relation(fields: [postId], references: [id])
postId Int
reaction ReactionType @default(LIKE)
createdAt DateTime @default(now())
}

model Comment {
id Int @id @default(autoincrement())
content String
user User @relation(fields: [userId], references: [id])
userId Int
post Post @relation(fields: [postId], references: [id])
postId Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
media String?
}

model Tag {
id Int @id @default(autoincrement())
name String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
posts Post[]
}

model Follow {
id Int @id @default(autoincrement())
follower User @relation(“UserFollowers”, fields: [followerId], references: [id])
followerId Int
following User @relation(“UserFollowing”, fields: [followingId], references: [id])
followingId Int
createdAt DateTime @default(now())
@@unique([followerId, followingId])
}

model UserRole {
id Int @id @default(autoincrement())
userId Int
role Role
user User @relation(fields: [userId], references: [id])
createdAt DateTime @default(now())
}

enum Role {
ADMIN
MODERATOR
USER
}

model Message {
id Int @id @default(autoincrement())
content String
senderId Int
receiverId Int
sender User @relation(“SenderMessages”, fields: [senderId], references: [id])
receiver User @relation(“ReceiverMessages”, fields: [receiverId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}

model PollOption {
id Int @id @default(autoincrement())
postId Int
post Post @relation(fields: [postId], references: [id])
option String
responses PollResponse[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}

model PollResponse {
id Int @id @default(autoincrement())
pollOptionId Int
pollOption PollOption @relation(fields: [pollOptionId], references: [id])
userId Int
user User @relation(fields: [userId], references: [id])
createdAt DateTime @default(now())
}

Here’s a brief overview of the models and relationships:

User: Represents a user of the social media app. A user has a unique username and email, and can have a password, name, bio, avatar, and cover photo. A user can create posts, like posts, comment on posts, follow other users, and send and receive messages. A user can have multiple roles, such as admin, moderator, or user.

Post: Represents a post made by a user. A post can be of different types, such as video, text, image, audio, poll, or game. A post has a content, image, content URL, type, created at, updated at, author, status, likes, comments, tags, and poll options.

Like: Represents a user’s like on a post. A like has a user, post, reaction, and created at.

Comment: Represents a user’s comment on a post. A comment has a content, user, post, created at, updated at, and media.

Tag: Represents a tag that can be associated with a post. A tag has a name and created at.

Follow: Represents a user’s follow relationship with another user. A follow has a follower, following, and created at.

UserRole: Represents a user’s role in the social media app. A user role has a user, role, and created at.

Message: Represents a message sent between two users. A message has a content, sender, receiver, created at, and updated at.

PollOption: Represents an option in a poll created by a user. A poll option has a post, option, created at, updated at, and responses.

PollResponse: Represents a user’s response to a poll option. A poll response has a poll option, user, and created at.

The schema also includes several enums for different types and statuses, such as Type, Status, and ReactionType. These enums are used to define the possible values for different fields in the models.

The schema uses the prisma-client-js provider for the generator client, and the mysql provider for the datasource db. The database connection URL is set using the DATABASE_URL environment variable.

Leave a Reply

Your email address will not be published. Required fields are marked *