Skip to content

Commit

Permalink
[#36] feat: Email 등록 API 생성
Browse files Browse the repository at this point in the history
  • Loading branch information
dl-00-e8 committed Feb 4, 2024
1 parent 5b2bd5b commit 459b40d
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.gongjakso.server.domain.email.controller;

import com.gongjakso.server.domain.email.dto.request.EmailReq;
import com.gongjakso.server.domain.email.dto.response.EmailRes;
import com.gongjakso.server.domain.email.service.EmailService;
import com.gongjakso.server.global.common.ApplicationResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("api/v1/email")
@Tag(name = "출시 알림 수신", description = "출시 알림 수신 관련하여, 정보 저장 및 정보 조회에 사용되는 API")
public class EmailController {

private final EmailService emailService;

@Operation(description = "출시 알림 수신 이메일 등록 API")
@PostMapping("")
public ApplicationResponse<EmailRes> registerEmail(@Valid @RequestBody EmailReq emailReq) {
return ApplicationResponse.ok(emailService.registerEmail(emailReq));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.gongjakso.server.domain.email.repository;

import com.gongjakso.server.domain.email.entity.Email;
import org.springframework.data.jpa.repository.JpaRepository;

public interface EmailRepository extends JpaRepository<Email, Long> {

Boolean existsEmailByAddressAndDeletedAtIsNull(String address);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.gongjakso.server.domain.email.service;

import com.gongjakso.server.domain.email.dto.request.EmailReq;
import com.gongjakso.server.domain.email.dto.response.EmailRes;
import com.gongjakso.server.domain.email.entity.Email;
import com.gongjakso.server.domain.email.repository.EmailRepository;
import com.gongjakso.server.global.exception.ApplicationException;
import com.gongjakso.server.global.exception.ErrorCode;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class EmailService {

private final EmailRepository emailRepository;

@Transactional
public EmailRes registerEmail(EmailReq emailReq) {
// Validation
if(emailRepository.existsEmailByAddressAndDeletedAtIsNull(emailReq.address())) {
throw new ApplicationException(ErrorCode.ALREADY_EXIST_EXCEPTION);
}

// Business Logic
Email email = emailReq.from();
Email saveEmail = emailRepository.save(email);

// Response
return EmailRes.of(saveEmail);
}
}

0 comments on commit 459b40d

Please sign in to comment.