package com.socialapp.data.db import androidx.room.Dao import androidx.room.Delete import androidx.room.Insert import androidx.room.Query import androidx.room.Update import com.socialapp.data.db.entity.* @Dao interface UserDao { @Insert suspend fun insertUser(user: UserEntity) @Update suspend fun updateUser(user: UserEntity) @Query("SELECT * FROM users WHERE id = :userId") suspend fun getUserById(userId: Int): UserEntity? @Query("SELECT * FROM users WHERE username = :username") suspend fun getUserByUsername(username: String): UserEntity? @Delete suspend fun deleteUser(user: UserEntity) @Query("DELETE FROM users") suspend fun deleteAllUsers() } @Dao interface PostDao { @Insert suspend fun insertPost(post: PostEntity) @Update suspend fun updatePost(post: PostEntity) @Query("SELECT * FROM posts ORDER BY createdAt DESC LIMIT :limit OFFSET :offset") suspend fun getPosts(limit: Int = 20, offset: Int = 0): List @Query("SELECT * FROM posts WHERE userId = :userId ORDER BY createdAt DESC LIMIT :limit") suspend fun getUserPosts(userId: Int, limit: Int = 20): List @Query("SELECT * FROM posts WHERE id = :postId") suspend fun getPostById(postId: Int): PostEntity? @Delete suspend fun deletePost(post: PostEntity) @Query("DELETE FROM posts") suspend fun deleteAllPosts() } @Dao interface CommentDao { @Insert suspend fun insertComment(comment: CommentEntity) @Update suspend fun updateComment(comment: CommentEntity) @Query("SELECT * FROM comments WHERE postId = :postId ORDER BY createdAt DESC") suspend fun getPostComments(postId: Int): List @Query("SELECT * FROM comments WHERE id = :commentId") suspend fun getCommentById(commentId: Int): CommentEntity? @Delete suspend fun deleteComment(comment: CommentEntity) @Query("DELETE FROM comments WHERE postId = :postId") suspend fun deletePostComments(postId: Int) } @Dao interface StoryDao { @Insert suspend fun insertStory(story: StoryEntity) @Query("SELECT * FROM stories ORDER BY createdAt DESC") suspend fun getAllStories(): List @Query("SELECT * FROM stories WHERE userId = :userId") suspend fun getUserStories(userId: Int): List @Delete suspend fun deleteStory(story: StoryEntity) @Query("DELETE FROM stories WHERE expiresAt < datetime('now')") suspend fun deleteExpiredStories() }