Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: 전체 패키지 구조 변경 #114

Merged
merged 4 commits into from
Dec 29, 2023
Merged
Show file tree
Hide file tree
Changes from 3 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
@@ -1,16 +1,19 @@
package in.koreatech.koin.auth;
package in.koreatech.koin.domain.auth;

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C

최상위 domain 패키지는 생략하는게 어떤가요?

domain...domain 과 같은 구조가 나오는데 최상단의 domain이라는 패키지는 생략해도 좋을 것 같다는 의견입니다.

변경 전

image

변경 후

image

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 상위 domain 패키지 생략이 좋아보입니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

가시성은 떨어지긴 하지만,

global은 user, track과 추상화 레벨이 다르다고 생각하여 user와 track을 묶어주는 별도 계층은 필요할 것 같아요

domain.~~.domain이라는 이름이 가시성이 떨어지는 것이 문제라면

domain.~~.model 이런 네이밍은 어떨까요?

참고

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

domain과 model이라는 용어를 분리하는게 좋아보이네요 👍

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A

Q: domain.auth에 인증 관련 유틸리티 객체(JwtProvider)가 있는데 적합할까요?

위와같이 최상단의 domain을 제거하면 굳이 util로 묶지 않아도 좋아보인다는 의견입니다.

import in.koreatech.koin.domain.user.User;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.time.Instant;
import java.util.Base64;
import java.util.Date;

import javax.crypto.SecretKey;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import in.koreatech.koin.domain.user.domain.User;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

@Component
public class JwtProvider {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package in.koreatech.koin.controller.shop;
package in.koreatech.koin.domain.shop.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import in.koreatech.koin.dto.shop.ShopMenuResponse;
import in.koreatech.koin.service.shop.ShopService;
import in.koreatech.koin.domain.shop.dto.ShopMenuResponse;
import in.koreatech.koin.domain.shop.service.ShopService;
import lombok.RequiredArgsConstructor;

@RestController
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package in.koreatech.koin.domain.shop;
package in.koreatech.koin.domain.shop.domain;

import java.util.ArrayList;
import java.util.List;

import in.koreatech.koin.domain.BaseEntity;
import in.koreatech.koin.global.common.BaseEntity;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package in.koreatech.koin.domain.shop;
package in.koreatech.koin.domain.shop.domain;

import java.util.ArrayList;
import java.util.List;

import in.koreatech.koin.domain.BaseEntity;
import in.koreatech.koin.global.common.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package in.koreatech.koin.domain.shop;
package in.koreatech.koin.domain.shop.domain;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package in.koreatech.koin.domain.shop;
package in.koreatech.koin.domain.shop.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package in.koreatech.koin.domain.shop;
package in.koreatech.koin.domain.shop.domain;

import in.koreatech.koin.domain.BaseEntity;
import in.koreatech.koin.global.common.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package in.koreatech.koin.dto.shop;
package in.koreatech.koin.domain.shop.dto;

import java.util.List;

import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;

import in.koreatech.koin.domain.shop.Menu;
import in.koreatech.koin.domain.shop.MenuCategory;
import in.koreatech.koin.domain.shop.MenuImage;
import in.koreatech.koin.domain.shop.MenuOption;
import in.koreatech.koin.domain.shop.domain.Menu;
import in.koreatech.koin.domain.shop.domain.MenuCategory;
import in.koreatech.koin.domain.shop.domain.MenuImage;
import in.koreatech.koin.domain.shop.domain.MenuOption;
import lombok.extern.slf4j.Slf4j;

@Slf4j
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package in.koreatech.koin.repository.shop;
package in.koreatech.koin.domain.shop.repository;

import java.util.Optional;

import org.springframework.data.repository.Repository;

import in.koreatech.koin.domain.shop.Menu;
import in.koreatech.koin.domain.shop.domain.Menu;

public interface MenuRepository extends Repository<Menu, Long> {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package in.koreatech.koin.service.shop;
package in.koreatech.koin.domain.shop.service;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import in.koreatech.koin.domain.shop.Menu;
import in.koreatech.koin.domain.shop.MenuCategory;
import in.koreatech.koin.domain.shop.MenuCategoryMap;
import in.koreatech.koin.dto.shop.ShopMenuResponse;
import in.koreatech.koin.repository.shop.MenuRepository;
import in.koreatech.koin.domain.shop.domain.Menu;
import in.koreatech.koin.domain.shop.domain.MenuCategory;
import in.koreatech.koin.domain.shop.domain.MenuCategoryMap;
import in.koreatech.koin.domain.shop.dto.ShopMenuResponse;
import in.koreatech.koin.domain.shop.repository.MenuRepository;
import lombok.RequiredArgsConstructor;

@Service
Expand All @@ -18,7 +18,7 @@
public class ShopService {

private final MenuRepository menuRepository;

public ShopMenuResponse findMenu(Long menuId) {
Menu menu = menuRepository.findById(menuId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 메뉴입니다."));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
package in.koreatech.koin.controller;
package in.koreatech.koin.domain.track.controller;

import in.koreatech.koin.dto.TrackResponse;
import in.koreatech.koin.dto.TrackSingleResponse;
import in.koreatech.koin.service.TrackService;
import java.util.List;
import lombok.RequiredArgsConstructor;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import in.koreatech.koin.domain.track.dto.TrackResponse;
import in.koreatech.koin.domain.track.dto.TrackSingleResponse;
import in.koreatech.koin.domain.track.service.TrackService;
import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
public class TrackController {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package in.koreatech.koin.domain;
package in.koreatech.koin.domain.track.domain;

import in.koreatech.koin.global.common.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
Expand Down Expand Up @@ -56,7 +57,7 @@ public class Member extends BaseEntity {

@Builder
private Member(String name, String studentNumber, Long trackId, String position, String email, String imageUrl,
Boolean isDeleted) {
Boolean isDeleted) {
this.name = name;
this.studentNumber = studentNumber;
this.trackId = trackId;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package in.koreatech.koin.domain;
package in.koreatech.koin.domain.track.domain;

import in.koreatech.koin.global.common.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
Expand All @@ -14,7 +15,6 @@
import lombok.Getter;
import lombok.NoArgsConstructor;


@Getter
@Entity
@Table(name = "tech_stacks")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package in.koreatech.koin.domain;
package in.koreatech.koin.domain.track.domain;

import in.koreatech.koin.global.common.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,22 @@
package in.koreatech.koin.dto;
package in.koreatech.koin.domain.track.dto;

import java.time.LocalDateTime;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import in.koreatech.koin.domain.Track;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor(access = lombok.AccessLevel.PRIVATE)
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public class TrackResponse {

private Long id;
private String name;
private Integer headcount;
private Boolean isDeleted;
import in.koreatech.koin.domain.track.domain.Track;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public record TrackResponse(
Long id,
String name,
Integer headcount,
Boolean isDeleted,
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdAt,
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updatedAt
) {

public static TrackResponse from(Track track) {
return new TrackResponse(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,22 @@
package in.koreatech.koin.dto;
package in.koreatech.koin.domain.track.dto;

import java.time.LocalDateTime;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import in.koreatech.koin.domain.Member;
import in.koreatech.koin.domain.TechStack;
import in.koreatech.koin.domain.Track;
import java.time.LocalDateTime;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class TrackSingleResponse {
import in.koreatech.koin.domain.track.domain.Member;
import in.koreatech.koin.domain.track.domain.TechStack;
import in.koreatech.koin.domain.track.domain.Track;

@JsonProperty("TrackName")
private String trackName;

@JsonProperty("TechStacks")
private List<InnerTechStackResponse> innerTechStackResponses;

@JsonProperty("Members")
private List<InnerMemberResponse> innerMemberResponses;
public record TrackSingleResponse(
@JsonProperty("TrackName") String trackName,
@JsonProperty("TechStacks") List<InnerTechStackResponse> innerTechStackResponses,
@JsonProperty("Members") List<InnerMemberResponse> innerMemberResponses
) {

public static TrackSingleResponse of(Track track, List<Member> members, List<TechStack> techStacks) {
return new TrackSingleResponse(
Expand All @@ -38,21 +30,17 @@ public static TrackSingleResponse of(Track track, List<Member> members, List<Tec
);
}

@Getter
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public static class InnerTechStackResponse {

private Long id;
private String name;
private String description;
private String imageUrl;
private Long trackId;
private Boolean isDeleted;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
private record InnerTechStackResponse(
Long id,
String name,
String description,
String imageUrl,
Long trackId,
Boolean isDeleted,
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdAt,
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updatedAt
) {

public static InnerTechStackResponse from(TechStack techStack) {
return new InnerTechStackResponse(
Expand All @@ -68,23 +56,19 @@ public static InnerTechStackResponse from(TechStack techStack) {
}
}

@Getter
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)
public static class InnerMemberResponse {

private Long id;
private String name;
private String studentNumber;
private String position;
private String track;
private String email;
private String imageUrl;
private Boolean isDeleted;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
private record InnerMemberResponse(
Long id,
String name,
String studentNumber,
String position,
String track,
String email,
String imageUrl,
Boolean isDeleted,
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdAt,
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updatedAt
) {

public static InnerMemberResponse from(Member member, String trackName) {
return new InnerMemberResponse(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package in.koreatech.koin.repository;
package in.koreatech.koin.domain.track.repository;

import in.koreatech.koin.domain.Member;
import java.util.List;

import org.springframework.data.repository.Repository;

import in.koreatech.koin.domain.track.domain.Member;

public interface MemberRepository extends Repository<Member, Long> {

Member save(Member member);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package in.koreatech.koin.repository;
package in.koreatech.koin.domain.track.repository;

import in.koreatech.koin.domain.TechStack;
import java.util.List;

import org.springframework.data.repository.Repository;

import in.koreatech.koin.domain.track.domain.TechStack;

public interface TechStackRepository extends Repository<TechStack, Long> {

TechStack save(TechStack techStack);
Expand Down
Loading
Loading