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

merge develop to main #112

Merged
merged 94 commits into from
Sep 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 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
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
@@ -1,24 +1,17 @@
package com.wafflestudio.csereal.core.notice.database

import com.querydsl.core.BooleanBuilder
import com.querydsl.core.types.Projections
import com.querydsl.jpa.impl.JPAQueryFactory
import com.wafflestudio.csereal.common.repository.CommonRepository
import com.wafflestudio.csereal.common.repository.CommonRepositoryImpl
import com.wafflestudio.csereal.common.utils.FixedPageRequest
import com.wafflestudio.csereal.core.notice.database.QNoticeEntity.noticeEntity
import com.wafflestudio.csereal.core.notice.database.QNoticeTagEntity.noticeTagEntity
import com.wafflestudio.csereal.core.notice.dto.NoticeSearchDto
import com.wafflestudio.csereal.core.notice.dto.NoticeSearchResponse
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 org.springframework.data.domain.Pageable
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.security.core.context.SecurityContextHolder
import org.springframework.security.oauth2.core.oidc.user.OidcUser
import org.springframework.stereotype.Component
import org.springframework.web.context.request.RequestAttributes
import org.springframework.web.context.request.RequestContextHolder
import java.time.LocalDateTime

interface NoticeRepository : JpaRepository<NoticeEntity, Long>, CustomNoticeRepository {
Expand All @@ -39,9 +32,8 @@ interface CustomNoticeRepository {

@Component
class NoticeRepositoryImpl(
private val queryFactory: JPAQueryFactory,
private val userRepository: UserRepository,
private val commonRepository: CommonRepository,
private val queryFactory: JPAQueryFactory,
private val commonRepository: CommonRepository,
) : CustomNoticeRepository {
override fun searchNotice(
tag: List<String>?,
Expand All @@ -50,30 +42,15 @@ class NoticeRepositoryImpl(
usePageBtn: Boolean,
isStaff: Boolean
): NoticeSearchResponse {
var user = RequestContextHolder.getRequestAttributes()?.getAttribute(
"loggedInUser",
RequestAttributes.SCOPE_REQUEST
) as UserEntity?

if (user == null) {
val oidcUser = SecurityContextHolder.getContext().authentication.principal as OidcUser
val username = oidcUser.idToken.getClaim<String>("username")

if (userRepository.findByUsername(username) == null) {
user = null
} else {
user = userRepository.findByUsername(username)
}
}
val keywordBooleanBuilder = BooleanBuilder()
val tagsBooleanBuilder = BooleanBuilder()
val isPrivateBooleanBuilder = BooleanBuilder()

if (!keyword.isNullOrEmpty()) {
val booleanTemplate = commonRepository.searchFullDoubleTextTemplate(
keyword,
noticeEntity.title,
noticeEntity.plainTextDescription,
keyword,
noticeEntity.title,
noticeEntity.plainTextDescription,
)
keywordBooleanBuilder.and(booleanTemplate.gt(0.0))
}
Expand All @@ -93,7 +70,17 @@ class NoticeRepositoryImpl(
)
}

val jpaQuery = queryFactory.selectFrom(noticeEntity)
val jpaQuery = queryFactory.select(
Projections.constructor(
NoticeSearchDto::class.java,
noticeEntity.id,
noticeEntity.title,
noticeEntity.createdAt,
noticeEntity.isPinned,
noticeEntity.attachments.isNotEmpty
)
)
.from(noticeEntity)
.leftJoin(noticeTagEntity).on(noticeTagEntity.notice.eq(noticeEntity))
.where(noticeEntity.isDeleted.eq(false))
.where(keywordBooleanBuilder, tagsBooleanBuilder, isPrivateBooleanBuilder)
Expand All @@ -109,25 +96,14 @@ class NoticeRepositoryImpl(
total = (10 * pageable.pageSize).toLong() // 10개 페이지 고정
}

val noticeEntityList = jpaQuery
val noticeSearchDtoList = jpaQuery
.orderBy(noticeEntity.isPinned.desc())
.orderBy(noticeEntity.createdAt.desc())
.offset(pageRequest.offset)
.limit(pageRequest.pageSize.toLong())
.distinct()
.fetch()

val noticeSearchDtoList: List<NoticeSearchDto> = noticeEntityList.map {
val hasAttachment: Boolean = it.attachments.isNotEmpty()

NoticeSearchDto(
id = it.id,
title = it.title,
createdAt = it.createdAt,
isPinned = it.isPinned,
hasAttachment = hasAttachment
)
}
return NoticeSearchResponse(total, noticeSearchDtoList)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.wafflestudio.csereal.core.notice.dto

import com.querydsl.core.annotations.QueryProjection
import com.wafflestudio.csereal.core.notice.database.NoticeEntity
import java.time.LocalDateTime

data class NoticeSearchDto @QueryProjection constructor(
Expand All @@ -10,5 +11,11 @@ data class NoticeSearchDto @QueryProjection constructor(
val isPinned: Boolean,
val hasAttachment: Boolean,
) {

}
constructor(entity: NoticeEntity, hasAttachment: Boolean) : this(
entity.id,
entity.title,
entity.createdAt,
entity.isPinned,
hasAttachment
)
}