인생 디벨로퍼

[1단계] Company Update Form 본문

Project/Final Project - Sporting (매칭)

[1단계] Company Update Form

뫄뫙뫄 2023. 5. 1. 18:25
728x90
반응형

Controller

    @GetMapping("/company/updateform")
    public ResponseEntity<?> updateForm(@AuthenticationPrincipal MyUserDetails myUserDetails) {
        CompanyUpdateFormOutDTO companyResponseOutDTO = companyService
                .getUpdateForm(myUserDetails.getUser().getId());

        return ResponseEntity.ok().body(new ResponseDto<>().data(companyResponseOutDTO));
    }

Service

    public CompanyUpdateFormOutDTO getUpdateForm(Long id) {

        User user = userRepository.findById(id).orElseThrow(() -> {
            throw new Exception400("존재하지 않는 유저 입니다");
        });

        CompanyUpdateFormOutDTO companyUpdateFormOutDTO = userRepository.findByCompanyUserId(id);
        companyUpdateFormOutDTO.setCompanyInfo(companyInfoRepository.findCompanyInfoByUserId(id));
        return companyUpdateFormOutDTO;

    }

DTO

@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode
public class CompanyUpdateFormOutDTO {
    private Long id;
    private String nickname;
    private String email;
    private String password;
    private CompanyInfoResponseDTO companyInfo;

    @QueryProjection
    public CompanyUpdateFormOutDTO(Long id, String nickname, String email, String password) {
        this.id = id;
        this.nickname = nickname;
        this.email = email;
        this.password = password;
    }

    public CompanyUpdateFormOutDTO(CompanyInfoResponseDTO companyInfo) {
        this.companyInfo = companyInfo;
    }

}
@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode
public class CompanyInfoResponseDTO {
    private Long id;
    private String tel;
    private String businessAdress;
    private String businessNumber;

    @QueryProjection
    public CompanyInfoResponseDTO(Long id, String tel, String businessAdress, String businessNumber) {
        this.id = id;
        this.tel = tel;
        this.businessAdress = businessAdress;
        this.businessNumber = businessNumber;
    }
}

 


Repository

public interface CompanyInfoCustomRepository {
    CompanyInfoResponseDTO findCompanyInfoByUserId(@Param("id") Long id);
}
@Repository
@RequiredArgsConstructor
@Transactional
public class CompanyInfoRepositoryImpl implements CompanyInfoCustomRepository {

    private final JPAQueryFactory jpaQueryFactory;

    @Override
    public CompanyInfoResponseDTO findCompanyInfoByUserId(Long id) {
        QCompanyInfo qCompanyInfo = QCompanyInfo.companyInfo;

        JPAQuery<CompanyInfoResponseDTO> query = jpaQueryFactory
                .select(new QCompanyInfoResponseDTO(
                        qCompanyInfo.id, qCompanyInfo.tel, qCompanyInfo.businessAdress,
                        qCompanyInfo.businessNumber))
                .from(qCompanyInfo)
                .where(qCompanyInfo.user.id.eq(id));
        return query.fetchOne();
    }

}
public interface UserCustomRepository {
       CompanyUpdateFormOutDTO findByCompanyUserId(@Param("id") Long id);
}


결과

요청주소 (get)
http://localhost:8080/api/company/{id}

요청 바디
- jwt token

응답 바디
{
    "status": 200,
    "msg": "성공",
    "data": {
        "id": 4,
        "nickname": "user512",
        "email": "love@nate.com",
        "password": "$2a$10$AnO40455ZBKSalBx0YJ26eo4/a0J6UZPtYgRmdirjkn1GbgNeB/JW",
        "companyInfo": {
            "id": 2,
            "tel": "",
            "businessAdress": "",
            "businessNumber": "",
            "sourceFile": {
                "id": 4,
                "fileUrl": "https://3-sporting.s3.ap-northeast-2.amazonaws.com/CompanyProfile/company.jpg"
            }
        }
    }
}

 

728x90
반응형

'Project > Final Project - Sporting (매칭)' 카테고리의 다른 글

[2단계] Admin page Court view  (0) 2023.05.01
[1단계] Stadium Detail  (0) 2023.05.01
[3단계] sentry.io 적용  (0) 2023.05.01
[1단계] 기업 회원가입  (0) 2023.04.26
[0단계] JPA Repository Test  (0) 2023.04.26