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

[FEATURE] 버전 관리 기능 추가 #116

Merged
merged 4 commits into from
Nov 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
@@ -0,0 +1,47 @@
package tify.server.api.version.controller;


import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
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;
import tify.server.api.version.model.request.PostVersionRequest;
import tify.server.api.version.model.vo.VersionInfoVo;
import tify.server.api.version.service.CreateVersionUseCase;
import tify.server.api.version.service.RetrieveVersionUseCase;
import tify.server.api.version.service.UpdateVersionUseCase;

@SecurityRequirement(name = "access-token")
@RestController
@RequestMapping("/version")
@RequiredArgsConstructor
@Tag(name = "7. [버전]")
public class VersionController {

private final RetrieveVersionUseCase retrieveVersionUseCase;
private final CreateVersionUseCase createVersionUseCase;
private final UpdateVersionUseCase updateVersionUseCase;

@Operation(summary = "현재 버전을 조회합니다. (AOS, IOS 모두)")
@GetMapping
public VersionInfoVo getRecentVersion() {
return retrieveVersionUseCase.execute();
}

@Operation(summary = "초기 버전을 저장합니다. (추후 버전 업데이트 시 업데이트 api 이용)")
@PostMapping("/new")
public void createVersion(@RequestBody PostVersionRequest postVersionRequest) {
createVersionUseCase.execute(postVersionRequest);
}

@Operation(summary = "버전을 업데이트합니다.")
@PostMapping("/update")
public void updateVersion(@RequestBody PostVersionRequest postVersionRequest) {
updateVersionUseCase.execute(postVersionRequest);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package tify.server.api.version.model.request;


import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class PostVersionRequest {

@Schema(description = "새로운 AOS 버전. 만약 AOS 버전을 변경하지 않는다면 적지 않아도 됩니다.")
private String aosVersion;

@Schema(description = "새로운 IOS 버전. 만약 IOS 버전을 변경하지 않는다면 적지 않아도 됩니다.")
private String iosVersion;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package tify.server.api.version.model.vo;


import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class VersionInfoVo {

@Schema(description = "IOS 버전입니다.")
private final String iosVersion;

@Schema(description = "AOS 버전입니다.")
private final String aosVersion;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package tify.server.api.version.service;


import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
import tify.server.api.version.model.request.PostVersionRequest;
import tify.server.core.annotation.UseCase;
import tify.server.domain.domains.version.adaptor.VersionAdaptor;
import tify.server.domain.domains.version.domain.Version;

@UseCase
@RequiredArgsConstructor
public class CreateVersionUseCase {

private final VersionAdaptor versionAdaptor;

@Transactional
public void execute(PostVersionRequest postVersionRequest) {
Version version = new Version(null, null);
Optional.ofNullable(postVersionRequest.getAosVersion())
.ifPresent(version::updateAosVersion);
Optional.ofNullable(postVersionRequest.getIosVersion())
.ifPresent(version::updateIosVersion);
versionAdaptor.save(version);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package tify.server.api.version.service;


import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
import tify.server.api.version.model.vo.VersionInfoVo;
import tify.server.core.annotation.UseCase;
import tify.server.domain.domains.version.adaptor.VersionAdaptor;
import tify.server.domain.domains.version.domain.Version;

@UseCase
@RequiredArgsConstructor
public class RetrieveVersionUseCase {

private final VersionAdaptor versionAdaptor;

@Transactional(readOnly = true)
public VersionInfoVo execute() {
Version version = versionAdaptor.queryRecentVersion();
return VersionInfoVo.builder()
.iosVersion(version.getIosVersion())
.aosVersion(version.getAosVersion())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package tify.server.api.version.service;


import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
import tify.server.api.version.model.request.PostVersionRequest;
import tify.server.core.annotation.UseCase;
import tify.server.domain.domains.version.adaptor.VersionAdaptor;
import tify.server.domain.domains.version.domain.Version;

@UseCase
@RequiredArgsConstructor
public class UpdateVersionUseCase {

private final VersionAdaptor versionAdaptor;

@Transactional
public void execute(PostVersionRequest postVersionRequest) {
Version recentVersion = versionAdaptor.queryRecentVersion();
Optional.ofNullable(postVersionRequest.getAosVersion())
.ifPresent(recentVersion::updateAosVersion);
Optional.ofNullable(postVersionRequest.getIosVersion())
.ifPresent(recentVersion::updateIosVersion);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package tify.server.domain.domains.version.adaptor;


import lombok.RequiredArgsConstructor;
import tify.server.core.annotation.Adaptor;
import tify.server.domain.domains.version.domain.Version;
import tify.server.domain.domains.version.exception.VersionNotFoundException;
import tify.server.domain.domains.version.repository.VersionRepository;

@Adaptor
@RequiredArgsConstructor
public class VersionAdaptor {

private final VersionRepository versionRepository;

public Version queryRecentVersion() {
return versionRepository.findById(1L).orElseThrow(() -> VersionNotFoundException.EXCEPTION);
}

public void save(Version version) {
versionRepository.save(version);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package tify.server.domain.domains.version.domain;


import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import tify.server.domain.domains.AbstractTimeStamp;

@Getter
@Entity
@Table(name = "tbl_version")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Version extends AbstractTimeStamp {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotNull private String iosVersion;

@NotNull private String aosVersion;

@Builder
public Version(String iosVersion, String aosVersion) {
this.iosVersion = iosVersion;
this.aosVersion = aosVersion;
}

public void updateAosVersion(String aosVersion) {
this.aosVersion = aosVersion;
}

public void updateIosVersion(String iosVersion) {
this.iosVersion = iosVersion;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package tify.server.domain.domains.version.exception;


import lombok.AllArgsConstructor;
import lombok.Getter;
import tify.server.core.consts.StaticVal;
import tify.server.core.dto.ErrorDetail;
import tify.server.core.exception.BaseErrorCode;

@Getter
@AllArgsConstructor
public enum VersionException implements BaseErrorCode {
VERSION_NOT_FOUND_ERROR(StaticVal.NOT_FOUND, "Version_404_1", "버전 정보를 찾을 수 없습니다."),
;

private final Integer statusCode;
private final String errorCode;
private final String reason;

@Override
public ErrorDetail getErrorDetail() {
return ErrorDetail.of(statusCode, errorCode, reason);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package tify.server.domain.domains.version.exception;


import tify.server.core.exception.BaseException;

public class VersionNotFoundException extends BaseException {

public static final BaseException EXCEPTION = new VersionNotFoundException();

private VersionNotFoundException() {
super(VersionException.VERSION_NOT_FOUND_ERROR);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package tify.server.domain.domains.version.repository;


import org.springframework.data.jpa.repository.JpaRepository;
import tify.server.domain.domains.version.domain.Version;

public interface VersionRepository extends JpaRepository<Version, Long> {}
Loading