1.배운내용
1)알고리즘코드카타

class Solution {
fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
return Array<IntArray>(arr1.size){ i ->
IntArray(arr1[0].size){ j -> arr1[i][j] + arr2[i][j] }
}
}
}
출처: https://yline.tistory.com/56 [Y_LINE's_Repository:티스토리]
class Solution { fun solution(
arr1: Array<IntArray>, arr2: Array<IntArray>):
Array<IntArray> { var answer = Array(arr1.size) {
IntArray(arr1[0].size) } for(i in 0 .. answer.size-1){ for( j in 0 .. answer[0].size-1){
answer[i][j] = arr1[i][j] + arr2[i][j] } } return answer } }
이라고 합니다.
2) 백오피스 프로젝트 진행사항
팀원이름 앞으로 할일
|
곽준선
|
로그아웃 기능 개선, 전체 코드 확인(요구사항과 비교), 문서 업데이트
|
|
박지영
|
Notice 글자 제한(bean validation)
|
|
김철학
|
백오피스 개발 고민 + 테스트 코드
|
|
노하영
|
테스트 코드 공부하고 작성
|
오후 스크럼
이름 한일 할일
|
곽준선
|
Review 마무리, 문서 업데이트
|
화면 스케치, 전체 코드 확인, 로그아웃 기능 개선(refresh token) / 백오피스
|
|
박지영
|
validation 진행 중
|
Notice validation
|
|
김철학
|
백오피스 찾아봄
|
테스트 코드 작성
|
|
노하영
|
테스트 코드 학습
|
테스트 코드 작성
|
저녁스크럼
곽준선- 한일: 과거 세번이내 사용한 비밀번호 사용금지 코드 개발, 할일: 어드민 api 준비
박지영: 노티 검증 완료
김철학, 노하영: 테스트 코드 작성중.
-내일 오전 - 테스트 코드 작성 시도 / 오후 - admin API 개발
package com.b3backoffice.domain.notice.controller
import com.b3backoffice.domain.notice.dto.CreateNoticeRequest
import com.b3backoffice.domain.notice.dto.NoticeResponse
import com.b3backoffice.domain.notice.dto.UpdateNoticeRequest
import com.b3backoffice.domain.notice.service.NoticeService
import com.b3backoffice.infra.security.UserPrincipal
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.security.core.annotation.AuthenticationPrincipal
import org.springframework.web.bind.annotation.*
import jakarta.validation.Valid
@RequestMapping("/notices")
@RestController
class NoticeController(
private val noticeService: NoticeService
) {
@GetMapping
fun getNoticeList(): ResponseEntity<List<NoticeResponse>> {
return ResponseEntity
.status(HttpStatus.OK)
.body(noticeService.getAllNoticeList())
}
@GetMapping("/{noticeId}")
fun getNotice(@PathVariable noticeId: Long) : ResponseEntity<NoticeResponse> {
return ResponseEntity
.status(HttpStatus.OK)
.body(noticeService.getNoticeById(noticeId))
}
@PostMapping
fun createNotice(
@AuthenticationPrincipal userPrincipal: UserPrincipal,
@RequestBody @Valid request: CreateNoticeRequest,
) : ResponseEntity<NoticeResponse> {
return ResponseEntity
.status(HttpStatus.CREATED)
.body(noticeService.createNotice(userPrincipal.id, request))
}
@PutMapping("/notice/{noticeId}")
fun updateNotice(
@PathVariable noticeId: Long,
@AuthenticationPrincipal userPrincipal: UserPrincipal,
@RequestBody @Valid request: UpdateNoticeRequest,
) :ResponseEntity<NoticeResponse>{
return ResponseEntity
.status(HttpStatus.OK)
.body(noticeService.updateNotice(noticeId, userPrincipal.id, request))
}
@DeleteMapping("/notices/{noticeId}")
fun deleteNotice(
@PathVariable noticeId: Long,
@AuthenticationPrincipal userPrincipal: UserPrincipal,
): ResponseEntity<Unit> {
noticeService.deleteNotice(noticeId, userPrincipal.id)
return ResponseEntity
.status(HttpStatus.NO_CONTENT)
.build()
}
}
package com.b3backoffice.domain.notice.dto
import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.Size
data class CreateNoticeRequest(
@field:NotBlank(message = "제목을 작성해주세요.")
@field:Size(min = 1, max = 50, message = "글자수는 50자를 초과할 수 없습니다.")
val title: String,
@field:NotBlank(message = "내용을 작성해주세요.")
@field:Size(min = 1, max = 1000, message = "글자수는 1000자를 초과할 수 없습니다.")
val content: String,
)
package com.b3backoffice.domain.notice.dto
import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.Size
data class UpdateNoticeRequest(
@field:NotBlank(message = "제목을 작성해주세요.")
@field:Size(min = 1, max = 50, message = "글자수는 50자를 초과할 수 없습니다.")
val title: String,
@field:NotBlank(message = "내용을 작성해주세요.")
@field:Size(min = 1, max = 1000, message = "글자수는 1000자를 초과할 수 없습니다.")
val content: String,
)
서비스-에러메시지 수정함
package com.b3backoffice.domain.notice.service
import com.b3backoffice.domain.exception.ModelNotFoundException
import com.b3backoffice.domain.notice.dto.CreateNoticeRequest
import com.b3backoffice.domain.notice.dto.NoticeResponse
import com.b3backoffice.domain.notice.dto.UpdateNoticeRequest
import com.b3backoffice.domain.notice.model.Notice
import com.b3backoffice.domain.notice.repository.NoticeRepository
import com.b3backoffice.domain.user.repositiry.UserRepository
import jakarta.transaction.Transactional
import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service
@Service
class NoticeService(
private val noticeRepository: NoticeRepository,
private val userRepository: UserRepository,
)
{
fun getAllNoticeList(): List<NoticeResponse> {
return noticeRepository.findAll().map { it.toResponse() }
}
fun getNoticeById(noticeId: Long): NoticeResponse {
val notice = noticeRepository.findByIdOrNull(noticeId) ?: throw ModelNotFoundException("Notice", noticeId)
return notice.toResponse()
}
@Transactional
fun createNotice(userId: Long, request: CreateNoticeRequest): NoticeResponse {
val foundUser = userRepository.findByIdOrNull(userId) ?: throw IllegalArgumentException("요청한 사용자와 Notice 작성한 사용자가 다릅니다.")
return noticeRepository.save(
Notice(
title = request.title,
content = request.content,
user = foundUser
)
).toResponse()
}
@Transactional
fun updateNotice(noticeId: Long, userId: Long, request: UpdateNoticeRequest): NoticeResponse {
val notice = noticeRepository.findByIdOrNull(noticeId) ?: throw ModelNotFoundException("Notice", noticeId)
if (notice.user.id != userId) throw IllegalArgumentException("요청한 사용자와 Notice 작성한 사용자가 다릅니다.")
val (title, context) = request
notice.title = title
notice.content =context
return noticeRepository.save(notice).toResponse()
}
@Transactional
fun deleteNotice(noticeId: Long, userId: Long) {
val notice = noticeRepository.findByIdOrNull(noticeId) ?:throw ModelNotFoundException("Notice", noticeId)
if (notice.user.id != userId) throw IllegalArgumentException("요청한 사용자와 Notice 작성한 사용자가 다릅니다.")
noticeRepository.delete(notice)
}
}
'개발일지' 카테고리의 다른 글
| 2024.01.29 TIL,백오피스 KPT 회고록 (1) | 2024.01.29 |
|---|---|
| 2024.01.26 TIL (0) | 2024.01.26 |
| 2024.01.24 TIL (0) | 2024.01.24 |
| 2024.01.23 TIL (0) | 2024.01.23 |
| 2024.01.22 TIL (0) | 2024.01.22 |