From 8113a585cd07d679d1218a573ac9ed709fa29a82 Mon Sep 17 00:00:00 2001 From: JaeUk Date: Mon, 11 Nov 2024 19:37:51 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20#51=20user=20type(=EC=9D=BC=EB=B0=98=20?= =?UTF-8?q?=EC=9C=A0=EC=A0=80,=20=EC=82=AC=EC=A7=84=EC=9E=91=EA=B0=80)=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=82=AC=EC=A7=84=20=EC=9E=91?= =?UTF-8?q?=EA=B0=80=20entity=20=EC=84=A4=EA=B3=84/=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- damaba/build.gradle.kts | 5 +- .../photographer/BusinessDaysConverter.kt | 23 ++++++++ .../BusinessScheduleEmbeddable.kt | 20 +++++++ .../MainPhotohraphyTypesConverter.kt | 24 +++++++++ .../PhotographerActiveRegionJpaEntity.kt | 38 +++++++++++++ .../photographer/PhotographerJpaEntity.kt | 54 +++++++++++++++++++ .../PhotographerPortfolioImageJpaEntity.kt | 43 +++++++++++++++ .../damaba/domain/common/PhotographyType.kt | 9 ++++ .../domain/photographer/BusinessSchedule.kt | 10 ++++ .../domain/photographer/Photographer.kt | 15 ++++++ .../photographer/PhotographerActiveRegion.kt | 6 +++ .../PhotographerPortfolioImage.kt | 6 +++ damaba/src/main/resources/schema.sql | 50 +++++++++++++++++ .../com/damaba/damaba/util/TestFixture.kt | 3 ++ .../adapter/outbound/user/UserJpaEntity.kt | 9 ++++ .../com/damaba/user/domain/user/User.kt | 16 ++++-- .../user/domain/user/constant/Gender.kt | 1 - .../user/domain/user/constant/UserRoleType.kt | 1 + .../user/domain/user/constant/UserType.kt | 7 +++ .../com/damaba/user/domain/user/UserTest.kt | 3 +- .../com/damaba/user/util/TestFixture.kt | 3 ++ 21 files changed, 339 insertions(+), 7 deletions(-) create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/BusinessDaysConverter.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/BusinessScheduleEmbeddable.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/MainPhotohraphyTypesConverter.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerActiveRegionJpaEntity.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerJpaEntity.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerPortfolioImageJpaEntity.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/domain/common/PhotographyType.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/BusinessSchedule.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/Photographer.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/PhotographerActiveRegion.kt create mode 100644 damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/PhotographerPortfolioImage.kt create mode 100644 user/src/main/kotlin/com/damaba/user/domain/user/constant/UserType.kt diff --git a/damaba/build.gradle.kts b/damaba/build.gradle.kts index d376c9d..de07ca0 100644 --- a/damaba/build.gradle.kts +++ b/damaba/build.gradle.kts @@ -150,10 +150,13 @@ tasks.jacocoTestCoverageVerification { "*.adapter.outbound.*.*Repository*", "*.adapter.outbound.*.*Adapter*", "*.application.listener.*.*EventListener*", - "*.application.service.*.*", + "*.application.service.*", "*.application.port.*", "*.domain.*.*", ) + + // TODO: 회원가입 기능 구현 후 제거 + excludes = listOf("*.domain.photographer.*") } } } diff --git a/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/BusinessDaysConverter.kt b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/BusinessDaysConverter.kt new file mode 100644 index 0000000..2571e89 --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/BusinessDaysConverter.kt @@ -0,0 +1,23 @@ +package com.damaba.damaba.adapter.outbound.photographer + +import jakarta.persistence.AttributeConverter +import jakarta.persistence.Converter +import java.time.DayOfWeek + +@Converter +class BusinessDaysConverter : AttributeConverter, String> { + override fun convertToDatabaseColumn(attributes: Set?): String? = + attributes + ?.sortedBy { it.value } + ?.joinToString(DELIMITER) { it.name } + + override fun convertToEntityAttribute(dbData: String?): Set? = + dbData?.split(DELIMITER) + ?.map { DayOfWeek.valueOf(it) } + ?.sortedBy { it.value } + ?.toSet() + + companion object { + private const val DELIMITER = "," + } +} diff --git a/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/BusinessScheduleEmbeddable.kt b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/BusinessScheduleEmbeddable.kt new file mode 100644 index 0000000..f5df5f6 --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/BusinessScheduleEmbeddable.kt @@ -0,0 +1,20 @@ +package com.damaba.damaba.adapter.outbound.photographer + +import jakarta.persistence.Column +import jakarta.persistence.Convert +import jakarta.persistence.Embeddable +import java.time.DayOfWeek +import java.time.LocalTime + +@Embeddable +data class BusinessScheduleEmbeddable( + @Convert(converter = BusinessDaysConverter::class) + @Column(name = "business_days", nullable = true) + val days: Set, + + @Column(name = "business_start_time", nullable = true) + val startTime: LocalTime, + + @Column(name = "business_end_time", nullable = true) + val endTime: LocalTime, +) diff --git a/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/MainPhotohraphyTypesConverter.kt b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/MainPhotohraphyTypesConverter.kt new file mode 100644 index 0000000..fa7a916 --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/MainPhotohraphyTypesConverter.kt @@ -0,0 +1,24 @@ +package com.damaba.damaba.adapter.outbound.photographer + +import com.damaba.damaba.domain.common.PhotographyType +import jakarta.persistence.AttributeConverter +import jakarta.persistence.Converter +import java.util.stream.Collectors + +@Converter +class MainPhotohraphyTypesConverter : AttributeConverter, String> { + override fun convertToDatabaseColumn(attribute: Set): String = + attribute.stream() + .map { roleType -> roleType.name } + .sorted() + .collect(Collectors.joining(DELIMITER)) + + override fun convertToEntityAttribute(dbData: String): Set = + dbData.split(DELIMITER) + .map { roleType -> PhotographyType.valueOf(roleType) } + .toSet() + + companion object { + private const val DELIMITER = "," + } +} diff --git a/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerActiveRegionJpaEntity.kt b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerActiveRegionJpaEntity.kt new file mode 100644 index 0000000..0cd34a7 --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerActiveRegionJpaEntity.kt @@ -0,0 +1,38 @@ +package com.damaba.damaba.adapter.outbound.photographer + +import com.damaba.damaba.adapter.outbound.common.BaseJpaTimeEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.FetchType +import jakarta.persistence.GeneratedValue +import jakarta.persistence.GenerationType +import jakarta.persistence.Id +import jakarta.persistence.JoinColumn +import jakarta.persistence.ManyToOne +import jakarta.persistence.Table + +@Table(name = "photographer_active_region") +@Entity +class PhotographerActiveRegionJpaEntity( + photographer: PhotographerJpaEntity, + category: String, + name: String, +) : BaseJpaTimeEntity() { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id", nullable = false) + val id: Long = 0 + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "photographer_id", nullable = false) + var photographer: PhotographerJpaEntity = photographer + private set + + @Column(name = "category", nullable = false) + var category: String = category + private set + + @Column(name = "name", nullable = false) + var name: String = name + private set +} diff --git a/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerJpaEntity.kt b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerJpaEntity.kt new file mode 100644 index 0000000..02f7342 --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerJpaEntity.kt @@ -0,0 +1,54 @@ +package com.damaba.damaba.adapter.outbound.photographer + +import com.damaba.damaba.adapter.outbound.common.AddressJpaEmbeddable +import com.damaba.damaba.adapter.outbound.common.BaseJpaTimeEntity +import com.damaba.damaba.domain.common.PhotographyType +import jakarta.persistence.CascadeType +import jakarta.persistence.Column +import jakarta.persistence.Convert +import jakarta.persistence.Embedded +import jakarta.persistence.Entity +import jakarta.persistence.Id +import jakarta.persistence.OneToMany +import jakarta.persistence.Table + +@Table(name = "photographer") +@Entity +class PhotographerJpaEntity( + @Id @Column(name = "user_id", nullable = false) + val userId: Long, + mainPhotographyTypes: Set, + contactLink: String?, + description: String?, + address: AddressJpaEmbeddable?, + businessSchedule: BusinessScheduleEmbeddable?, +) : BaseJpaTimeEntity() { + @Convert(converter = MainPhotohraphyTypesConverter::class) + @Column(name = "main_photography_type", nullable = false) + var mainPhotographyTypes: Set = mainPhotographyTypes + private set + + @Column(name = "contact_link", nullable = false) + var contactLink: String? = contactLink + private set + + @Column(name = "description", length = 500, nullable = true) + var description: String? = description + private set + + @Embedded + var address: AddressJpaEmbeddable? = address + private set + + @Embedded + var businessSchedule: BusinessScheduleEmbeddable? = businessSchedule + private set + + @OneToMany(mappedBy = "photographer", cascade = [CascadeType.PERSIST]) + var portfolio: MutableList = mutableListOf() + private set + + @OneToMany(mappedBy = "photographer", cascade = [CascadeType.ALL], orphanRemoval = true) + var activeRegions: MutableSet = mutableSetOf() + private set +} diff --git a/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerPortfolioImageJpaEntity.kt b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerPortfolioImageJpaEntity.kt new file mode 100644 index 0000000..74fcdd3 --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/adapter/outbound/photographer/PhotographerPortfolioImageJpaEntity.kt @@ -0,0 +1,43 @@ +package com.damaba.damaba.adapter.outbound.photographer + +import com.damaba.damaba.adapter.outbound.common.BaseJpaEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.FetchType +import jakarta.persistence.GeneratedValue +import jakarta.persistence.GenerationType +import jakarta.persistence.Id +import jakarta.persistence.JoinColumn +import jakarta.persistence.ManyToOne +import jakarta.persistence.Table +import java.time.LocalDateTime + +@Table(name = "photographer_portfolio_image") +@Entity +class PhotographerPortfolioImageJpaEntity( + photographer: PhotographerJpaEntity, + name: String, + url: String, +) : BaseJpaEntity() { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id", nullable = false) + val id: Long = 0 + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "photographer_id", nullable = false) + var photographer: PhotographerJpaEntity = photographer + private set + + @Column(name = "name", unique = true, nullable = false) + var name: String = name + private set + + @Column(name = "url", unique = true, nullable = false) + var url: String = url + private set + + @Column(name = "deleted_at", nullable = true) + var deletedAt: LocalDateTime? = null + private set +} diff --git a/damaba/src/main/kotlin/com/damaba/damaba/domain/common/PhotographyType.kt b/damaba/src/main/kotlin/com/damaba/damaba/domain/common/PhotographyType.kt new file mode 100644 index 0000000..200d77e --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/domain/common/PhotographyType.kt @@ -0,0 +1,9 @@ +package com.damaba.damaba.domain.common + +enum class PhotographyType { + SNAP, + PROFILE, + CONCEPT, + ID_PHOTO, + SELF, +} diff --git a/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/BusinessSchedule.kt b/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/BusinessSchedule.kt new file mode 100644 index 0000000..973ecaa --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/BusinessSchedule.kt @@ -0,0 +1,10 @@ +package com.damaba.damaba.domain.photographer + +import java.time.DayOfWeek +import java.time.LocalTime + +data class BusinessSchedule( + val days: Set, + val startTime: LocalTime, + val endTime: LocalTime, +) diff --git a/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/Photographer.kt b/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/Photographer.kt new file mode 100644 index 0000000..c5f98bc --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/Photographer.kt @@ -0,0 +1,15 @@ +package com.damaba.damaba.domain.photographer + +import com.damaba.damaba.domain.common.Address +import com.damaba.damaba.domain.common.PhotographyType + +data class Photographer( + val userId: Long, + val mainPhotographyTypes: Set, + val contactLink: String?, + val description: String?, + val address: Address?, + val businessSchedule: BusinessSchedule?, + val portfolio: List, + val activeRegions: List, +) diff --git a/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/PhotographerActiveRegion.kt b/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/PhotographerActiveRegion.kt new file mode 100644 index 0000000..1805223 --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/PhotographerActiveRegion.kt @@ -0,0 +1,6 @@ +package com.damaba.damaba.domain.photographer + +data class PhotographerActiveRegion( + val category: String, + val name: String, +) diff --git a/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/PhotographerPortfolioImage.kt b/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/PhotographerPortfolioImage.kt new file mode 100644 index 0000000..ebe161e --- /dev/null +++ b/damaba/src/main/kotlin/com/damaba/damaba/domain/photographer/PhotographerPortfolioImage.kt @@ -0,0 +1,6 @@ +package com.damaba.damaba.domain.photographer + +data class PhotographerPortfolioImage( + val name: String, + val url: String, +) diff --git a/damaba/src/main/resources/schema.sql b/damaba/src/main/resources/schema.sql index 7d72ffd..7f90b52 100644 --- a/damaba/src/main/resources/schema.sql +++ b/damaba/src/main/resources/schema.sql @@ -1,4 +1,7 @@ DROP TABLE IF EXISTS `user`; +DROP TABLE IF EXISTS photographer; +DROP TABLE IF EXISTS photographer_active_region; +DROP TABLE IF EXISTS photographer_portfolio_image; DROP TABLE IF EXISTS user_profile_image; DROP TABLE IF EXISTS promotion; DROP TABLE IF EXISTS promotion_image; @@ -8,6 +11,7 @@ DROP TABLE IF EXISTS promotion_hashtag; CREATE TABLE `user` ( id BIGINT NOT NULL AUTO_INCREMENT, + type VARCHAR(255) NOT NULL, roles VARCHAR(255) NOT NULL, login_type VARCHAR(255) NOT NULL, o_auth_login_uid VARCHAR(255) NOT NULL UNIQUE, @@ -22,6 +26,52 @@ CREATE TABLE `user` ); CREATE INDEX idx__user__o_auth_login_uid ON `user` (o_auth_login_uid); +CREATE TABLE photographer +( + user_id BIGINT NOT NULL COMMENT '(FK) id of user', + main_photography_type VARCHAR(255) NOT NULL, + contact_link VARCHAR(255), + description VARCHAR(500), + sido VARCHAR(255), + sigungu VARCHAR(255), + road_address VARCHAR(255), + jibun_address VARCHAR(255), + business_days VARCHAR(255), + business_start_time TIME, + business_end_time TIME, + created_at DATETIME NOT NULL, + updated_at DATETIME NOT NULL, + PRIMARY KEY (user_id) +); +CREATE INDEX fk_idx__photographer__user_id ON photographer (user_id); + +CREATE TABLE photographer_active_region +( + id BIGINT NOT NULL AUTO_INCREMENT, + photographer_user_id BIGINT COMMENT '(FK) id of photographer', + category VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + created_at DATETIME NOT NULL, + updated_at DATETIME NOT NULL, + PRIMARY KEY (id) +); +CREATE INDEX fk_idx__photographer_active_region__photographer_id ON photographer_active_region (photographer_user_id); + +CREATE TABLE photographer_portfolio_image +( + id BIGINT NOT NULL AUTO_INCREMENT, + photographer_user_id BIGINT COMMENT '(FK) id of photographer', + name VARCHAR(255) NOT NULL, + url VARCHAR(255) NOT NULL UNIQUE, + created_at DATETIME NOT NULL, + updated_at DATETIME NOT NULL, + deleted_at DATETIME, + created_by BIGINT NOT NULL, + updated_by BIGINT NOT NULL, + PRIMARY KEY (id) +); +CREATE INDEX fk_idx__photographer_portfolio__photographer_id ON photographer_active_region (photographer_user_id); + CREATE TABLE user_profile_image ( id BIGINT NOT NULL AUTO_INCREMENT, diff --git a/damaba/src/test/kotlin/com/damaba/damaba/util/TestFixture.kt b/damaba/src/test/kotlin/com/damaba/damaba/util/TestFixture.kt index 29c56ac..e1b5a26 100644 --- a/damaba/src/test/kotlin/com/damaba/damaba/util/TestFixture.kt +++ b/damaba/src/test/kotlin/com/damaba/damaba/util/TestFixture.kt @@ -20,6 +20,7 @@ import com.damaba.user.domain.user.UserProfileImage import com.damaba.user.domain.user.constant.Gender import com.damaba.user.domain.user.constant.LoginType import com.damaba.user.domain.user.constant.UserRoleType +import com.damaba.user.domain.user.constant.UserType import org.springframework.security.authentication.UsernamePasswordAuthenticationToken import org.springframework.security.core.Authentication import org.springframework.security.core.authority.SimpleGrantedAuthority @@ -28,6 +29,7 @@ import java.time.LocalDate object TestFixture { fun createUser( id: Long = randomLong(), + type: UserType = UserType.USER, roles: Set = setOf(UserRoleType.USER), oAuthLoginUid: String = randomString(), loginType: LoginType = LoginType.KAKAO, @@ -37,6 +39,7 @@ object TestFixture { instagramId: String = randomString(len = 30), ): User = User( id = id, + type = type, roles = roles, oAuthLoginUid = oAuthLoginUid, loginType = loginType, diff --git a/user/src/main/kotlin/com/damaba/user/adapter/outbound/user/UserJpaEntity.kt b/user/src/main/kotlin/com/damaba/user/adapter/outbound/user/UserJpaEntity.kt index 22016ab..9123a24 100644 --- a/user/src/main/kotlin/com/damaba/user/adapter/outbound/user/UserJpaEntity.kt +++ b/user/src/main/kotlin/com/damaba/user/adapter/outbound/user/UserJpaEntity.kt @@ -5,6 +5,7 @@ import com.damaba.user.domain.user.User import com.damaba.user.domain.user.constant.Gender import com.damaba.user.domain.user.constant.LoginType import com.damaba.user.domain.user.constant.UserRoleType +import com.damaba.user.domain.user.constant.UserType import jakarta.persistence.Column import jakarta.persistence.Convert import jakarta.persistence.Entity @@ -18,6 +19,7 @@ import jakarta.persistence.Table @Table(name = "`user`") @Entity class UserJpaEntity( + type: UserType, roles: Set, loginType: LoginType, oAuthLoginUid: String, @@ -31,6 +33,11 @@ class UserJpaEntity( @Column(name = "id", nullable = false) val id: Long = 0 + @Enumerated(EnumType.STRING) + @Column(name = "type", nullable = false) + var type: UserType = type + private set + @Convert(converter = UserRoleTypesConverter::class) @Column(name = "roles", nullable = false) var roles: Set = roles @@ -64,6 +71,7 @@ class UserJpaEntity( fun toDomain(): User = User( id = this.id, + type = this.type, roles = this.roles, oAuthLoginUid = this.oAuthLoginUid, loginType = this.loginType, @@ -83,6 +91,7 @@ class UserJpaEntity( companion object { fun from(user: User): UserJpaEntity = UserJpaEntity( roles = user.roles, + type = user.type, loginType = user.loginType, oAuthLoginUid = user.oAuthLoginUid, nickname = user.nickname, diff --git a/user/src/main/kotlin/com/damaba/user/domain/user/User.kt b/user/src/main/kotlin/com/damaba/user/domain/user/User.kt index 8d3e3d8..009bb02 100644 --- a/user/src/main/kotlin/com/damaba/user/domain/user/User.kt +++ b/user/src/main/kotlin/com/damaba/user/domain/user/User.kt @@ -3,18 +3,26 @@ package com.damaba.user.domain.user import com.damaba.user.domain.user.constant.Gender import com.damaba.user.domain.user.constant.LoginType import com.damaba.user.domain.user.constant.UserRoleType +import com.damaba.user.domain.user.constant.UserType import java.util.Objects class User( val id: Long, - val roles: Set, val loginType: LoginType, val oAuthLoginUid: String, + type: UserType, + roles: Set, nickname: String, profileImage: UserProfileImage, gender: Gender, instagramId: String?, ) { + var type: UserType = type + private set + + var roles: Set = roles + private set + var nickname: String = nickname private set @@ -28,7 +36,7 @@ class User( private set val isRegistrationCompleted - get() = gender != DEFAULT_GENDER + get() = type != UserType.UNDEFINED fun update( nickname: String, @@ -51,7 +59,6 @@ class User( override fun hashCode(): Int = Objects.hashCode(id) companion object { - val DEFAULT_GENDER = Gender.UNDEFINED val DEFAULT_PROFILE_IMAGE = UserProfileImage( name = "default-user-profile-image.jpg", url = "https://dummyimage.com/244x100.png/cc0000/ffffff", @@ -59,12 +66,13 @@ class User( fun create(loginType: LoginType, oAuthLoginUid: String, nickname: String): User = User( id = 0, + type = UserType.UNDEFINED, roles = setOf(UserRoleType.USER), loginType = loginType, oAuthLoginUid = oAuthLoginUid, nickname = nickname, profileImage = DEFAULT_PROFILE_IMAGE, - gender = DEFAULT_GENDER, + gender = Gender.MALE, instagramId = null, ) } diff --git a/user/src/main/kotlin/com/damaba/user/domain/user/constant/Gender.kt b/user/src/main/kotlin/com/damaba/user/domain/user/constant/Gender.kt index 175f48d..3b04bc7 100644 --- a/user/src/main/kotlin/com/damaba/user/domain/user/constant/Gender.kt +++ b/user/src/main/kotlin/com/damaba/user/domain/user/constant/Gender.kt @@ -3,5 +3,4 @@ package com.damaba.user.domain.user.constant enum class Gender { MALE, FEMALE, - UNDEFINED, } diff --git a/user/src/main/kotlin/com/damaba/user/domain/user/constant/UserRoleType.kt b/user/src/main/kotlin/com/damaba/user/domain/user/constant/UserRoleType.kt index 9891f21..3f923b7 100644 --- a/user/src/main/kotlin/com/damaba/user/domain/user/constant/UserRoleType.kt +++ b/user/src/main/kotlin/com/damaba/user/domain/user/constant/UserRoleType.kt @@ -2,5 +2,6 @@ package com.damaba.user.domain.user.constant enum class UserRoleType { USER, + PHOTOGRAPHER, ADMIN, } diff --git a/user/src/main/kotlin/com/damaba/user/domain/user/constant/UserType.kt b/user/src/main/kotlin/com/damaba/user/domain/user/constant/UserType.kt new file mode 100644 index 0000000..a5d7406 --- /dev/null +++ b/user/src/main/kotlin/com/damaba/user/domain/user/constant/UserType.kt @@ -0,0 +1,7 @@ +package com.damaba.user.domain.user.constant + +enum class UserType { + USER, + PHOTOGRAPHER, + UNDEFINED, +} diff --git a/user/src/test/kotlin/com/damaba/user/domain/user/UserTest.kt b/user/src/test/kotlin/com/damaba/user/domain/user/UserTest.kt index de378ac..11c6e8d 100644 --- a/user/src/test/kotlin/com/damaba/user/domain/user/UserTest.kt +++ b/user/src/test/kotlin/com/damaba/user/domain/user/UserTest.kt @@ -3,6 +3,7 @@ package com.damaba.user.domain.user import com.damaba.user.domain.user.constant.Gender import com.damaba.user.domain.user.constant.LoginType import com.damaba.user.domain.user.constant.UserRoleType +import com.damaba.user.domain.user.constant.UserType import com.damaba.user.util.RandomTestUtils.Companion.randomString import com.damaba.user.util.RandomTestUtils.Companion.randomUrl import com.damaba.user.util.TestFixture.createUser @@ -22,12 +23,12 @@ class UserTest { // then assertThat(userCreated.id).isEqualTo(0L) + assertThat(userCreated.type).isEqualTo(UserType.UNDEFINED) assertThat(userCreated.roles).containsOnly(UserRoleType.USER) assertThat(userCreated.loginType).isEqualTo(loginType) assertThat(userCreated.oAuthLoginUid).isEqualTo(oAuthLoginUid) assertThat(userCreated.nickname).isEqualTo(nickname) assertThat(userCreated.profileImage).isEqualTo(User.DEFAULT_PROFILE_IMAGE) - assertThat(userCreated.gender).isEqualTo(User.DEFAULT_GENDER) assertThat(userCreated.instagramId).isNull() // 유저가 생성된 직후에는 isRegistrationCompleted가 false diff --git a/user/src/test/kotlin/com/damaba/user/util/TestFixture.kt b/user/src/test/kotlin/com/damaba/user/util/TestFixture.kt index ccb28f7..e7891f2 100644 --- a/user/src/test/kotlin/com/damaba/user/util/TestFixture.kt +++ b/user/src/test/kotlin/com/damaba/user/util/TestFixture.kt @@ -6,6 +6,7 @@ import com.damaba.user.domain.user.UserProfileImage import com.damaba.user.domain.user.constant.Gender import com.damaba.user.domain.user.constant.LoginType import com.damaba.user.domain.user.constant.UserRoleType +import com.damaba.user.domain.user.constant.UserType import com.damaba.user.util.RandomTestUtils.Companion.randomLong import com.damaba.user.util.RandomTestUtils.Companion.randomString import com.damaba.user.util.RandomTestUtils.Companion.randomUrl @@ -27,6 +28,7 @@ object TestFixture { fun createUser( id: Long = randomLong(), + type: UserType = UserType.USER, roles: Set = setOf(UserRoleType.USER), oAuthLoginUid: String = randomString(), loginType: LoginType = LoginType.KAKAO, @@ -36,6 +38,7 @@ object TestFixture { instagramId: String? = randomString(len = 30), ): User = User( id = id, + type = type, roles = roles, oAuthLoginUid = oAuthLoginUid, loginType = loginType,