Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package team.incube.flooding.domain.user.entity

enum class Role {
STUDENT_COUNCIL,
DORMITORY_MANAGER,
ADMIN,
GENERAL_STUDENT
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package team.incube.flooding.domain.user.entity

enum class Sex {
MAN, WOMAN
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package team.incube.flooding.domain.user.entity

import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.EnumType
import jakarta.persistence.Enumerated
import jakarta.persistence.Id
import jakarta.persistence.Table
import jakarta.persistence.Transient

@Entity
@Table(name = "tb_user")
class UserJpaEntity(
@field:Id
@field:Column(name = "id")
val id: Long,

@field:Column(name = "name", nullable = false)
var name: String,

@field:Column(name = "sex", nullable = false)
@field:Enumerated(EnumType.STRING)
var sex: Sex,

@field:Column(name = "email", nullable = false, unique = true)
var email: String,

@field:Column(name = "student_number", nullable = false)
var studentNumber: Int,

@field:Column(name = "role", nullable = false)
@field:Enumerated(EnumType.STRING)
var role: Role,

@field:Column(name = "dormitory_room", nullable = false)
var dormitoryRoom: Int
) {
@get:Transient
val grade: Int
get() = studentNumber / 1000

@get:Transient
val classNumber: Int
get() = studentNumber % 1000 / 100

@get:Transient
val number: Int
get() = studentNumber % 100

@get:Transient
val dormitoryFloor: Int
get() = dormitoryRoom / 100
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package team.incube.flooding.domain.user.repository

import org.springframework.data.jpa.repository.JpaRepository
import team.incube.flooding.domain.user.entity.UserJpaEntity

interface UserRepository : JpaRepository<UserJpaEntity, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package team.incube.flooding.domain.user.service

import org.springframework.stereotype.Service
import team.incube.flooding.domain.user.entity.Role
import team.incube.flooding.domain.user.entity.Sex
import team.incube.flooding.domain.user.entity.UserJpaEntity
import team.incube.flooding.domain.user.repository.UserRepository
import team.themoment.datagsm.sdk.oauth.model.StudentRole
import team.themoment.datagsm.sdk.oauth.model.UserInfo

@Service
class CreateUserService(
private val userRepository: UserRepository
) {
fun execute(oauthUser: UserInfo) {
if (!oauthUser.isStudent()) throw IllegalArgumentException("학생이 아닙니다.")

val student = oauthUser.student ?: throw IllegalArgumentException("학생 정보가 없습니다.")

val user = UserJpaEntity(
id = student.id,
name = student.name,
sex = when (student.sex) {
team.themoment.datagsm.sdk.oauth.model.Sex.MAN -> Sex.MAN
team.themoment.datagsm.sdk.oauth.model.Sex.WOMAN -> Sex.WOMAN
},
email = student.email,
studentNumber = student.studentNumber,
role = when (student.role) {
StudentRole.GENERAL_STUDENT -> Role.GENERAL_STUDENT
StudentRole.STUDENT_COUNCIL -> Role.STUDENT_COUNCIL
StudentRole.DORMITORY_MANAGER -> Role.DORMITORY_MANAGER
},
dormitoryRoom = student.dormitoryRoom
)

userRepository.save(user)
}
}