개발일지

2024.01.25 TIL

과일바구니♡ 2024. 1. 25. 21:00

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