Skip to content
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 @@ -17,7 +17,13 @@ data class FileSaveRequest(
@field:Schema(description = "파일 크기(bytes)", example = "102400")
@field:Positive
val fileSize: Long,
@field:Schema(description = "파일 Content-Type. `image/png, image/jpeg, application/pdf` 지원", example = "image/png")
@field:Schema(
description =
"파일 Content-Type. `image/png`, `image/jpeg`, `image/webp`, `application/pdf`, " +
"`application/vnd.openxmlformats-officedocument.presentationml.presentation`(pptx), " +
"`application/vnd.openxmlformats-officedocument.wordprocessingml.document`(docx) 지원",
example = "image/png",
)
@field:NotBlank
val contentType: String,
)
11 changes: 11 additions & 0 deletions src/main/kotlin/com/weeth/domain/file/domain/vo/FileType.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ enum class FileType(
PNG("image/png", setOf("png")),
WEBP("image/webp", setOf("webp")),
PDF("application/pdf", setOf("pdf")),

// V3 마이그레이션 대상에 세션 자료(pptx 27건)와 문서(docx 2건)가 포함되어 추가했다.
// svg는 XML이라 <script>를 품을 수 있어 인라인 서빙 시 XSS 벡터가 되므로 허용하지 않는다.
PPTX(
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
setOf("pptx"),
),
DOCX(
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
setOf("docx"),
),
;

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ data class ScheduleSaveRequest(
@field:NotBlank
val title: String,
@field:Schema(description = "일정 내용", example = "1박 2일 MT입니다.")
@field:Size(max = 500)
@field:Size(max = 1000)
val content: String? = null,
@field:Schema(description = "장소", example = "가평")
val location: String? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ data class ScheduleUpdateRequest(
@field:Schema(description = "일정 제목 (null=변경 안 함)", example = "MT")
val title: String?,
@field:Schema(description = "일정 내용 (null=변경 안 함)", example = "1박 2일 MT입니다.")
@field:Size(max = 500)
@field:Size(max = 1000)
val content: String?,
@field:Schema(description = "장소 (null=변경 안 함)", example = "가평")
val location: String?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import java.time.LocalDateTime
class Event(
club: Club,
var title: String,
@Column(length = 500)
@Column(columnDefinition = "TEXT")
var content: String? = null,
var location: String? = null,
var cardinal: Int,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ data class SessionCreateRequest(
@field:NotBlank
val title: String,
@field:Schema(description = "세션 내용", example = "OT 및 자기소개")
@field:Size(max = 500)
@field:Size(max = 1000)
val content: String?,
@field:Schema(description = "모임 장소", example = "공학관 401호")
val location: String?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ data class SessionUpdateRequest(
@field:Schema(description = "세션 제목 (null=변경 안 함)", example = "1차 정기모임")
val title: String?,
@field:Schema(description = "세션 내용 (null=변경 안 함)", example = "OT 및 자기소개")
@field:Size(max = 500)
@field:Size(max = 1000)
val content: String?,
@field:Schema(description = "모임 장소 (null=변경 안 함)", example = "공학관 401호")
val location: String?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class Session(
var title: String = title
private set

@Column(length = 500)
@Column(columnDefinition = "TEXT")
var content: String? = content
private set

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
ALTER TABLE club
ADD COLUMN warning_enabled BOOLEAN NOT NULL DEFAULT FALSE,
ADD COLUMN penalty_rule VARCHAR(500);

ALTER TABLE club_member
ADD COLUMN warning_count INT NOT NULL DEFAULT 0;

ALTER TABLE penalty
ADD COLUMN score INT NOT NULL DEFAULT 1;
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ALTER TABLE users
ADD COLUMN tel_public TINYINT(1) NOT NULL DEFAULT 1,
ADD COLUMN email_public TINYINT(1) NOT NULL DEFAULT 1,
ADD COLUMN student_info_public TINYINT(1) NOT NULL DEFAULT 1;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE penalty
MODIFY COLUMN penalty_type ENUM ('PENALTY', 'WARNING') NOT NULL DEFAULT 'PENALTY';
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- V3 마이그레이션 대상 데이터의 event.content 최대 길이가 632자로 varchar(500) 한도를 초과한다.
-- session.content(최대 431자)도 여유가 적어 함께 TEXT로 통일한다.
ALTER TABLE event
MODIFY COLUMN content TEXT;

ALTER TABLE session
MODIFY COLUMN content TEXT;
18 changes: 18 additions & 0 deletions src/test/kotlin/com/weeth/domain/file/domain/vo/FileTypeTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,23 @@ class FileTypeTest :
FileType.fromExtension("jpeg") shouldBe FileType.JPEG
FileType.fromExtension("webp") shouldBe FileType.WEBP
}

it("문서 타입을 조회한다") {
FileType.fromExtension("pptx") shouldBe FileType.PPTX
FileType.fromExtension("docx") shouldBe FileType.DOCX
FileType.fromContentType(
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
) shouldBe FileType.PPTX
FileType.fromContentType(
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
) shouldBe FileType.DOCX
}

it("허용 목록 밖의 타입은 null을 반환한다") {
// svg는 XML이라 스크립트 삽입이 가능해 의도적으로 제외한다
FileType.fromExtension("svg") shouldBe null
FileType.fromContentType("image/svg+xml") shouldBe null
FileType.fromExtension("mp4") shouldBe null
}
}
})
Loading