From 0d1a0e4d417cd9d20a598a9cb4ba13b5d34d8d45 Mon Sep 17 00:00:00 2001 From: leegwichan Date: Tue, 2 Dec 2025 13:13:17 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=EA=B8=B0=EA=B4=80=20=EB=B3=84=20?= =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=20=EC=97=94=ED=8B=B0=ED=8B=B0=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../organization/OrganizationEntity.java | 35 ++++++++++++++++ .../OrganizationTemplateEntity.java | 41 +++++++++++++++++++ .../V15__create_organization_template.sql | 26 ++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java create mode 100644 src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java create mode 100644 src/main/resources/db/migration/V15__create_organization_template.sql diff --git a/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java b/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java new file mode 100644 index 00000000..ea0ca13a --- /dev/null +++ b/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java @@ -0,0 +1,35 @@ +package com.debatetimer.entity.organization; + +import com.debatetimer.entity.BaseTimeEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Table(name = "organization") +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class OrganizationEntity extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotBlank + private String name; + + @NotNull + private String affiliation; + + @Column(name = "icon_path") + @NotBlank + private String iconPath; +} diff --git a/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java b/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java new file mode 100644 index 00000000..f5c818e1 --- /dev/null +++ b/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java @@ -0,0 +1,41 @@ +package com.debatetimer.entity.organization; + + +import com.debatetimer.entity.BaseTimeEntity; +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 jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Table(name = "organization_template") +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class OrganizationTemplateEntity extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "organization_id") + private OrganizationEntity organization; + + @NotBlank + private String name; + + @NotBlank + @Column(length = 8191) + private String data; +} diff --git a/src/main/resources/db/migration/V15__create_organization_template.sql b/src/main/resources/db/migration/V15__create_organization_template.sql new file mode 100644 index 00000000..42ea295c --- /dev/null +++ b/src/main/resources/db/migration/V15__create_organization_template.sql @@ -0,0 +1,26 @@ +create table organization +( + id bigint auto_increment, + name varchar(255) not null, + affiliation varchar(255) not null, + icon_path varchar(255) not null, + created_at timestamp not null DEFAULT CURRENT_TIMESTAMP, + modified_at timestamp not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + primary key (id) +); + +create table organization_template +( + id bigint auto_increment, + name varchar(255) not null, + data varchar(8191) not null, + organization_id bigint not null, + created_at timestamp not null DEFAULT CURRENT_TIMESTAMP, + modified_at timestamp not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + primary key (id) +); + +alter table organization_template + add constraint organization_template_to_organization + foreign key (organization_id) + references organization (id); From 4792574542bfad3f672381b8d7b5a2b168388a32 Mon Sep 17 00:00:00 2001 From: leegwichan Date: Tue, 2 Dec 2025 14:48:19 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=EA=B8=B0=EA=B4=80=20=EB=B3=84=20?= =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=20=EB=8F=84=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/organization/Organization.java | 24 +++++++++++++++++++ .../organization/OrganizationTemplate.java | 17 +++++++++++++ .../organization/OrganizationEntity.java | 7 ++++++ .../OrganizationTemplateEntity.java | 5 ++++ 4 files changed, 53 insertions(+) create mode 100644 src/main/java/com/debatetimer/domain/organization/Organization.java create mode 100644 src/main/java/com/debatetimer/domain/organization/OrganizationTemplate.java diff --git a/src/main/java/com/debatetimer/domain/organization/Organization.java b/src/main/java/com/debatetimer/domain/organization/Organization.java new file mode 100644 index 00000000..93e4927e --- /dev/null +++ b/src/main/java/com/debatetimer/domain/organization/Organization.java @@ -0,0 +1,24 @@ +package com.debatetimer.domain.organization; + +import java.util.List; + +public class Organization { + + private final Long id; + private final String name; + private final String affiliation; + private final String iconPath; + private final List templates; + + public Organization(Long id, + String name, + String affiliation, + String iconPath, + List templates) { + this.id = id; + this.name = name; + this.affiliation = affiliation; + this.iconPath = iconPath; + this.templates = templates; + } +} diff --git a/src/main/java/com/debatetimer/domain/organization/OrganizationTemplate.java b/src/main/java/com/debatetimer/domain/organization/OrganizationTemplate.java new file mode 100644 index 00000000..6c920f38 --- /dev/null +++ b/src/main/java/com/debatetimer/domain/organization/OrganizationTemplate.java @@ -0,0 +1,17 @@ +package com.debatetimer.domain.organization; + +import lombok.Getter; + +@Getter +public class OrganizationTemplate { + + private final Long id; + private final String name; + private final String data; + + public OrganizationTemplate(Long id, String name, String data) { + this.id = id; + this.name = name; + this.data = data; + } +} diff --git a/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java b/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java index ea0ca13a..61959344 100644 --- a/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java +++ b/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java @@ -1,5 +1,7 @@ package com.debatetimer.entity.organization; +import com.debatetimer.domain.organization.Organization; +import com.debatetimer.domain.organization.OrganizationTemplate; import com.debatetimer.entity.BaseTimeEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -9,6 +11,7 @@ import jakarta.persistence.Table; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import java.util.List; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -32,4 +35,8 @@ public class OrganizationEntity extends BaseTimeEntity { @Column(name = "icon_path") @NotBlank private String iconPath; + + public Organization toDomain(List templates) { + return new Organization(this.id, this.name, this.affiliation, this.iconPath, templates); + } } diff --git a/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java b/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java index f5c818e1..ce3459a9 100644 --- a/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java +++ b/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java @@ -1,6 +1,7 @@ package com.debatetimer.entity.organization; +import com.debatetimer.domain.organization.OrganizationTemplate; import com.debatetimer.entity.BaseTimeEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -38,4 +39,8 @@ public class OrganizationTemplateEntity extends BaseTimeEntity { @NotBlank @Column(length = 8191) private String data; + + public OrganizationTemplate toDomain() { + return new OrganizationTemplate(this.id, this.name, this.data); + } } From f3b0ba8a9dc7acc2816a9c8eb9fef4e1044502c5 Mon Sep 17 00:00:00 2001 From: leegwichan Date: Tue, 2 Dec 2025 15:30:26 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=EA=B8=B0=EA=B4=80=20=EB=B3=84=20?= =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=20=EB=8F=84=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EB=A0=88=ED=8F=AC=EC=A7=80=ED=86=A0=EB=A6=AC=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/organization/Organization.java | 2 + .../OrganizationDomainRepository.java | 37 ++++++++++++++++++ .../organization/OrganizationEntity.java | 6 +++ .../OrganizationTemplateEntity.java | 10 +++++ .../organization/OrganizationRepository.java | 12 ++++++ .../OrganizationTemplateRepository.java | 12 ++++++ .../BaseDomainRepositoryTest.java | 8 ++++ .../OrganizationDomainRepositoryTest.java | 39 +++++++++++++++++++ .../entity/OrganizationEntityGenerator.java | 22 +++++++++++ .../OrganizationTemplateEntityGenerator.java | 24 ++++++++++++ 10 files changed, 172 insertions(+) create mode 100644 src/main/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepository.java create mode 100644 src/main/java/com/debatetimer/repository/organization/OrganizationRepository.java create mode 100644 src/main/java/com/debatetimer/repository/organization/OrganizationTemplateRepository.java create mode 100644 src/test/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepositoryTest.java create mode 100644 src/test/java/com/debatetimer/fixture/entity/OrganizationEntityGenerator.java create mode 100644 src/test/java/com/debatetimer/fixture/entity/OrganizationTemplateEntityGenerator.java diff --git a/src/main/java/com/debatetimer/domain/organization/Organization.java b/src/main/java/com/debatetimer/domain/organization/Organization.java index 93e4927e..23b0b219 100644 --- a/src/main/java/com/debatetimer/domain/organization/Organization.java +++ b/src/main/java/com/debatetimer/domain/organization/Organization.java @@ -1,7 +1,9 @@ package com.debatetimer.domain.organization; import java.util.List; +import lombok.Getter; +@Getter public class Organization { private final Long id; diff --git a/src/main/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepository.java b/src/main/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepository.java new file mode 100644 index 00000000..3c95358a --- /dev/null +++ b/src/main/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepository.java @@ -0,0 +1,37 @@ +package com.debatetimer.domainrepository.organization; + +import static java.util.stream.Collectors.groupingBy; +import static java.util.stream.Collectors.mapping; +import static java.util.stream.Collectors.toList; + +import com.debatetimer.domain.organization.Organization; +import com.debatetimer.domain.organization.OrganizationTemplate; +import com.debatetimer.entity.organization.OrganizationTemplateEntity; +import com.debatetimer.repository.organization.OrganizationRepository; +import com.debatetimer.repository.organization.OrganizationTemplateRepository; +import java.util.List; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class OrganizationDomainRepository { + + private final OrganizationRepository organizationRepository; + private final OrganizationTemplateRepository organizationTemplateDomainRepository; + + public List findAll() { + Map> idToTemplatesEntity = organizationTemplateDomainRepository.findAll() + .stream() + .collect(groupingBy( + OrganizationTemplateEntity::getOrganizationId, + mapping(OrganizationTemplateEntity::toDomain, toList())) + ); + + return organizationRepository.findAll() + .stream() + .map(entity -> entity.toDomain(idToTemplatesEntity.get(entity.getId()))) + .toList(); + } +} diff --git a/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java b/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java index 61959344..19cc152d 100644 --- a/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java +++ b/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java @@ -36,6 +36,12 @@ public class OrganizationEntity extends BaseTimeEntity { @NotBlank private String iconPath; + public OrganizationEntity(String name, String affiliation, String iconPath) { + this.name = name; + this.affiliation = affiliation; + this.iconPath = iconPath; + } + public Organization toDomain(List templates) { return new Organization(this.id, this.name, this.affiliation, this.iconPath, templates); } diff --git a/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java b/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java index ce3459a9..96753279 100644 --- a/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java +++ b/src/main/java/com/debatetimer/entity/organization/OrganizationTemplateEntity.java @@ -40,7 +40,17 @@ public class OrganizationTemplateEntity extends BaseTimeEntity { @Column(length = 8191) private String data; + public OrganizationTemplateEntity(OrganizationEntity organization, String name, String data) { + this.organization = organization; + this.name = name; + this.data = data; + } + public OrganizationTemplate toDomain() { return new OrganizationTemplate(this.id, this.name, this.data); } + + public Long getOrganizationId() { + return this.organization.getId(); + } } diff --git a/src/main/java/com/debatetimer/repository/organization/OrganizationRepository.java b/src/main/java/com/debatetimer/repository/organization/OrganizationRepository.java new file mode 100644 index 00000000..5c6ef65a --- /dev/null +++ b/src/main/java/com/debatetimer/repository/organization/OrganizationRepository.java @@ -0,0 +1,12 @@ +package com.debatetimer.repository.organization; + +import com.debatetimer.entity.organization.OrganizationEntity; +import java.util.List; +import org.springframework.data.repository.Repository; + +public interface OrganizationRepository extends Repository { + + List findAll(); + + OrganizationEntity save(OrganizationEntity organizationEntity); +} diff --git a/src/main/java/com/debatetimer/repository/organization/OrganizationTemplateRepository.java b/src/main/java/com/debatetimer/repository/organization/OrganizationTemplateRepository.java new file mode 100644 index 00000000..4c5b7472 --- /dev/null +++ b/src/main/java/com/debatetimer/repository/organization/OrganizationTemplateRepository.java @@ -0,0 +1,12 @@ +package com.debatetimer.repository.organization; + +import com.debatetimer.entity.organization.OrganizationTemplateEntity; +import java.util.List; +import org.springframework.data.repository.Repository; + +public interface OrganizationTemplateRepository extends Repository { + + List findAll(); + + OrganizationTemplateEntity save(OrganizationTemplateEntity entity); +} diff --git a/src/test/java/com/debatetimer/domainrepository/BaseDomainRepositoryTest.java b/src/test/java/com/debatetimer/domainrepository/BaseDomainRepositoryTest.java index 485a7f25..16b60f98 100644 --- a/src/test/java/com/debatetimer/domainrepository/BaseDomainRepositoryTest.java +++ b/src/test/java/com/debatetimer/domainrepository/BaseDomainRepositoryTest.java @@ -8,6 +8,8 @@ import com.debatetimer.fixture.entity.CustomizeTableEntityGenerator; import com.debatetimer.fixture.entity.CustomizeTimeBoxEntityGenerator; import com.debatetimer.fixture.entity.MemberGenerator; +import com.debatetimer.fixture.entity.OrganizationEntityGenerator; +import com.debatetimer.fixture.entity.OrganizationTemplateEntityGenerator; import com.debatetimer.fixture.entity.PollEntityGenerator; import com.debatetimer.fixture.entity.VoteEntityGenerator; import com.debatetimer.repository.customize.BellRepository; @@ -49,6 +51,12 @@ public abstract class BaseDomainRepositoryTest { @Autowired protected VoteEntityGenerator voteEntityGenerator; + @Autowired + protected OrganizationEntityGenerator organizationEntityGenerator; + + @Autowired + protected OrganizationTemplateEntityGenerator organizationTemplateEntityGenerator; + @Autowired protected PollRepository pollRepository; diff --git a/src/test/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepositoryTest.java b/src/test/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepositoryTest.java new file mode 100644 index 00000000..8e28eb07 --- /dev/null +++ b/src/test/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepositoryTest.java @@ -0,0 +1,39 @@ +package com.debatetimer.domainrepository.organization; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +import com.debatetimer.domain.organization.Organization; +import com.debatetimer.domainrepository.BaseDomainRepositoryTest; +import com.debatetimer.entity.organization.OrganizationEntity; +import java.util.List; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class OrganizationDomainRepositoryTest extends BaseDomainRepositoryTest { + + @Autowired + private OrganizationDomainRepository organizationDomainRepository; + + @Nested + class FindAll { + + @Test + void 모든_조직_템플릿을_가져온다() { + OrganizationEntity organization1 = organizationEntityGenerator.generate("한앎", "한양대"); + OrganizationEntity organization2 = organizationEntityGenerator.generate("한모름", "양한대"); + organizationTemplateEntityGenerator.generate(organization1, "템플릿1"); + organizationTemplateEntityGenerator.generate(organization1, "템플릿2"); + organizationTemplateEntityGenerator.generate(organization2, "릿플템1"); + + List organizations = organizationDomainRepository.findAll(); + + assertAll( + () -> assertThat(organizations).hasSize(2), + () -> assertThat(organizations.get(0).getTemplates()).hasSize(2), + () -> assertThat(organizations.get(1).getTemplates()).hasSize(1) + ); + } + } +} diff --git a/src/test/java/com/debatetimer/fixture/entity/OrganizationEntityGenerator.java b/src/test/java/com/debatetimer/fixture/entity/OrganizationEntityGenerator.java new file mode 100644 index 00000000..f193aeca --- /dev/null +++ b/src/test/java/com/debatetimer/fixture/entity/OrganizationEntityGenerator.java @@ -0,0 +1,22 @@ +package com.debatetimer.fixture.entity; + +import com.debatetimer.entity.organization.OrganizationEntity; +import com.debatetimer.repository.organization.OrganizationRepository; +import org.springframework.stereotype.Component; + +@Component +public class OrganizationEntityGenerator { + + private static final String DEFAULT_ICON_PATH = "/static/icons/default_icon.png"; + + private final OrganizationRepository organizationRepository; + + public OrganizationEntityGenerator(OrganizationRepository organizationRepository) { + this.organizationRepository = organizationRepository; + } + + public OrganizationEntity generate(String name, String affiliation) { + OrganizationEntity organization = new OrganizationEntity(name, affiliation, DEFAULT_ICON_PATH); + return organizationRepository.save(organization); + } +} diff --git a/src/test/java/com/debatetimer/fixture/entity/OrganizationTemplateEntityGenerator.java b/src/test/java/com/debatetimer/fixture/entity/OrganizationTemplateEntityGenerator.java new file mode 100644 index 00000000..45242cd7 --- /dev/null +++ b/src/test/java/com/debatetimer/fixture/entity/OrganizationTemplateEntityGenerator.java @@ -0,0 +1,24 @@ +package com.debatetimer.fixture.entity; + +import com.debatetimer.entity.organization.OrganizationEntity; +import com.debatetimer.entity.organization.OrganizationTemplateEntity; +import com.debatetimer.repository.organization.OrganizationTemplateRepository; +import org.springframework.stereotype.Component; + +@Component +public class OrganizationTemplateEntityGenerator { + + private static final String DEFAULT_TEMPLATE_CONTENT = "eJyrVspMUbIytjDXUcrMS8tXsqpWykvMTVWyUjJWKCtWMFZ427b1TXPj27YFrxcueN3T8HZWj8LbGVPfdM9V0lEqqSwAqXQODQ7x9%2FWMcgUKJaan5qUkAgWB7IKi%2FOKQ1MRcP4iBbzasedOyESienJ%2BHLP56wwygwUDx8sSivMy8dKfUnBwlq7TEnOJUHaW0zLzM4gwkoVqgtYlJOUCN0dVKxSWJeckgMwKC%2FIOBJhQXpKYmZ4RAnPVmXivQzUDRpPwKqJCff5Cvow%2FI5Zkgqw2NDICyYLPzSnNyIMIBqUUgx6EJBRekJmYDHQcTLgbxU4sg3FodJKc4%2B%2FsNFqf4uYaGBIEtQXPNhDdzFkCiFMVNIZ6%2BrvFOjsGuLnB3QazA6TBzkLMx3AX2DIkhtHXOm0WtCq83zHkzbQfdAwpr8qG7i2JrAbdLRw0%3D"; + + private final OrganizationTemplateRepository organizationTemplateRepository; + + public OrganizationTemplateEntityGenerator(OrganizationTemplateRepository organizationTemplateRepository) { + this.organizationTemplateRepository = organizationTemplateRepository; + } + + public OrganizationTemplateEntity generate(OrganizationEntity organization, String name) { + OrganizationTemplateEntity template = + new OrganizationTemplateEntity(organization, name, DEFAULT_TEMPLATE_CONTENT); + return organizationTemplateRepository.save(template); + } +} From 778cae5af00304caaf01220c1089889bfd06cb65 Mon Sep 17 00:00:00 2001 From: leegwichan Date: Tue, 2 Dec 2025 17:08:19 +0900 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20`@Column`=20=EA=B8=B0=EB=B3=B8?= =?UTF-8?q?=EA=B0=92=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/debatetimer/entity/organization/OrganizationEntity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java b/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java index 19cc152d..326e289e 100644 --- a/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java +++ b/src/main/java/com/debatetimer/entity/organization/OrganizationEntity.java @@ -3,7 +3,6 @@ import com.debatetimer.domain.organization.Organization; import com.debatetimer.domain.organization.OrganizationTemplate; import com.debatetimer.entity.BaseTimeEntity; -import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -32,7 +31,6 @@ public class OrganizationEntity extends BaseTimeEntity { @NotNull private String affiliation; - @Column(name = "icon_path") @NotBlank private String iconPath; From 4e6b73a5eeed343f2ac6b22dd1e53f3bb61145f7 Mon Sep 17 00:00:00 2001 From: leegwichan Date: Tue, 2 Dec 2025 17:09:25 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20NPE=20=EB=B0=A9=EC=96=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../organization/OrganizationDomainRepository.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepository.java b/src/main/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepository.java index 3c95358a..f13054e6 100644 --- a/src/main/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepository.java +++ b/src/main/java/com/debatetimer/domainrepository/organization/OrganizationDomainRepository.java @@ -9,6 +9,7 @@ import com.debatetimer.entity.organization.OrganizationTemplateEntity; import com.debatetimer.repository.organization.OrganizationRepository; import com.debatetimer.repository.organization.OrganizationTemplateRepository; +import java.util.Collections; import java.util.List; import java.util.Map; import lombok.RequiredArgsConstructor; @@ -19,10 +20,10 @@ public class OrganizationDomainRepository { private final OrganizationRepository organizationRepository; - private final OrganizationTemplateRepository organizationTemplateDomainRepository; + private final OrganizationTemplateRepository organizationTemplateRepository; public List findAll() { - Map> idToTemplatesEntity = organizationTemplateDomainRepository.findAll() + Map> idToTemplatesEntity = organizationTemplateRepository.findAll() .stream() .collect(groupingBy( OrganizationTemplateEntity::getOrganizationId, @@ -31,7 +32,8 @@ public List findAll() { return organizationRepository.findAll() .stream() - .map(entity -> entity.toDomain(idToTemplatesEntity.get(entity.getId()))) - .toList(); + .map(entity -> entity.toDomain( + idToTemplatesEntity.getOrDefault(entity.getId(), Collections.emptyList())) + ).toList(); } }