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

Develop -> main merge #190

Merged
merged 166 commits into from
Feb 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
166 commits
Select commit Hold shift + click to select a range
c9e039a
feat: 공지사항 생성, 공지사항 읽기 기능 추가 (#1)
skfotakf Jul 25, 2023
f849a63
chore: .idea 디렉토리 삭제
leeeryboy Jul 26, 2023
54ef587
chore: PR 템플릿 생성 (#2)
leeeryboy Jul 23, 2023
3a92906
feat: 로컬 db용 docker-compose 파일 추가 및 application.yaml 수정 (#4)
leeeryboy Jul 26, 2023
c2f7ef8
feat: 공지사항 수정, 삭제, 태그 기능 추가 (#3)
skfotakf Jul 28, 2023
227a385
feat: 구성원(교수) 생성 및 조회 API 구현 (#8)
leeeryboy Jul 31, 2023
92a8e8b
Docs: Swagger 추가 (#7)
huGgW Jul 31, 2023
00566f2
feat: 페이지네이션+검색 기능 추가 (#5)
skfotakf Aug 1, 2023
38de652
CICD: 배포 자동화 (#6)
huGgW Aug 1, 2023
1a75adf
feat: 구성원(교수) 수정 및 삭제 API (#9)
leeeryboy Aug 5, 2023
42249ba
feat: 구성원(행정직원) CRUD API (#10)
leeeryboy Aug 5, 2023
41bb4fd
feat: news 패키지 추가, 디벨롭 및 프론트에 맞게 엔티티 변경 (#12)
skfotakf Aug 8, 2023
3bbccb9
Merge branch 'main' into develop
leeeryboy Aug 8, 2023
7e3ea8e
fix: main에서 develop으로 pr (#16)
skfotakf Aug 9, 2023
6c5afe2
feat: seminar 패키지 추가 (#17)
skfotakf Aug 11, 2023
a550011
hotfix: 불필요한 dto 삭제 (#20)
skfotakf Aug 11, 2023
e2b3dec
fix: 이미지 uri 필드 추가 및 프론트 요구사항 반영 (#21)
leeeryboy Aug 14, 2023
0813562
feat: introduction 패키지, undergraduate 패키지 추가 (#22)
skfotakf Aug 15, 2023
cffac41
feat: admissions, research 패키지 추가 (#23)
skfotakf Aug 15, 2023
21b7dd7
Merge branch 'main' into develop
leeeryboy Aug 16, 2023
d2c341c
feat: oidc 로그인 (#27)
leeeryboy Aug 22, 2023
e05b5ad
feat: cors 설정 (#30)
leeeryboy Aug 22, 2023
bf61a06
Merge branch 'main' into develop
leeeryboy Aug 22, 2023
28fa788
fix: cors 추가 설정 (#32)
leeeryboy Aug 22, 2023
3e0f8e7
fix: CORS (#34)
leeeryboy Aug 23, 2023
3fae6a4
Merge branch 'main' into develop
leeeryboy Aug 23, 2023
a86542c
fix: about, academics, admissions 패키지 수정 (#25)
skfotakf Aug 24, 2023
cc256bf
feat: 일반 예약 및 정기 예약 API (#28)
leeeryboy Aug 24, 2023
13161c9
feat: 예약 조회 API (#39)
leeeryboy Aug 28, 2023
191f6f6
feat: about, member, news, seminar 메인 이미지 업로드 추가 (#38)
skfotakf Aug 29, 2023
455ded8
CICD: Change deploy port to 8080 (#40)
huGgW Aug 29, 2023
f8862c8
Merge branch 'main' into develop
huGgW Aug 29, 2023
f629d47
[Merge] (#41) (#42)
leeeryboy Aug 29, 2023
7b78310
feat: 장학제도 GET API 및 장학제도 페이지 응답 수정 (#44)
leeeryboy Aug 30, 2023
233a8e6
feat: custom metadata 설정 + 리다이렉트 엔드포인트 변경 (#45)
leeeryboy Aug 30, 2023
b86741f
feat: attachments 패키지 추가, news와 seminar request에 attachments 추가 (#43)
skfotakf Aug 30, 2023
fb5193f
feat: Top Conference List GET API (#47)
leeeryboy Aug 30, 2023
d479520
feat: 파일 서빙, 다운로드, 삭제 API (#48)
leeeryboy Aug 31, 2023
3b5d67a
feat: 공지사항 글쓴이 추가 (#49)
leeeryboy Aug 31, 2023
b8fca73
CI/CD: Https 적용 및 백엔드, 데이터베이스, 프록시 서버 배포 분리 (#50)
huGgW Aug 31, 2023
8b38588
fix: 프론트랑 협의하여 내용 변경 + news, seminar에 image, attachments update 추가 (#51)
skfotakf Sep 1, 2023
3565704
fix: research 패키지 프론트에 맞춰 협의 (#52)
skfotakf Sep 2, 2023
79ca736
[Refactor] 로그인, file uri 배포 환경에 맞게 수정 (#53)
huGgW Sep 2, 2023
46cee1c
fix: https 적용 관련 로그인 수정 (#56)
leeeryboy Sep 2, 2023
6d8a2fc
fix: notice 패키지 프론트에 맞게 협의 (#54)
skfotakf Sep 2, 2023
068a38b
feat: 신임교수초빙 (#59)
leeeryboy Sep 2, 2023
d546a9f
feat: 행정실 권한 체크 API (#60)
leeeryboy Sep 2, 2023
6f23b0e
[CICD] mainImage, attachment 경로 mount 설정 (#55)
huGgW Sep 3, 2023
d806f6c
[Feat] 예전 url과 비슷하게 이전 파일(사진)들 접근할 수 있도록 controller 생성 (#58)
huGgW Sep 3, 2023
c0d71c0
Merge branch 'main' into develop
huGgW Sep 3, 2023
d99ac71
Merge branch 'main' into develop
huGgW Sep 3, 2023
433a2bf
fix: 예약 dto에 지도교수, 반복 횟수 추가 (#61)
leeeryboy Sep 3, 2023
878b4f4
fix: 로그아웃 엔드포인트 변경 (#64)
leeeryboy Sep 3, 2023
f79edc9
[Fix] Notice, News Description TEXT type으로 변환 (#65)
huGgW Sep 4, 2023
f47b845
fix: newsSearchResponse, seminarSearchResponse 수정 (#66)
skfotakf Sep 4, 2023
0c83efb
fix: 파일 업로드 경로 통일 (#68)
leeeryboy Sep 4, 2023
b1985bb
fix: 갯수만 fetch하도록 최적화 (#70)
leeeryboy Sep 5, 2023
46320ff
Fix: Change type of additionalNote column on SeminarEntity to "TEXT" …
huGgW Sep 5, 2023
a3e803f
fix: academics 패키지 프론트에 맞춰 협의, admin 패키지 추가 (#69)
skfotakf Sep 5, 2023
a3514fb
Refactor: HTML로부터 텍스트 추출 함수 Utils로 이동 (#73)
huGgW Sep 6, 2023
9f406af
Feat: Add plain text description for notice (#74)
huGgW Sep 7, 2023
0ce4199
fix: admissions 패키지 프론트에 맞게 협의 (#76)
skfotakf Sep 8, 2023
6876bd6
fix: 이전 글 다음 글만 fetch 하도록 쿼리 최적화 (#75)
leeeryboy Sep 8, 2023
b56ff8a
CI/CD: Test 설정 (#77)
huGgW Sep 8, 2023
b882c3a
[Test] Notice create, update 시 plainTextDescription 동작 테스트 (#78)
huGgW Sep 8, 2023
8d5627c
[Feat] Seminar plain text field 추가 (#79)
huGgW Sep 8, 2023
d2c0366
Feat: News plain text field 추가 (#80)
huGgW Sep 8, 2023
a409fa8
Feat: 구성원 검색 위한 table 추가. (#81)
huGgW Sep 8, 2023
b60f716
fix: 새소식 세미나 쿼리 수정 (#82)
leeeryboy Sep 9, 2023
6f72689
fix: main 프론트에 맞게 협의, notice 태그 enum 추가 (#83)
skfotakf Sep 10, 2023
cb9e3a1
fix: isPublic -> isPrivate으로 정리 (#86)
skfotakf Sep 11, 2023
cfc872e
Merge branch 'main' into develop
leeeryboy Sep 11, 2023
471b128
feat: 로컬 로그인 테스트용 엔드포인트로 임시 변경 (#87)
leeeryboy Sep 11, 2023
c06e73b
Feat: 구성원 검색 API 추가 (#85)
huGgW Sep 11, 2023
ea640a4
Merge branch 'main' into develop
skfotakf Sep 11, 2023
cba2428
fix: 세미나 시간 타입 변경 (#91)
leeeryboy Sep 11, 2023
0a57a08
fix: 태그 항목 수정 (#92)
leeeryboy Sep 11, 2023
e37b804
fix: news tag 추가 (#90)
skfotakf Sep 11, 2023
aba7c1c
Merge branch 'main' into develop
huGgW Sep 11, 2023
944250b
feat: 졸업생 창업 진로, 졸업생 진로 response 추가 (#94)
skfotakf Sep 11, 2023
a5b69d4
fix: conference 주소 추가 (#95)
skfotakf Sep 11, 2023
149f76d
Merge branch 'main' into develop
skfotakf Sep 11, 2023
2bbcb2a
Feat: 연구 탭 통합검색 위한 Table 생성. (#97)
huGgW Sep 12, 2023
5225232
Feat: Lab Update API 추가 (#98)
huGgW Sep 12, 2023
ba8aace
Feat: Conference page 수정 API (#99)
huGgW Sep 12, 2023
fcdac36
Merge branch 'main' into develop
huGgW Sep 12, 2023
33372fe
fix: 파일 관련 수정 (#100)
leeeryboy Sep 12, 2023
d5d3b7c
fix: GET notice 권한 관련 로직 수정 (#101)
leeeryboy Sep 12, 2023
e4266bf
Refactor: Extract Full Text Query Template to CommonRepository (#102)
huGgW Sep 12, 2023
028f52d
Feat: Notice Seminar News Search to Full Text Query (#105)
huGgW Sep 12, 2023
8b9d383
feat: api 권한 설정 (#84)
leeeryboy Sep 12, 2023
236af47
fix: GET notice 권한 관련 로직 수정 (#109)
leeeryboy Sep 12, 2023
0920fe8
Merge branch 'main' into develop
leeeryboy Sep 12, 2023
ec80102
fix: 필요한 column만 select (#111)
leeeryboy Sep 12, 2023
5a83833
refactor: 공지 태그 응답 한국어로 변경 및 리팩토링 (#113)
leeeryboy Sep 13, 2023
e6550d2
fix: 공지 새소식 PATCH 로직 수정 (#114)
leeeryboy Sep 13, 2023
019db1b
fix: news 엔티티에 날짜 추가 (#115)
skfotakf Sep 14, 2023
32abd66
Feat: 검색 결과에서 keyword 위치, 적절한 substring 추출 위한 method 추가 (#116)
huGgW Sep 15, 2023
1552344
fix: total 더미 값 + pageNum null일때만 더미 값 주기 (#117)
leeeryboy Sep 15, 2023
1d23dda
fix: 예약 조회 권한 분리 및 응답 단순화 (#119)
leeeryboy Sep 15, 2023
11631f7
fix: 로그인 리다이렉트 엔드포인트 복구 (#121)
leeeryboy Sep 16, 2023
e00fb7a
feat: migrateAbout, migrateFutureCareers 추가 (#118)
skfotakf Sep 16, 2023
c13d027
feat: about 패키지 마이그레이션 추가 (#120)
skfotakf Sep 16, 2023
e744b21
fix: news, notice에 titleForMain 추가 (#125)
skfotakf Sep 17, 2023
d1425e8
feat: LocalDateTime 응답 마지막에 Z 추가 (#126)
leeeryboy Sep 17, 2023
76adbc6
refactor: deleteIds request 내부로 이동 (#127)
leeeryboy Sep 17, 2023
ca4a861
fix: 확장자 중복 버그 (#128)
leeeryboy Sep 17, 2023
eba0ab5
feat: 관리자는 새소식, 세미나 목록에서 비공개 글 확인 가능 (#129)
leeeryboy Sep 17, 2023
8ad3fc8
feat: research, member 패키지 migrate 추가 (#130)
skfotakf Sep 17, 2023
5be02b7
fix: noticeSearchDto에도 private 추가 (#131)
skfotakf Sep 18, 2023
e1b8dbc
Fix: 키워드 추출 함수 수정 (#122)
huGgW Sep 18, 2023
cc141a8
Feat: 통합검색 Notice API 구현 (#123)
huGgW Sep 18, 2023
bb5e7ac
Feat: News 통합 검색 API 구현 (#124)
huGgW Sep 18, 2023
467e25f
fix: 기존 objectMapper 설정 오버라이드 (#132)
leeeryboy Sep 18, 2023
4ead93d
feat: 파일 업로드 컨트롤러 구현 (#133)
leeeryboy Sep 18, 2023
30c538d
Feat: Change titleForMain column to TEXT type. (#134)
huGgW Sep 18, 2023
f8a2303
Merge branch 'main' into develop
leeeryboy Sep 18, 2023
2baab34
hotfix: mixed content issue (#136)
leeeryboy Sep 19, 2023
4ee0dc3
hotfix: loginPage to https (#139)
leeeryboy Sep 19, 2023
fa611df
Merge branch 'main' into develop
leeeryboy Sep 19, 2023
b521544
Merge branch 'main' into develop
huGgW Sep 19, 2023
f337943
fix: false로 수정 (#141)
skfotakf Sep 19, 2023
31e63eb
Merge branch 'main' into develop
huGgW Sep 19, 2023
9693473
fix: 이전 다음 글에서 비공개 글 제외 (#143)
leeeryboy Sep 19, 2023
70eef9c
Feat: 뉴스 날짜로 정렬 (#144)
huGgW Sep 19, 2023
2eafe30
Feat: Add description for slide. (#146)
huGgW Sep 19, 2023
bb4225a
style: ktlint (#145)
leeeryboy Sep 19, 2023
1ba0234
fix: 텍스트 인코딩 (#147)
leeeryboy Sep 19, 2023
5308b4b
Update ktlint-check.yml
leeeryboy Sep 19, 2023
5621bd7
fix: 중요 안내 (#149)
leeeryboy Sep 19, 2023
d698141
Merge branch 'main' into develop
leeeryboy Sep 19, 2023
bfcf358
style: ktlint
leeeryboy Sep 19, 2023
edbc67f
fix: 첨부파일 다운로드 (#154)
leeeryboy Sep 21, 2023
72ff727
Feat: 관리자 슬라이드에 total 추가, refactoring (#153)
huGgW Sep 21, 2023
3ad4b91
fix: 세미나 isYearLast 로직 수정 (#155)
leeeryboy Sep 22, 2023
5f6b6f3
fix: 이전글 다음 글 isDelete,isPrivate 조건 추가 (#151)
skfotakf Sep 22, 2023
c82ea86
fix: 메인 공지 정렬 (#158)
leeeryboy Sep 22, 2023
d04db99
fix: 예약 조회 권한 수정 (#157)
leeeryboy Sep 22, 2023
b1a3568
Feat: 통합검색 정렬 최신순 (#156)
huGgW Sep 22, 2023
0129351
Feat: Admin Important에 pagination 추가, total 추가. (#159)
huGgW Sep 22, 2023
b5db132
fix: titleForMain이 없어도 isImportant 등록 가능 (#160)
skfotakf Sep 22, 2023
d2ef059
Merge branch 'main' into develop
skfotakf Sep 22, 2023
902c45b
fix: em.close() 추가 (#162)
skfotakf Sep 23, 2023
3db1459
Merge branch 'main' into develop
skfotakf Sep 23, 2023
85d5222
feat: migrateConference 추가 (#164)
skfotakf Sep 27, 2023
193f410
CICD: Add blocking backend api except frontend. (#166)
huGgW Sep 27, 2023
7dc9cbb
fix: group 변경 반영 (#167)
leeeryboy Sep 28, 2023
d62d7f8
refactor: 실제 스누씨 서버 연동 (#168)
leeeryboy Sep 28, 2023
29f3397
feat: migrateAdmissions 추가 (#165)
skfotakf Sep 28, 2023
28ada75
Merge branch 'main' into develop
leeeryboy Sep 28, 2023
6e3ce83
Merge branch 'main' into develop
huGgW Sep 28, 2023
b5864da
Feat: Increase speakerurl size (#170)
huGgW Oct 14, 2023
20be046
fix: 로컬에서도 idsnucse로 연결 (#174)
leeeryboy Jan 27, 2024
01be994
feat: Research 검색 (#175)
huGgW Feb 3, 2024
f62f9d2
feat: staff 검색 기능 추가 (#176)
skfotakf Feb 6, 2024
f9d2319
Feat: 학사 및 교과 검색 기능 추가 (#177)
huGgW Feb 6, 2024
e593ee1
Fix: Research 검색에서 html 태그 없이 검색되도록 설정 (#178)
huGgW Feb 6, 2024
48edba4
Feat/add language field (#180)
skfotakf Feb 9, 2024
dafdb2f
Refactor: Admission 언어 추가 및 리팩터링 진행 (#182)
huGgW Feb 11, 2024
d664dc4
feat: academics 패키지에 language field 추가 (#181)
skfotakf Feb 11, 2024
1870638
feat: staff에 language, migration 방법 추가 (#183)
skfotakf Feb 15, 2024
424570e
Feat: Admission 검색 (#184)
huGgW Feb 18, 2024
75091b0
Refactor: Remove Location Entity (#186)
huGgW Feb 18, 2024
ccefb4e
feat: member/research 패키지 이미지와 첨부파일 마이그레이션 코드 작성 (#185)
skfotakf Feb 22, 2024
cb93db7
feat: about에서 이미지랑 첨부파일 추가 (#187)
skfotakf Feb 22, 2024
997d408
feat: dev 로그인 (#188)
leeeryboy Feb 24, 2024
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 @@ -3,9 +3,11 @@ package com.wafflestudio.csereal
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.data.jpa.repository.config.EnableJpaAuditing
import org.springframework.scheduling.annotation.EnableAsync

@EnableJpaAuditing
@SpringBootApplication
@EnableAsync
class CserealApplication

fun main(args: Array<String>) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.wafflestudio.csereal.common.aop

import com.wafflestudio.csereal.common.CserealException
import com.wafflestudio.csereal.common.mockauth.CustomPrincipal
import com.wafflestudio.csereal.core.user.database.Role
import com.wafflestudio.csereal.core.user.database.UserEntity
import com.wafflestudio.csereal.core.user.database.UserRepository
Expand Down Expand Up @@ -38,6 +39,11 @@ class SecurityAspect(private val userRepository: UserRepository) {
val authentication = SecurityContextHolder.getContext().authentication
val principal = authentication.principal

// for dev Mock User
if (principal is CustomPrincipal) {
return principal.userEntity
}

if (principal !is OidcUser) {
throw CserealException.Csereal401("로그인이 필요합니다.")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Profile
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.core.Authentication
Expand All @@ -18,6 +19,7 @@ import org.springframework.web.cors.CorsConfiguration
import org.springframework.web.cors.CorsConfigurationSource
import org.springframework.web.cors.UrlBasedCorsConfigurationSource

@Profile("!test")
@Configuration
@EnableWebSecurity
@EnableConfigurationProperties(EndpointProperties::class)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.wafflestudio.csereal.common.mockauth

import com.wafflestudio.csereal.core.user.database.UserEntity
import java.security.Principal

data class CustomPrincipal(val userEntity: UserEntity) : Principal {
override fun getName(): String {
return userEntity.username
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.wafflestudio.csereal.common.mockauth

import com.wafflestudio.csereal.core.user.database.Role
import com.wafflestudio.csereal.core.user.database.UserEntity
import com.wafflestudio.csereal.core.user.database.UserRepository
import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletResponse
import org.springframework.http.ResponseEntity
import org.springframework.security.authentication.AuthenticationManager
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
import org.springframework.security.core.authority.SimpleGrantedAuthority
import org.springframework.security.core.context.SecurityContextHolder
import org.springframework.security.web.context.SecurityContextRepository
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

//TODO: 정식 릴리즈 후에는 dev 서버에서만 가능하게
@RestController
@RequestMapping("/api")
class DevAuthController(
private val authenticationManager: AuthenticationManager,
private val userRepository: UserRepository,
private val securityContextRepository: SecurityContextRepository
) {

@GetMapping("/mock-login")
fun mockLogin(request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
val mockUser = userRepository.findByUsername("devUser")
?: userRepository.save(UserEntity("devUser", "Mock", "mock@abc.com", "0000-00000", Role.ROLE_STAFF))
val customPrincipal = CustomPrincipal(mockUser)
val authenticationToken = UsernamePasswordAuthenticationToken(
customPrincipal,
null,
listOf(
SimpleGrantedAuthority("ROLE_STAFF")
)
)

val authentication = authenticationManager.authenticate(authenticationToken)
SecurityContextHolder.getContext().authentication = authentication

securityContextRepository.saveContext(SecurityContextHolder.getContext(), request, response)

request.getSession(true)

return ResponseEntity.ok().body("Mock user authenticated")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.wafflestudio.csereal.common.mockauth

import com.wafflestudio.csereal.common.CserealException
import com.wafflestudio.csereal.core.user.database.UserRepository
import org.springframework.security.authentication.AuthenticationProvider
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
import org.springframework.security.core.Authentication
import org.springframework.security.core.authority.SimpleGrantedAuthority
import org.springframework.stereotype.Component

@Component
class DevAuthenticationProvider(private val userRepository: UserRepository) : AuthenticationProvider {

override fun authenticate(authentication: Authentication): Authentication? {
val username = authentication.name
val userEntity =
userRepository.findByUsername(username) ?: throw CserealException.Csereal404("Mock User not found")

val customPrincipal = CustomPrincipal(userEntity)
return UsernamePasswordAuthenticationToken(customPrincipal, null, listOf(SimpleGrantedAuthority("ROLE_STAFF")))
}

override fun supports(authentication: Class<*>): Boolean {
return UsernamePasswordAuthenticationToken::class.java.isAssignableFrom(authentication)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.wafflestudio.csereal.common.mockauth

import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.security.authentication.AuthenticationManager
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.web.context.HttpSessionSecurityContextRepository
import org.springframework.security.web.context.SecurityContextRepository

@Configuration
class MockAuthConfig(
private val devAuthenticationProvider: DevAuthenticationProvider
) {
@Bean
fun authenticationManager(http: HttpSecurity): AuthenticationManager {
http.authenticationProvider(devAuthenticationProvider)
return http.getSharedObject(AuthenticationManagerBuilder::class.java).build()
}

@Bean
fun securityContextRepository(): SecurityContextRepository {
return HttpSessionSecurityContextRepository()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.wafflestudio.csereal.common.properties

import com.wafflestudio.csereal.common.CserealException

enum class LanguageType {
KO, EN;

companion object {
fun makeStringToLanguageType(language: String): LanguageType {
try {
val upperLanguageType = language.uppercase()
return LanguageType.valueOf(upperLanguageType)
} catch (e: IllegalArgumentException) {
throw CserealException.Csereal400("해당하는 enum을 찾을 수 없습니다")
}
}

// dto로 통신할 때 소문자로 return
fun makeLowercase(languageType: LanguageType): String = languageType.toString().lowercase()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.wafflestudio.csereal.common.utils

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import jakarta.persistence.AttributeConverter
import jakarta.persistence.Converter

@Converter
class StringListConverter : AttributeConverter<MutableList<String>, String> {
override fun convertToDatabaseColumn(p0: MutableList<String>?): String =
ObjectMapper().writeValueAsString(p0 ?: mutableListOf<String>())

override fun convertToEntityAttribute(p0: String?): MutableList<String> =
ObjectMapper().readValue(p0 ?: "[]")
}
13 changes: 13 additions & 0 deletions src/main/kotlin/com/wafflestudio/csereal/common/utils/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,16 @@ fun substringAroundKeyword(keyword: String, content: String, amount: Int): Pair<
(index - frontIndex) to content.substring(frontIndex, backIndex)
}
}

fun exchangePageNum(pageSize: Int, pageNum: Int, total: Long): Int {
// Validate
if (!(pageSize > 0 && pageNum > 0 && total >= 0)) {
throw RuntimeException()
}

return if ((pageNum - 1) * pageSize < total) {
pageNum
} else {
Math.ceil(total.toDouble() / pageSize).toInt()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,24 +36,31 @@ class AboutController(
// read 목록이 하나
@GetMapping("/{postType}")
fun readAbout(
@RequestParam(required = false, defaultValue = "ko") language: String,
@PathVariable postType: String
): ResponseEntity<AboutDto> {
return ResponseEntity.ok(aboutService.readAbout(postType))
return ResponseEntity.ok(aboutService.readAbout(language, postType))
}

@GetMapping("/student-clubs")
fun readAllClubs(): ResponseEntity<List<AboutDto>> {
return ResponseEntity.ok(aboutService.readAllClubs())
fun readAllClubs(
@RequestParam(required = false, defaultValue = "ko") language: String
): ResponseEntity<List<AboutDto>> {
return ResponseEntity.ok(aboutService.readAllClubs(language))
}

@GetMapping("/facilities")
fun readAllFacilities(): ResponseEntity<List<AboutDto>> {
return ResponseEntity.ok(aboutService.readAllFacilities())
fun readAllFacilities(
@RequestParam(required = false, defaultValue = "ko") language: String
): ResponseEntity<List<AboutDto>> {
return ResponseEntity.ok(aboutService.readAllFacilities(language))
}

@GetMapping("/directions")
fun readAllDirections(): ResponseEntity<List<AboutDto>> {
return ResponseEntity.ok(aboutService.readAllDirections())
fun readAllDirections(
@RequestParam(required = false, defaultValue = "ko") language: String
): ResponseEntity<List<AboutDto>> {
return ResponseEntity.ok(aboutService.readAllDirections(language))
}

@GetMapping("/future-careers")
Expand Down Expand Up @@ -95,4 +102,15 @@ class AboutController(
): ResponseEntity<List<DirectionDto>> {
return ResponseEntity.ok(aboutService.migrateDirections(requestList))
}

@PatchMapping("/migrateImage/{aboutId}")
fun migrateAboutImageAndAttachment(
@PathVariable aboutId: Long,
@RequestPart("mainImage") mainImage: MultipartFile?,
@RequestPart("attachments") attachments: List<MultipartFile>?
): ResponseEntity<AboutDto> {
return ResponseEntity.ok(
aboutService.migrateAboutImageAndAttachments(aboutId, mainImage, attachments)
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package com.wafflestudio.csereal.core.about.database
import com.wafflestudio.csereal.common.config.BaseTimeEntity
import com.wafflestudio.csereal.common.controller.AttachmentContentEntityType
import com.wafflestudio.csereal.common.controller.MainImageContentEntityType
import com.wafflestudio.csereal.common.properties.LanguageType
import com.wafflestudio.csereal.common.utils.StringListConverter
import com.wafflestudio.csereal.core.about.dto.AboutDto
import com.wafflestudio.csereal.core.resource.attachment.database.AttachmentEntity
import com.wafflestudio.csereal.core.resource.mainImage.database.MainImageEntity
Expand All @@ -12,16 +14,18 @@ import jakarta.persistence.*
class AboutEntity(
@Enumerated(EnumType.STRING)
var postType: AboutPostType,
@Enumerated(EnumType.STRING)
var language: LanguageType = LanguageType.KO,
var name: String?,
var engName: String?,

@Column(columnDefinition = "mediumText")
var description: String,

var year: Int?,

@OneToMany(mappedBy = "about", cascade = [CascadeType.ALL], orphanRemoval = true)
val locations: MutableList<LocationEntity> = mutableListOf(),
@Column(columnDefinition = "TEXT")
@Convert(converter = StringListConverter::class)
var locations: MutableList<String> = mutableListOf(),

@OneToMany(mappedBy = "")
var attachments: MutableList<AttachmentEntity> = mutableListOf(),
Expand All @@ -34,13 +38,14 @@ class AboutEntity(
override fun bringAttachments(): List<AttachmentEntity> = attachments

companion object {
fun of(postType: AboutPostType, aboutDto: AboutDto): AboutEntity {
fun of(postType: AboutPostType, languageType: LanguageType, aboutDto: AboutDto): AboutEntity {
return AboutEntity(
postType = postType,
language = languageType,
name = aboutDto.name,
engName = aboutDto.engName,
description = aboutDto.description,
year = aboutDto.year
year = aboutDto.year,
locations = aboutDto.locations?.toMutableList() ?: mutableListOf()
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
package com.wafflestudio.csereal.core.about.database

import com.wafflestudio.csereal.common.properties.LanguageType
import org.springframework.data.jpa.repository.JpaRepository

interface AboutRepository : JpaRepository<AboutEntity, Long> {
fun findAllByPostTypeOrderByName(postType: AboutPostType): List<AboutEntity>
fun findByPostType(postType: AboutPostType): AboutEntity
fun findAllByLanguageAndPostTypeOrderByName(
languageType: LanguageType,
postType: AboutPostType
): List<AboutEntity>
fun findByLanguageAndPostType(
languageType: LanguageType,
postType: AboutPostType
): AboutEntity
}

This file was deleted.

Loading
Loading