Skip to content
Open
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
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,8 @@ out/

### VS Code ###
.vscode/

### Custom ###
db_dev.mv.db
db_dev.trace.db
.env
2 changes: 2 additions & 0 deletions src/main/java/com/back/BackApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@SpringBootApplication
public class BackApplication {

Expand Down
21 changes: 21 additions & 0 deletions src/main/java/com/back/entity/Member.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.back.entity;

import com.back.jpa.entity.BaseIdAndTime;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor
public class Member extends BaseIdAndTime {
@Column(unique = true)
private String username;
private String password;
private String nickname;

public Member(String username, String password, String nickname) {
this.username = username;
this.password = password;
this.nickname = nickname;
}
}
15 changes: 15 additions & 0 deletions src/main/java/com/back/exception/DomainException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.back.exception;

import lombok.Getter;

@Getter
public class DomainException extends RuntimeException {
private final String resultCode;
private final String msg;

public DomainException(String resultCode, String msg) {
super(resultCode + " : " + msg);
this.resultCode = resultCode;
this.msg = msg;
}
}
41 changes: 41 additions & 0 deletions src/main/java/com/back/initData/DataInit.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.back.initData;

import com.back.entity.Member;
import com.back.service.MemberService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.transaction.annotation.Transactional;

@Configuration
@Slf4j
public class DataInit {
private final DataInit self;
private final MemberService memberService;

public DataInit(@Lazy DataInit self, MemberService memberService) {
this.self = self;
this.memberService = memberService;
}

@Bean
public ApplicationRunner baseInitDataRunner() {
return args -> {
self.makeBaseMembers();
};
}

@Transactional
public void makeBaseMembers() {
if (memberService.count() > 0) return;

Member systemMember = memberService.join("system", "1234", "시스템");
Member holdingMember = memberService.join("holding", "1234", "홀딩");
Member adminMember = memberService.join("admin", "1234", "관리자");
Member user1Member = memberService.join("user1", "1234", "유저1");
Member user2Member = memberService.join("user2", "1234", "유저2");
Member user3Member = memberService.join("user3", "1234", "유저3");
}
}
16 changes: 16 additions & 0 deletions src/main/java/com/back/jpa/entity/BaseEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.back.jpa.entity;

import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Getter
// 모든 엔티티들의 조상
public class BaseEntity {
public String getModelTypeCode() {
return this.getClass().getSimpleName();
}
}
27 changes: 27 additions & 0 deletions src/main/java/com/back/jpa/entity/BaseIdAndTime.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.back.jpa.entity;

import jakarta.persistence.EntityListeners;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

import static jakarta.persistence.GenerationType.IDENTITY;

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Getter
public class BaseIdAndTime extends BaseEntity {
@Id
@GeneratedValue(strategy = IDENTITY)
private int id;
@CreatedDate
private LocalDateTime createDate;
@LastModifiedDate
private LocalDateTime modifyDate;
}
10 changes: 10 additions & 0 deletions src/main/java/com/back/repository/MemberRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.back.repository;

import com.back.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface MemberRepository extends JpaRepository<Member, Integer> {
Optional<Member> findByUsername(String username);
}
33 changes: 33 additions & 0 deletions src/main/java/com/back/service/MemberService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.back.service;

import com.back.entity.Member;
import com.back.exception.DomainException;
import com.back.repository.MemberRepository;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
public class MemberService {
private final MemberRepository memberRepository;

public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}

public long count() {
return memberRepository.count();
}

public Member join(String username, String password, String nickname) {
findByUsername(username).ifPresent(m -> {
throw new DomainException("409-1", "이미 존재하는 username 입니다.");
});

return memberRepository.save(new Member(username, password, nickname));
}

public Optional<Member> findByUsername(String username) {
return memberRepository.findByUsername(username);
}
}
6 changes: 6 additions & 0 deletions src/main/resources/application-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
spring:
datasource:
url: jdbc:h2:./db_dev;MODE=MySQL
username: sa
password:
driver-class-name: org.h2.Driver
1 change: 0 additions & 1 deletion src/main/resources/application.properties

This file was deleted.

30 changes: 30 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
server:
port: 8080
spring:
application:
name: back
profiles:
active: dev
output:
ansi:
enabled: always
jackson:
serialization:
fail-on-empty-beans: false
jpa:
hibernate:
ddl-auto: update
open-in-view: false
show-sql: true
properties:
hibernate:
format_sql: true
highlight_sql: true
use_sql_comments: true
default_batch_fetch_size: 100
logging:
level:
com.back: DEBUG
org.hibernate.orm.jdbc.bind: TRACE
org.hibernate.orm.jdbc.extract: TRACE
org.springframework.transaction.interceptor: TRACE