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

BE 테스트 환경 변경 #346

Merged
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
Expand Up @@ -21,17 +21,15 @@
import codezap.global.validation.ValidationSequence;
import codezap.member.configuration.BasicAuthentication;
import codezap.member.dto.MemberDto;
import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
@RequestMapping("/categories")
public class CategoryController implements SpringDocCategoryController {

private final CategoryService categoryService;

public CategoryController(CategoryService categoryService) {
this.categoryService = categoryService;
}

@PostMapping
public ResponseEntity<Void> createCategory(
@Validated(ValidationSequence.class) @RequestBody CreateCategoryRequest createCategoryRequest,
Expand Down
2 changes: 2 additions & 0 deletions backend/src/main/java/codezap/category/domain/Category.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@
import codezap.member.domain.Member;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@EqualsAndHashCode(callSuper = false)
@Table(
uniqueConstraints = {
@UniqueConstraint(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,36 +12,29 @@
import codezap.global.exception.CodeZapException;
import codezap.member.domain.Member;
import codezap.member.dto.MemberDto;
import codezap.member.repository.MemberJpaRepository;
import codezap.member.repository.MemberRepository;
import codezap.template.repository.TemplateRepository;
import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class CategoryService {

private final CategoryRepository categoryRepository;
private final TemplateRepository templateRepository;
private final MemberRepository memberJpaRepository;

public CategoryService(CategoryRepository categoryRepository, TemplateRepository templateRepository,
MemberJpaRepository memberJpaRepository
) {
this.categoryRepository = categoryRepository;
this.templateRepository = templateRepository;
this.memberJpaRepository = memberJpaRepository;
}
private final MemberRepository memberRepository;

@Transactional
public Long create(CreateCategoryRequest createCategoryRequest, MemberDto memberDto) {
String categoryName = createCategoryRequest.name();
Member member = memberJpaRepository.fetchById(memberDto.id());
Member member = memberRepository.fetchById(memberDto.id());
validateDuplicatedCategory(categoryName, member);
Category category = new Category(categoryName, member);
return categoryRepository.save(category).getId();
}

public FindAllCategoriesResponse findAllByMember(Long memberId) {
Member member = memberJpaRepository.fetchById(memberId);
Member member = memberRepository.fetchById(memberId);
return FindAllCategoriesResponse.from(categoryRepository.findAllByMember(member));
}

Expand All @@ -51,7 +44,7 @@ public FindAllCategoriesResponse findAll() {

@Transactional
public void update(Long id, UpdateCategoryRequest updateCategoryRequest, MemberDto memberDto) {
Member member = memberJpaRepository.fetchById(memberDto.id());
Member member = memberRepository.fetchById(memberDto.id());
validateDuplicatedCategory(updateCategoryRequest.name(), member);
Category category = categoryRepository.fetchById(id);
validateAuthorizeMember(category, member);
Expand All @@ -65,7 +58,7 @@ private void validateDuplicatedCategory(String categoryName, Member member) {
}

public void deleteById(Long id, MemberDto memberDto) {
Member member = memberJpaRepository.fetchById(memberDto.id());
Member member = memberRepository.fetchById(memberDto.id());
Category category = categoryRepository.fetchById(id);
validateAuthorizeMember(category, member);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ public class MemberService {

private final MemberRepository memberRepository;
private final AuthService authService;
private final CategoryRepository categoryJpaRepository;
private final CategoryRepository categoryRepository;

public Member signup(SignupRequest request) {
assertUniqueEmail(request.email());
assertUniqueUsername(request.username());
Member member = new Member(request.email(), request.password(), request.username());
Member saved = memberRepository.save(member);
categoryJpaRepository.save(Category.createDefaultCategory(saved));
categoryRepository.save(Category.createDefaultCategory(saved));
return saved;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,15 @@
import codezap.template.dto.response.FindAllTemplatesResponse;
import codezap.template.dto.response.FindTemplateResponse;
import codezap.template.service.TemplateService;
import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
@RequestMapping("/templates")
public class TemplateController implements SpringDocTemplateController {

private final TemplateService templateService;

public TemplateController(TemplateService templateService) {
this.templateService = templateService;
}

@PostMapping
public ResponseEntity<Void> create(
@Validated(ValidationSequence.class) @RequestBody CreateTemplateRequest createTemplateRequest,
Expand Down
4 changes: 4 additions & 0 deletions backend/src/main/java/codezap/template/domain/Snippet.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,16 @@

import codezap.global.auditing.BaseTimeEntity;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@EqualsAndHashCode(callSuper = false)
public class Snippet extends BaseTimeEntity {

private static final String LINE_BREAK = "\n";
Expand Down
4 changes: 4 additions & 0 deletions backend/src/main/java/codezap/template/domain/Tag.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@

import codezap.global.auditing.BaseTimeEntity;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@EqualsAndHashCode(callSuper = false)
public class Tag extends BaseTimeEntity {

@Id
Expand Down
20 changes: 20 additions & 0 deletions backend/src/main/java/codezap/template/domain/Template.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,32 @@
package codezap.template.domain;

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

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.ManyToOne;
import jakarta.persistence.OneToMany;

import codezap.category.domain.Category;
import codezap.global.auditing.BaseTimeEntity;
import codezap.member.domain.Member;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@EqualsAndHashCode(callSuper = false)
public class Template extends BaseTimeEntity {

@Id
Expand All @@ -37,6 +46,9 @@ public class Template extends BaseTimeEntity {
@ManyToOne(optional = false)
private Category category;

@OneToMany(mappedBy = "template")
private List<Snippet> snippets = new ArrayList<>();

public Template(Member member, String title, String description, Category category) {
this.member = member;
this.title = title;
Expand All @@ -49,4 +61,12 @@ public void updateTemplate(String title, String description, Category category)
this.description = description;
this.category = category;
}

public void updateSnippets(List<Snippet> snippet) {
snippets.addAll(snippet);
}

public void deleteSnippet(Long deletedId) {
snippets.removeIf(snippet -> Objects.equals(snippet.getId(), deletedId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@EqualsAndHashCode(callSuper = false)
public class TemplateTag extends BaseTimeEntity {

@Embeddable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@

import codezap.global.auditing.BaseTimeEntity;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@EqualsAndHashCode(callSuper = false)
public class ThumbnailSnippet extends BaseTimeEntity {

@Id
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package codezap.template.repository;

import java.util.List;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.http.HttpStatus;

import codezap.global.exception.CodeZapException;
import codezap.template.domain.Snippet;
import codezap.template.domain.Template;

@SuppressWarnings("unused")
public interface SnippetJpaRepository extends SnippetRepository, JpaRepository<Snippet, Long> {
default Snippet fetchById(Long id) {
return findById(id).orElseThrow(
() -> new CodeZapException(HttpStatus.NOT_FOUND, "식별자 " + id + "에 해당하는 스니펫이 존재하지 않습니다."));
}

List<Snippet> findAllByTemplate(Template template);

Optional<Snippet> findByTemplateAndOrdinal(Template template, int ordinal);

List<Snippet> findAllByTemplateAndOrdinal(Template template, int ordinal);

void deleteByTemplateId(Long id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,25 @@
import java.util.List;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.http.HttpStatus;

import codezap.global.exception.CodeZapException;
import codezap.template.domain.Snippet;
import codezap.template.domain.Template;

public interface SnippetRepository extends JpaRepository<Snippet, Long> {
default Snippet fetchById(Long id) {
return findById(id).orElseThrow(
() -> new CodeZapException(HttpStatus.NOT_FOUND, "식별자 " + id + "에 해당하는 스니펫이 존재하지 않습니다."));
}
public interface SnippetRepository {
Snippet fetchById(Long id);

List<Snippet> findAll();

List<Snippet> findAllByTemplate(Template template);

Optional<Snippet> findByTemplateAndOrdinal(Template template, int ordinal);

List<Snippet> findAllByTemplateAndOrdinal(Template template, int ordinal);

Snippet save(Snippet snippet);

<S extends Snippet> List<S> saveAll(Iterable<S> entities);

void deleteById(Long id);

void deleteByTemplateId(Long id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package codezap.template.repository;

import java.util.List;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.http.HttpStatus;

import codezap.global.exception.CodeZapException;
import codezap.template.domain.Tag;

@SuppressWarnings("unused")
public interface TagJpaRepository extends TagRepository, JpaRepository<Tag, Long> {

default Tag fetchById(Long id) {
return findById(id).orElseThrow(
() -> new CodeZapException(HttpStatus.NOT_FOUND, "식별자 " + id + "에 해당하는 태그가 존재하지 않습니다."));
}

boolean existsByName(String name);

Optional<Tag> findByName(String name);

List<Tag> findByNameIn(List<String> tagNames);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,20 @@
import java.util.List;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.http.HttpStatus;

import codezap.global.exception.CodeZapException;
import codezap.template.domain.Tag;

public interface TagRepository extends JpaRepository<Tag, Long> {
public interface TagRepository {

default Tag fetchById(Long id) {
return findById(id).orElseThrow(
() -> new CodeZapException(HttpStatus.NOT_FOUND, "식별자 " + id + "에 해당하는 태그가 존재하지 않습니다."));
}
Tag fetchById(Long id);

boolean existsByName(String name);

Optional<Tag> findByName(String name);

List<Tag> findByIdIn(List<Long> tagIds);

Tag save(Tag tag);

<S extends Tag> List<S> saveAll(Iterable<S> entities);

}
Loading