Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
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
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.15'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,69 +1,16 @@
package com.sprint.mission.discodeit;

import com.sprint.mission.discodeit.dto.request.AttachmentCreateRequestDTO;
import com.sprint.mission.discodeit.dto.request.MessageCreateRequestDTO;
import com.sprint.mission.discodeit.dto.request.PublicCreateRequestDTO;
import com.sprint.mission.discodeit.dto.request.UserCreateRequestDTO;
import com.sprint.mission.discodeit.dto.response.ChannelSummaryResponseDTO;
import com.sprint.mission.discodeit.dto.response.MessageResponseDTO;
import com.sprint.mission.discodeit.dto.response.UserSummaryResponseDTO;
import com.sprint.mission.discodeit.service.ChannelService;
import com.sprint.mission.discodeit.service.MessageService;
import com.sprint.mission.discodeit.service.UserService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@SpringBootApplication
public class DiscodeitApplication {
static UserSummaryResponseDTO setupUser(UserService userService) {
UserCreateRequestDTO userCreateRequestDTO =
new UserCreateRequestDTO("woody", "woody@codeit.com", "woody1234", null);
return userService.create(userCreateRequestDTO);
}

static ChannelSummaryResponseDTO setupPrivateChannel(ChannelService channelService) {
PublicCreateRequestDTO publicCreateRequestDTO = new PublicCreateRequestDTO(
"공지",
"공지 채널입니다."
);
return channelService.create(publicCreateRequestDTO);
}

static void messageCreateTest(MessageService messageService, UUID channelId, UUID authorId) {
List<AttachmentCreateRequestDTO> attachments = new ArrayList<>();
MessageCreateRequestDTO messageCreateRequestDTO = new MessageCreateRequestDTO(
"안녕하세요.",
channelId,
authorId,
attachments
);
MessageResponseDTO messageResponseDTO =
messageService.create(messageCreateRequestDTO);
System.out.println("메시지 생성: " + messageResponseDTO.messageId());
}

public static void main(String[] args) {
ApplicationContext context =
SpringApplication.run(DiscodeitApplication.class, args);

//javaApplication의 main메소드에서 Service를 초기화하는 코드를 SpringContext를 활용해 대체
// UserService userService = context.getBean(UserService.class);
// ChannelService channelService = context.getBean(ChannelService.class);
// MessageService messageService = context.getBean(MessageService.class);

// javaApplication의 main메소드의 셋업, 테스트 부분의 코드 복사
// 셋업
// UserSummaryResponseDTO userSummaryResponseDTO = setupUser(userService);
// ChannelSummaryResponseDTO channelSummaryResponseDTO = setupPrivateChannel(channelService);
// 테스트
// UUID userId = userSummaryResponseDTO.userId();
// UUID channelId = channelSummaryResponseDTO.channelId();
// messageCreateTest(messageService, channelId, userId);
}

}
46 changes: 0 additions & 46 deletions src/main/java/com/sprint/mission/discodeit/JavaApplication.java
Original file line number Diff line number Diff line change
@@ -1,53 +1,7 @@
package com.sprint.mission.discodeit;

import com.sprint.mission.discodeit.entity.Channel;
import com.sprint.mission.discodeit.entity.ChannelType;
import com.sprint.mission.discodeit.entity.Message;
import com.sprint.mission.discodeit.entity.User;
import com.sprint.mission.discodeit.repository.ChannelRepository;
import com.sprint.mission.discodeit.repository.MessageRepository;
import com.sprint.mission.discodeit.repository.UserRepository;
import com.sprint.mission.discodeit.repository.file.FileChannelRepository;
import com.sprint.mission.discodeit.repository.file.FileMessageRepository;
import com.sprint.mission.discodeit.repository.file.FileUserRepository;
import com.sprint.mission.discodeit.service.ChannelService;
import com.sprint.mission.discodeit.service.MessageService;
import com.sprint.mission.discodeit.service.UserService;
import com.sprint.mission.discodeit.service.basic.BasicChannelService;
import com.sprint.mission.discodeit.service.basic.BasicMessageService;
import com.sprint.mission.discodeit.service.basic.BasicUserService;

public class JavaApplication {
// static User setupUser(UserService userService) {
// User user = userService.create("woody", "woody@codeit.com", "woody1234");
// return user;
// }
//
// static Channel setupChannel(ChannelService channelService) {
// Channel channel = channelService.create(ChannelType.PUBLIC, "공지", "공지 채널입니다.");
// return channel;
// }
//
// static void messageCreateTest(MessageService messageService, Channel channel, User author) {
// Message message = messageService.create("안녕하세요.", channel.getId(), author.getId());
// System.out.println("메시지 생성: " + message.getId());
// }

public static void main(String[] args) {
// // 레포지토리 초기화
// UserRepository userRepository = new FileUserRepository();
// ChannelRepository channelRepository = new FileChannelRepository();
// MessageRepository messageRepository = new FileMessageRepository();
//
// // 서비스 초기화
// UserService userService = new BasicUserService(userRepository);
// ChannelService channelService = new BasicChannelService(channelRepository);
// MessageService messageService = new BasicMessageService(messageRepository, channelRepository, userRepository);
//
// // 셋업
// User user = setupUser(userService);
// Channel channel = setupChannel(channelService);
// // 테스트
// messageCreateTest(messageService, channel, user);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.sprint.mission.discodeit.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class SwaggerConfig {

@Bean
public OpenAPI openAPI() {
Server localServer = new Server();
localServer.setUrl("http://localhost:8080");
localServer.setDescription("로컬 서버");

return new OpenAPI()
.info(new Info()
.title("Discodeit API 문서")
.description("Discodeit 프로젝트의 Swagger API 문서입니다.")
)
.addServersItem(localServer);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,50 @@
import com.sprint.mission.discodeit.dto.request.AuthLoginRequestDTO;
import com.sprint.mission.discodeit.dto.response.AuthResponseDTO;
import com.sprint.mission.discodeit.service.AuthService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.ExampleObject;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;

@Controller
@RestController
@RequiredArgsConstructor
@RequestMapping("/auth")
@RequestMapping("/api/auth")
@Tag(name = "Auth", description = "인증 API")
public class AuthController {
private final AuthService authService;

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
@PostMapping(value = "/login")
@Operation(summary = "로그인")
@ApiResponses(value = {
@ApiResponse(
responseCode = "200",
description = "로그인 성공",
content = @Content(
schema = @Schema(implementation = AuthResponseDTO.class)
)
),
@ApiResponse(
responseCode = "400",
description = "비밀번호가 일치하지 않음",
content = @Content(
examples = @ExampleObject(value = "비밀번호가 일치하지 않습니다")
)
),
@ApiResponse(
responseCode = "404",
description = "사용자를 찾을 수 없음",
content = @Content(
examples = @ExampleObject(value = "{username}의 유저는 찾지 못햇습니다")
)
)
})
public ResponseEntity<AuthResponseDTO> login(@RequestBody AuthLoginRequestDTO authLoginRequestDTO) {
AuthResponseDTO response = authService.login(authLoginRequestDTO);
return new ResponseEntity<>(response,HttpStatus.OK);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,71 @@

import com.sprint.mission.discodeit.dto.response.BinaryContentResponseDTO;
import com.sprint.mission.discodeit.service.BinaryContentService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.ExampleObject;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.UUID;

@Controller
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/binaryContent")
@RequestMapping("/api/binaryContents")
@Tag(name = "BinaryContent", description = "첨부 파일 API")
public class BinaryContentController {
private final BinaryContentService binaryContentService;

// 바이너리 파일 1개 조회
// @RequestMapping(value = "/{binarycontent-id}", method = RequestMethod.GET)
// @ResponseBody
// public ResponseEntity<BinaryContentResponseDTO> find(@PathVariable("binarycontent-id") UUID binaryContentId) {
// BinaryContentResponseDTO response = binaryContentService.find(binaryContentId);
// return new ResponseEntity<>(response, HttpStatus.OK);
// }

// 바이너리 파일 1개 조회(심화 요구 사항으로 변경)
@RequestMapping(value = "/find", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<BinaryContentResponseDTO> find(@RequestParam UUID binaryContentId) {
@GetMapping(value = "/{binaryContentId}")
@Operation(summary = "첨부 파일 조회")
@ApiResponses(value = {
@ApiResponse(
responseCode = "200",
description = "첨부 파일 조회 성공"
),
@ApiResponse(
responseCode = "404",
description = "첨부 파일을 찾을 수 없음",
content = @Content(
examples = @ExampleObject(value = "binaryContentId:{binaryContentId}를 가진 BinaryContent를 찾지 못했습니다")
)
)
})
public ResponseEntity<BinaryContentResponseDTO> find(
@Parameter(description = "조회할 첨부 파일 ID")
@PathVariable(value = "binaryContentId") UUID binaryContentId) {
BinaryContentResponseDTO response = binaryContentService.find(binaryContentId);
return new ResponseEntity<>(response, HttpStatus.OK);
}

// 바이너리 파일 여러 개 조회
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<List<BinaryContentResponseDTO>> findAllByIdIn(@RequestParam List<UUID> ids) {
List<BinaryContentResponseDTO> response = binaryContentService.findAllByIdIn(ids);
@GetMapping
@Operation(summary = "여러 첨부 파일 조회")
@ApiResponses(value = {
@ApiResponse(
responseCode = "200",
description = "첨부 파일 목록 조회 성공",
content = @Content(
array = @ArraySchema(
schema = @Schema(implementation = BinaryContentResponseDTO.class)
)
)
)
})
public ResponseEntity<List<BinaryContentResponseDTO>> findAllByIdIn(
@Parameter(description = "조회할 첨부 파일 ID 목록")
@RequestParam List<UUID> binaryContentIds) {
List<BinaryContentResponseDTO> response = binaryContentService.findAllByIdIn(binaryContentIds);
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
Loading