ReposEntity.kt

package com.gyleedev.data.database.entity

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import com.gyleedev.githubsearch.domain.model.RepositoryModel

// 코스 정보
@Entity(
    tableName = "repos",
    foreignKeys = [
        ForeignKey(
            entity = UserEntity::class,
            parentColumns = arrayOf("id"),
            childColumns = arrayOf("user_entity_id"),
            onDelete = ForeignKey.CASCADE,
        ),
    ],
    indices = [Index(value = ["user_entity_id", "name"], unique = true)],
)
data class ReposEntity(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    val id: Long,
    @ColumnInfo(name = "user_entity_id")
    val userEntityId: Long,
    @ColumnInfo(name = "user_github_id")
    val userGithubId: String,
    @ColumnInfo(name = "name")
    val name: String?,
    @ColumnInfo(name = "description")
    val description: String?,
    @ColumnInfo(name = "language")
    val language: String?,
    @ColumnInfo(name = "stargazer")
    val stargazer: Int,
)

fun ReposEntity.toModel(): RepositoryModel = RepositoryModel(
    name = name,
    userGithubId = userGithubId,
    description = description,
    language = language,
    stargazer = stargazer,
)

fun RepositoryModel.toEntity(userEntityId: Long): ReposEntity = ReposEntity(
    id = 0,
    userEntityId = userEntityId,
    userGithubId = userGithubId,
    description = description,
    name = name,
    stargazer = stargazer,
    language = language,
)