Skip to content

Commit a4b7267

Browse files
authored
Merge pull request #9 from CommitField/dev
feat: ๋„์ปค ์„ค์ • ํ›„ ๋ณ‘ํ•ฉ
2 parents 6426b09 + f77b123 commit a4b7267

19 files changed

+397
-12
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
## #๏ธโƒฃ Issue Number
2+
3+
<!--- ex) #์ด์Šˆ๋ฒˆํ˜ธ, #์ด์Šˆ๋ฒˆํ˜ธ -->
4+
5+
## ๐Ÿ“ ์š”์•ฝ(Summary)
6+
7+
<!--- ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ ๊ด€๋ จ ์ด์Šˆ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์–ด๋–ป๊ฒŒ๋ณด๋‹ค ๋ฌด์—‡์„ ์™œ ์ˆ˜์ •ํ–ˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. -->
8+
9+
## ๐Ÿ› ๏ธ PR ์œ ํ˜•
10+
11+
์–ด๋–ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋‚˜์š”?
12+
13+
- [ ] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
14+
- [ ] ๋ฒ„๊ทธ ์ˆ˜์ •
15+
- [ ] CSS ๋“ฑ ์‚ฌ์šฉ์ž UI ๋””์ž์ธ ๋ณ€๊ฒฝ
16+
- [ ] ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ(์˜คํƒ€ ์ˆ˜์ •, ํƒญ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ, ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ)
17+
- [ ] ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
18+
- [ ] ์ฃผ์„ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •
19+
- [ ] ๋ฌธ์„œ ์ˆ˜์ •
20+
- [ ] ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€, ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง
21+
- [ ] ๋นŒ๋“œ ๋ถ€๋ถ„ ํ˜น์€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ •
22+
- [ ] ํŒŒ์ผ ํ˜น์€ ํด๋”๋ช… ์ˆ˜์ •
23+
- [ ] ํŒŒ์ผ ํ˜น์€ ํด๋” ์‚ญ์ œ
24+
25+
## ๐Ÿ“ธ์Šคํฌ๋ฆฐ์ƒท (์„ ํƒ)
26+
27+
## ๐Ÿ’ฌ ๊ณต์œ ์‚ฌํ•ญ to ๋ฆฌ๋ทฐ์–ด
28+
29+
<!--- ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ค‘์ ์ ์œผ๋กœ ๋ด์คฌ์œผ๋ฉด ์ข‹๊ฒ ๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์ ์–ด์ฃผ์„ธ์š”. -->
30+
<!--- ๋…ผ์˜ํ•ด์•ผํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ ์–ด์ฃผ์„ธ์š”.-->
31+
<!--- ex) ๋ฉ”์„œ๋“œ XXX์˜ ์ด๋ฆ„์„ ๋” ์ž˜ ์ง“๊ณ  ์‹ถ์€๋ฐ ํ˜น์‹œ ์ข‹์€ ๋ช…์นญ์ด ์žˆ์„๊นŒ์š”? -->
32+
33+
## โœ… PR Checklist
34+
35+
PR์ด ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
36+
37+
- [ ] ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
38+
- [ ] ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.(๋ฒ„๊ทธ ์ˆ˜์ •/๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ).

โ€Ž.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ override.tf.json
7171

7272
### ๋„์ปค ์ปดํฌ์ฆˆ ํŒŒ์ผ
7373
docker-compose.yml
74+
docker-compose.yaml
7475

7576
### dbํŒŒ์ผ
7677
db/

โ€Žbuild.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ repositories {
2626
dependencies {
2727
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
2828
implementation("org.springframework.boot:spring-boot-starter-security")
29+
implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
2930
implementation("org.springframework.boot:spring-boot-starter-web")
3031
implementation("org.springframework.boot:spring-boot-starter-websocket")
3132
compileOnly("org.projectlombok:lombok")

โ€Žcompose.yaml

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# ํ…Œ์ŠคํŒ…
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package cmf.commitField.domain.user.controller;
2+
3+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
4+
import org.springframework.security.oauth2.core.user.OAuth2User;
5+
import org.springframework.web.bind.annotation.GetMapping;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import java.util.Map;
9+
10+
@RestController
11+
public class AuthController {
12+
@GetMapping("/user")
13+
public Map<String, Object> user(@AuthenticationPrincipal OAuth2User principal) {
14+
return principal.getAttributes(); // ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ˜ํ™˜
15+
}
16+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package cmf.commitField.domain.user.controller;
2+
3+
import jakarta.servlet.http.HttpServletRequest;
4+
import jakarta.servlet.http.HttpServletResponse;
5+
import org.springframework.stereotype.Controller;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
8+
import java.io.IOException;
9+
10+
@Controller
11+
public class LogoutController {
12+
13+
@GetMapping("/logout")
14+
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
15+
request.getSession().invalidate();
16+
response.sendRedirect("/");
17+
}
18+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package cmf.commitField.domain.user.entity;
2+
3+
import cmf.commitField.global.jpa.BaseEntity;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.Id;
6+
import lombok.Builder;
7+
8+
@Entity
9+
@Builder
10+
public class User extends BaseEntity {
11+
@Id
12+
private long id;
13+
private String email;
14+
private String nickname;
15+
private String password;
16+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package cmf.commitField.global.error;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import org.springframework.http.HttpStatus;
6+
7+
@Getter
8+
@AllArgsConstructor
9+
public enum ErrorCode {
10+
11+
// Common
12+
INVALID_INPUT_VALUE(HttpStatus.BAD_REQUEST, "์ œ๊ณต๋œ ์ž…๋ ฅ ๊ฐ’์ด ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."),
13+
METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ์š”์ฒญ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค."),
14+
ENTITY_NOT_FOUND(HttpStatus.BAD_REQUEST, "์š”์ฒญํ•œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."),
15+
INVALID_TYPE_VALUE(HttpStatus.BAD_REQUEST, "์ œ๊ณต๋œ ๊ฐ’์˜ ํƒ€์ž…์ด ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."),
16+
ERROR_PARSING_JSON_RESPONSE(HttpStatus.BAD_REQUEST, "JSON ์‘๋‹ต์„ ํŒŒ์‹ฑํ•˜๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค."),
17+
MISSING_INPUT_VALUE(HttpStatus.BAD_REQUEST, "ํ•„์ˆ˜ ์ž…๋ ฅ ๊ฐ’์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."),
18+
DATABASE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค."),
19+
INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค."),
20+
21+
// User
22+
NOT_FOUND_USER(HttpStatus.BAD_REQUEST, "ํ•ด๋‹น ์œ ์ €๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"),
23+
PASSWORD_MISMATCH(HttpStatus.BAD_REQUEST, "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."),
24+
25+
// Auth
26+
ACCESS_DENIED(HttpStatus.UNAUTHORIZED, "์ธ์ฆ๋˜์ง€ ์•Š์€ ์œ ์ €์ž…๋‹ˆ๋‹ค."),
27+
SC_FORBIDDEN(HttpStatus.UNAUTHORIZED, "๊ถŒํ•œ์ด ์—†๋Š” ์œ ์ €์ž…๋‹ˆ๋‹ค."),
28+
INVALID_JWT_SIGNATURE(HttpStatus.UNAUTHORIZED, "์„œ๋ช… ๊ฒ€์ฆ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค." ),
29+
ILLEGAL_REGISTRATION_ID(HttpStatus.BAD_REQUEST,"ํ•ด๋‹น ์‚ฌํ•ญ์ด ์—†๋Š” ๋กœ๊ทธ์ธ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค."),
30+
31+
TOKEN_EXPIRED(HttpStatus.BAD_REQUEST, "ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."),
32+
33+
// member
34+
MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค");
35+
36+
37+
private final HttpStatus httpStatus;
38+
private final String message;
39+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package cmf.commitField.global.error;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
import org.springframework.http.ResponseEntity;
6+
7+
import java.time.LocalDateTime;
8+
9+
@Getter
10+
public class ErrorResponse {
11+
private final String timestamp;
12+
private final String error;
13+
private final String message;
14+
15+
@Builder
16+
public ErrorResponse(String timestamp, String error, String message){
17+
this.timestamp = timestamp;
18+
this.error = error;
19+
this.message = message;
20+
}
21+
public static ResponseEntity<ErrorResponse> toResponseEntity(ErrorCode errorCode){
22+
return ResponseEntity
23+
.status(errorCode.getHttpStatus())
24+
.body(ErrorResponse.builder()
25+
.timestamp(LocalDateTime.now().toString())
26+
.error(errorCode.getHttpStatus().name())
27+
.message(errorCode.getMessage())
28+
.build()
29+
);
30+
31+
}
32+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package cmf.commitField.global.exception;
2+
3+
import cmf.commitField.global.error.ErrorCode;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
7+
@Getter
8+
@AllArgsConstructor
9+
public class CustomException extends RuntimeException {
10+
private final ErrorCode errorCode;
11+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package cmf.commitField.global.exception;
2+
3+
import cmf.commitField.global.error.ErrorCode;
4+
import cmf.commitField.global.error.ErrorResponse;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.hibernate.exception.ConstraintViolationException;
7+
import org.springframework.http.ResponseEntity;
8+
import org.springframework.http.converter.HttpMessageNotReadableException;
9+
import org.springframework.web.HttpRequestMethodNotSupportedException;
10+
import org.springframework.web.bind.MethodArgumentNotValidException;
11+
import org.springframework.web.bind.MissingServletRequestParameterException;
12+
import org.springframework.web.bind.annotation.ExceptionHandler;
13+
import org.springframework.web.bind.annotation.RestControllerAdvice;
14+
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
15+
16+
import java.sql.SQLIntegrityConstraintViolationException;
17+
18+
@Slf4j
19+
@RestControllerAdvice
20+
public class ExceptionControllerAdvice {
21+
22+
@ExceptionHandler(value = {ConstraintViolationException.class, MethodArgumentNotValidException.class, MethodArgumentTypeMismatchException.class})
23+
public ResponseEntity<ErrorResponse> handleValidationExceptions(Exception e) {
24+
log.error("Validation Exception: {}", e.getMessage(), e);
25+
return ErrorResponse.toResponseEntity(ErrorCode.INVALID_INPUT_VALUE);
26+
}
27+
28+
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
29+
public ResponseEntity<ErrorResponse> handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
30+
log.error("HTTP Method Not Supported: {}", e.getMessage(), e);
31+
return ErrorResponse.toResponseEntity(ErrorCode.METHOD_NOT_ALLOWED);
32+
}
33+
34+
@ExceptionHandler(value = CustomException.class)
35+
protected ResponseEntity<ErrorResponse> handleCustomException(CustomException e) {
36+
log.error("Custom Exception: {}", e.getErrorCode(), e);
37+
return ErrorResponse.toResponseEntity(e.getErrorCode());
38+
}
39+
40+
@ExceptionHandler(value = NullPointerException.class)
41+
public ResponseEntity<ErrorResponse> handleNullPointerException(NullPointerException e) {
42+
log.error("Null Pointer Exception: {}", e.getMessage(), e);
43+
return ErrorResponse.toResponseEntity(ErrorCode.MISSING_INPUT_VALUE);
44+
}
45+
46+
@ExceptionHandler(value = MissingServletRequestParameterException.class)
47+
public ResponseEntity<ErrorResponse> handleMissingServletRequestParameterException(MissingServletRequestParameterException e) {
48+
log.error("Missing Request Parameter: {}", e.getMessage(), e);
49+
return ErrorResponse.toResponseEntity(ErrorCode.MISSING_INPUT_VALUE);
50+
}
51+
52+
@ExceptionHandler(value = HttpMessageNotReadableException.class)
53+
public ResponseEntity<ErrorResponse> handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
54+
log.error("Message Not Readable: {}", e.getMessage(), e);
55+
return ErrorResponse.toResponseEntity(ErrorCode.INVALID_INPUT_VALUE);
56+
}
57+
58+
@ExceptionHandler(value = SQLIntegrityConstraintViolationException.class)
59+
public ResponseEntity<ErrorResponse> handleSQLIntegrityConstraintViolationException(SQLIntegrityConstraintViolationException e) {
60+
log.error("SQL Integrity Constraint Violation: {}", e.getMessage(), e);
61+
return ErrorResponse.toResponseEntity(ErrorCode.DATABASE_ERROR);
62+
}
63+
64+
@ExceptionHandler(value = Exception.class)
65+
public ResponseEntity<ErrorResponse> handleGeneralException(Exception e) {
66+
log.error("Unhandled Exception: {}", e.getMessage(), e);
67+
return ErrorResponse.toResponseEntity(ErrorCode.INTERNAL_SERVER_ERROR);
68+
}
69+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package cmf.commitField.global.globalDto;
2+
3+
import cmf.commitField.global.error.ErrorCode;
4+
import lombok.Getter;
5+
6+
import java.time.LocalDateTime;
7+
8+
@Getter
9+
public class GlobalResponse<T> {
10+
11+
private final LocalDateTime timestamp; // ์‘๋‹ต ์ƒ์„ฑ ์‹œ๊ฐ„
12+
private final int statusCode; // HTTP ์ƒํƒœ ์ฝ”๋“œ
13+
private final String message; // ์‘๋‹ต ๋ฉ”์‹œ์ง€
14+
private final T data; // ์‘๋‹ต ๋ฐ์ดํ„ฐ (์„ฑ๊ณต ์‹œ ๋ฐ์ดํ„ฐ, ์‹คํŒจ ์‹œ ์ถ”๊ฐ€ ์ •๋ณด)
15+
16+
// ์„ฑ๊ณต ์‘๋‹ต ์ƒ์„ฑ์ž
17+
private GlobalResponse(GlobalResponseCode responseCode, T data) {
18+
this.timestamp = LocalDateTime.now();
19+
this.statusCode = responseCode.getCode();
20+
this.message = responseCode.getMessage();
21+
this.data = data;
22+
}
23+
24+
// ์—๋Ÿฌ ์‘๋‹ต ์ƒ์„ฑ์ž
25+
private GlobalResponse(ErrorCode errorCode, T data) {
26+
this.timestamp = LocalDateTime.now();
27+
this.statusCode = errorCode.getHttpStatus().value();
28+
this.message = errorCode.getMessage();
29+
this.data = data;
30+
}
31+
32+
// ์„ฑ๊ณต ์‘๋‹ต (๋ฐ์ดํ„ฐ ํฌํ•จ)
33+
public static <T> GlobalResponse<T> success(T data) {
34+
return new GlobalResponse<>(GlobalResponseCode.OK, data);
35+
}
36+
37+
// ์„ฑ๊ณต ์‘๋‹ต (๋ฐ์ดํ„ฐ ์—†์Œ)
38+
public static <T> GlobalResponse<T> success() {
39+
return success(null);
40+
}
41+
42+
// ์—๋Ÿฌ ์‘๋‹ต (๋ฐ์ดํ„ฐ ํฌํ•จ)
43+
public static <T> GlobalResponse<T> error(ErrorCode errorCode, T data) {
44+
return new GlobalResponse<>(errorCode, data);
45+
}
46+
47+
// ์—๋Ÿฌ ์‘๋‹ต (๋ฐ์ดํ„ฐ ์—†์Œ)
48+
public static <T> GlobalResponse<T> error(ErrorCode errorCode) {
49+
return error(errorCode, null);
50+
}
51+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cmf.commitField.global.globalDto;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
6+
@Getter
7+
@RequiredArgsConstructor
8+
public enum GlobalResponseCode {
9+
10+
OK(200, "์š”์ฒญ์ด ์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค."),
11+
BAD_REQUEST(400, "์ž˜๋ชป๋œ ์š”์ฒญ์ž…๋‹ˆ๋‹ค."),
12+
NOT_FOUND(404, "์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."),
13+
INTERNAL_SERVER_ERROR(500, "์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.");
14+
15+
private final int code; // HTTP ์ƒํƒœ ์ฝ”๋“œ
16+
private final String message; // ์‘๋‹ต ๋ฉ”์‹œ์ง€
17+
}
Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,26 @@
11
package cmf.commitField.global.jpa;
22

3+
import jakarta.persistence.GeneratedValue;
4+
import jakarta.persistence.Id;
5+
import lombok.EqualsAndHashCode;
6+
import lombok.Getter;
7+
import org.springframework.data.annotation.CreatedDate;
8+
9+
import java.time.LocalDateTime;
10+
11+
import static jakarta.persistence.GenerationType.IDENTITY;
12+
313
public class BaseEntity {
4-
}
14+
@Id
15+
@GeneratedValue(strategy = IDENTITY)
16+
@EqualsAndHashCode.Include
17+
private Long id;
18+
19+
@CreatedDate
20+
@Getter
21+
private LocalDateTime createdAt;
22+
23+
@CreatedDate
24+
@Getter
25+
private LocalDateTime modifiedAt;
26+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
spring:
2+
datasource:
3+
url: jdbc:mysql://localhost:3306/cmf_db
4+
username: root
5+
password: root123414
6+
driver-class-name: com.mysql.cj.jdbc.Driver
7+
jpa:
8+
open-in-view: false
9+
hibernate:
10+
ddl-auto: create

0 commit comments

Comments
ย (0)