Skip to content

Commit

Permalink
Merge pull request #43 from tukcomCD2024/feat/#42-backend-swagger
Browse files Browse the repository at this point in the history
Feat/#42 backend swagger
  • Loading branch information
yeonjy authored Mar 20, 2024
2 parents 4d83604 + 853bc0d commit 191acaf
Show file tree
Hide file tree
Showing 56 changed files with 1,006 additions and 1,352 deletions.
5 changes: 3 additions & 2 deletions backend/core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,20 @@ repositories {
}

dependencies {
//jwt
implementation 'com.auth0:java-jwt:4.2.1'

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'

compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'com.mysql:mysql-connector-j'

implementation 'org.springframework.boot:spring-boot-starter-amqp'
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
implementation 'org.jsoup:jsoup:1.15.3'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'

annotationProcessor 'org.projectlombok:lombok'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.rollthedice.backend.global.config;

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

import java.util.List;

@Configuration
public class SwaggerConfig {
private final String JWT = "JWT";
private final String BEARER = "Bearer";

@Bean
public OpenAPI openAPI() {
SecurityRequirement securityRequirement = new SecurityRequirement().addList(JWT);
return new OpenAPI()
.servers(getServers())
.info(getInfo())
.addSecurityItem(securityRequirement)
.components(getComponents());
}

private List<Server> getServers() {
return List.of(new Server()
.url("/api")
.description("백엔드 api 서버")
);
}

private Info getInfo() {
return new Info()
.title("Roll The Dice API")
.description("요약된 뉴스를 AR로 재미있게 즐기는 서비스")
.version("demo");
}

private Components getComponents() {
return new Components().addSecuritySchemes(JWT, new SecurityScheme()
.name(JWT)
.type(SecurityScheme.Type.HTTP)
.scheme(BEARER)
.bearerFormat(JWT)
);
}
}
301 changes: 159 additions & 142 deletions iOS/RollTheDice/RollTheDice.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

18 changes: 18 additions & 0 deletions iOS/RollTheDice/RollTheDice/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIAppFonts</key>
<array>
<string>Pretendard-Black.otf</string>
<string>Pretendard-Bold.otf</string>
<string>Pretendard-ExtraBold.otf</string>
<string>Pretendard-ExtraLight.otf</string>
<string>Pretendard-Light.otf</string>
<string>Pretendard-Medium.otf</string>
<string>Pretendard-Regular.otf</string>
<string>Pretendard-SemiBold.otf</string>
<string>Pretendard-Thin.otf</string>
</array>
</dict>
</plist>
34 changes: 34 additions & 0 deletions iOS/RollTheDice/RollTheDice/Resources/Font/Font.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
//
// Font.swift
// RollTheDice
//
// Created by Subeen on 3/14/24.
//

import SwiftUI

extension Font {

// Bold
static let pretendardBold40: Font = .custom("Pretendard-Bold", size: 40)
static let pretendardBold32: Font = .custom("Pretendard-Bold", size: 32)
static let pretendardBold24: Font = .custom("Pretendard-Bold", size: 24)
static let pretendardBold14: Font = .custom("Pretendard-Bold", size: 14)
static let pretendardBold12: Font = .custom("Pretendard-Bold", size: 12)

// Regular
static let pretendardRegular20: Font = .custom("Pretendard-Regular", size: 20)
static let pretendardRegular14: Font = .custom("Pretendard-Regular", size: 14)

}


/// 폰트가 추가되었는지 확인
func checkFontFile() {
for fontFamily in UIFont.familyNames {
for fontName in UIFont.fontNames(forFamilyName: fontFamily) {
print(fontName)
}
}
}

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "appleLoginBtn.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "kakaoLoginBtn.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
37 changes: 36 additions & 1 deletion iOS/RollTheDice/RollTheDice/RollTheDiceApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,44 @@ import SwiftUI

@main
struct RollTheDiceApp: App {

@StateObject var appState = AppState()
@StateObject private var pathModel = PathModel()

@StateObject var newsListViewModel = NewsListViewModel()

var body: some Scene {
WindowGroup {
MainTabView()

if appState.hasLogin {
NavigationStack(path: $pathModel.paths) {
MainTabView()
.environmentObject(newsListViewModel)
.navigationDestination(for: PathType.self, destination: { pathType in

switch pathType {
case .chatView(isAiMode: true) :
GPTChatView()
.navigationBarBackButtonHidden()

case .chatView(isAiMode: false):
Text("user")
.navigationBarBackButtonHidden()
}
})
}
.environmentObject(pathModel)

} else {
SignUpView()
}
}

}
}

/// 로그인 상태 관리
class AppState: ObservableObject {

@AppStorage("hasLogin") var hasLogin = true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
//
// CustomNavigationBar.swift
// DittoCommunity
//
// Created by Subeen on 2023/11/25.
//

import SwiftUI

struct CustomNavigationBar: View {
let title: String

let isDisplayLeadingBtn: Bool
let isDisplayTrailingBtn: Bool

let leadingItems: [(Image, () -> Void)]
let trailingItems: [(Image, () -> Void)]

init(
title: String = "",
isDisplayLeadingBtn: Bool = true,
isDisplayTrailingBtn: Bool = true,
leadingItems: [(Image, () -> Void)] = [(Image("chevron.left"), {})],
trailingItems: [(Image, () -> Void)] = [(Image("chevron.left"), {})]
) {
self.title = title
self.isDisplayLeadingBtn = isDisplayLeadingBtn
self.isDisplayTrailingBtn = isDisplayTrailingBtn
self.leadingItems = leadingItems
self.trailingItems = trailingItems
}

var body: some View {
HStack(spacing: 0) {
if isDisplayLeadingBtn {
// ForEach(leadingItems, id:\.self) { item in
// Button(
// action: {
// item.1()
// },
// label: {
// leadingItems[index].0
// .foregroundStyle(.basicWhite)
// }
// )
// }
}

Spacer()

Text(title)
.foregroundStyle(.basicWhite)

Spacer()

if isDisplayTrailingBtn {
ForEach(trailingItems.indices) { index in
Button(
action: {
trailingItems[index].1()
},
label: {
trailingItems[index].0
.foregroundStyle(.basicWhite)
}
)
}
}
}
.padding(.horizontal, 20)
.frame(height: 44)
}
}

struct IdentifiableImage: Identifiable {
let id = UUID()
let image: Image
}

struct CustomNavigationBar_Previews: PreviewProvider {
static var previews: some View {
CustomNavigationBar()
.previewLayout(.sizeThatFits)
}
}
16 changes: 16 additions & 0 deletions iOS/RollTheDice/RollTheDice/Source/Model/Path/Path.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//
// Path.swift
// RollTheDice
//
// Created by Subeen on 3/10/24.
//

import Foundation

class PathModel: ObservableObject {
@Published var paths: [PathType]

init(paths: [PathType] = []) { // 빈 배열로 초기화. 앱 실행시 특정 화면을 보여주고 싶다면 해당 뷰로 초기화할 것.
self.paths = paths
}
}
12 changes: 12 additions & 0 deletions iOS/RollTheDice/RollTheDice/Source/Model/Path/PathType.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// PathType.swift
// RollTheDice
//
// Created by Subeen on 3/10/24.
//

import Foundation

enum PathType: Hashable {
case chatView(isAiMode: Bool)
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,16 @@ public class BookmarkListViewModel: ObservableObject {
init(
bookmarkList: [Bookmark] = [
.init(title: "2024년 ‘소셜 미디어 다이어트’를 위해 바꿔볼 것", date: "2023년12월3일", image: "exampleNews", content: "2024년으로 접어든지 한 달이 넘었다. 하지만 올 해가 어떻게 흘러갈지 예측하기는 쉽지 않다. 한 가지 확실한 것은 정치적으로 매우 중요한 해라는 점이다. 미국과 러시아, 우크라이나, 방글라데시, 인도, 대만, 한국, 남아프리카공화국, 유럽의회, 영국에서 선거가 치러질 예정이다.", isBookmarked: false),
.init(title: "해외원정 가던 줄기세포치료 이젠 국내서도 받을 수 있다", date: "2023년2월13일", image: "exampleNews", content: "첨생법 개정안이 이달 1일 국회를 통과해 내년부터 시행된다. 이에 따라 식약처 허가 없이도 안전성·유효성이 확인되면 국내에서도 첨단재생의료 치료가 허용되고 모든 질환에 대한 임상연구가 가능해졌다. ", isBookmarked: false),
.init(title: "홀로 선 자립준비청년, 배곯지 않게…우체국, 매일 식비 지원", date: "2023년2월13일", content: "과학기술정보통신부 우정사업본부는 사회에 첫발을 내딛는 자립준비청년이 건강한 사회구성원으로 성장하도록 식비를 지원하는 '우체국 청년밥심 스타트 온(溫)' 사업을 확대 추진한다고 14일 밝혔다.", isBookmarked: false),
.init(title: "NHN, 작년 영업익 555억원...전년비 42% ↑", date: "2023년2월13일", image: "exampleNews", content: "2NHN은 연결기준 지난해 영업이익이 555억원으로 전년 대비 42.2% 증가했다고 14일 밝혔다.같은 기간 매출은 7.3% 증가한 2조2696억원으로 연간 최대치를 기록했다. 작년 4분기 매출은 5983억원으로 전년 동기 대비 6.7% 올랐다. 반면 영업손실은 78억원으로 적자전환했다. 커머스 부문의 장기 미회수채권 대손상각비 인식과 기술 부문의 기 인식 매출 차감 등 일회성 요인이 영향을 미쳤다.", isBookmarked: false),
.init(title: "앤스로픽 최신 AI 모델 '클로드3' 출시", date: "2023년3월13일", image: "https://imgnews.pstatic.net/image/014/2024/03/05/0005151141_001_20240305101610000.jpg?type=w647", content: "오픈AI의 대항마 앤스로픽이 생성형 인공지능(AI) 최신 모델 '클로드'(Claude)3를 선보이면서 생성형 AI 주도권을 잡기 위한 경쟁이 다시 뜨거워지고 있다. 앤스로픽은 지난 한 해 동안 구글과 세일즈포스, 아마존 등에서 총 73억 달러(약 9조7309억 원)를 투자받고 '클로드3'를 내놨는데 오픈AI의 챗GPT-4를 능가한다고 도발했다.", isBookmarked: true),
.init(title: "SK C&C, 외부 전문가 대거 영입… “신성장 동력 강화”", date: "2023년2월13일", image: "https://imgnews.pstatic.net/image/366/2024/03/05/0000975131_001_20240305093504301.jpg?type=w647", content: "SK C&C는 국내외 신성장 동력 강화를 위해 인공지능(AI)·클라우드·디지털 팩토리·ESG(환경·사회·지배구조) 등 4대 성장 사업과 디지털 컨설팅 중심으로 외부 전문가를 대거 영입해 전진 배치했다고 5일 밝혔다.", isBookmarked: false),
.init(title: "NHN, 작년 영업익 555억원...전년비 42% ↑", date: "2023년2월13일", image: "https://cdnimage.dailian.co.kr/news/202402/news_1707866329_1327972_m_1.png", content: "2NHN은 연결기준 지난해 영업이익이 555억원으로 전년 대비 42.2% 증가했다고 14일 밝혔다.같은 기간 매출은 7.3% 증가한 2조2696억원으로 연간 최대치를 기록했다. 작년 4분기 매출은 5983억원으로 전년 동기 대비 6.7% 올랐다. 반면 영업손실은 78억원으로 적자전환했다. 커머스 부문의 장기 미회수채권 대손상각비 인식과 기술 부문의 기 인식 매출 차감 등 일회성 요인이 영향을 미쳤다.", isBookmarked: false),

.init(title: "이종호 과기장관 5년 뒤 구축될 바이오파운드리에 산학연 역량 모아야", date: "2023년3월13일", image: "https://imgnews.pstatic.net/image/003/2024/03/05/NISI20231030_0001398722_web_20231030141808_20240305103108748.jpg?type=w647", content: "정부가 내년부터 합성생물학의 필수 인프라인 '국가 바이오파운드리' 구축에 본격 나서는 가운데 이종호 과학기술정보통신부 장관이 한국생명공학연구원에서 운영 중인 사전연구용 시설을 찾아 구체적인 인프라 구축 계획 등을 점검했다.이 장관은 5일 합성생물학 육성을 위해 바이오파운드리 연구현장을 방문하고, 산·학·연 전문가들을 만났다. 이번 방문은 지난해 미국, 영국과의 정상회담 시 논의됐던 첨단바이오 협력을 위한 후속조치의 일환으로 추진됐다.", isBookmarked: false),
.init(title: "SW산업 육성에 7308억 예산투자, SaaS 등 육성", date: "2023년3월13일", image: "https://imgnews.pstatic.net/image/008/2024/03/05/0005007507_001_20240305135301539.jpg?type=w647", content: "SW(소프트웨어) 산업의 SaaS(서비스형 소프트웨어) 전환 등 SW산업 육성을 위해 정부 예산 7308억원이 투자된다. 강도현 과학기술정보통신부 제2차관은 5일 오전 서울 을지로 더존비즈온 을지사옥에서 열린 'AI(인공지능) 일상화, SW도 이제 서비스형 SW'라는 주제로 열린 현장 간담회에서 정부도 대한민국 SW산업의 미래가 SaaS에 있다고 생각하고 올해 'SaaS 혁신펀드'를 새롭게 조성하는 등 SaaS 육성 및 기존 SW 기업의 SaaS 전환을 위해 다양한 지원을 추진 중이라며 이같이 밝혔다.", isBookmarked: false),
.init(title: "파수, 기업용 AI ‘엔터프라이즈 LLM’ 출시", date: "2023년3월13일", image: "https://imgnews.pstatic.net/image/018/2024/03/05/0005685566_001_20240305103201036.jpg?type=w647", content: "2NHN은 연결기준 지난해 영업이익이 555억원으로 전년 대비 42.2% 증가했다고 14일 밝혔다.같은 기간 매출은 7.3% 증가한 2조2696억원으로 연간 최대치를 기록했다. 작년 4분기 매출은 5983억원으로 전년 동기 대비 6.7% 올랐다. 반면 영업손실은 78억원으로 적자전환했다. 커머스 부문의 장기 미회수채권 대손상각비 인식과 기술 부문의 기 인식 매출 차감 등 일회성 요인이 영향을 미쳤다.", isBookmarked: false),
.init(title: "NHN, 작년 영업익 555억원...전년비 42% ↑", date: "2023년2월13일", image: "https://cdnimage.dailian.co.kr/news/202402/news_1707866329_1327972_m_1.png", content: "2NHN은 연결기준 지난해 영업이익이 555억원으로 전년 대비 42.2% 증가했다고 14일 밝혔다.같은 기간 매출은 7.3% 증가한 2조2696억원으로 연간 최대치를 기록했다. 작년 4분기 매출은 5983억원으로 전년 동기 대비 6.7% 올랐다. 반면 영업손실은 78억원으로 적자전환했다. 커머스 부문의 장기 미회수채권 대손상각비 인식과 기술 부문의 기 인식 매출 차감 등 일회성 요인이 영향을 미쳤다.", isBookmarked: false),
.init(title: "NHN, 작년 영업익 555억원...전년비 42% ↑", date: "2023년2월13일", image: "https://cdnimage.dailian.co.kr/news/202402/news_1707866329_1327972_m_1.png", content: "2NHN은 연결기준 지난해 영업이익이 555억원으로 전년 대비 42.2% 증가했다고 14일 밝혔다.같은 기간 매출은 7.3% 증가한 2조2696억원으로 연간 최대치를 기록했다. 작년 4분기 매출은 5983억원으로 전년 동기 대비 6.7% 올랐다. 반면 영업손실은 78억원으로 적자전환했다. 커머스 부문의 장기 미회수채권 대손상각비 인식과 기술 부문의 기 인식 매출 차감 등 일회성 요인이 영향을 미쳤다.", isBookmarked: false),
.init(title: "NHN, 작년 영업익 555억원...전년비 42% ↑", date: "2023년2월13일", image: "https://cdnimage.dailian.co.kr/news/202402/news_1707866329_1327972_m_1.png", content: "2NHN은 연결기준 지난해 영업이익이 555억원으로 전년 대비 42.2% 증가했다고 14일 밝혔다.같은 기간 매출은 7.3% 증가한 2조2696억원으로 연간 최대치를 기록했다. 작년 4분기 매출은 5983억원으로 전년 동기 대비 6.7% 올랐다. 반면 영업손실은 78억원으로 적자전환했다. 커머스 부문의 장기 미회수채권 대손상각비 인식과 기술 부문의 기 인식 매출 차감 등 일회성 요인이 영향을 미쳤다.", isBookmarked: false),
]
) {
self.bookmarkList = bookmarkList
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,16 @@ struct BookmarkView: View {
Spacer()

HStack {
Image(bookmark.image)
.frame(width: 100, height: 100)
.clipShape(
RoundedRectangle(cornerRadius: 15)
)
AsyncImage(url: URL(string: bookmark.image)) { image in
image
.resizable()
.scaledToFill()
.frame(width: 150, height: 150)
.clipShape(RoundedRectangle(cornerRadius: 15))

} placeholder: {
Image("photo.circle.fill")
}
Spacer()
}
.padding(.bottom, 30)
Expand Down Expand Up @@ -66,5 +71,5 @@ struct BookmarkView: View {
}

#Preview {
BookmarkView(bookmark: .init(title: "2024년 ‘소셜 미디어 다이어트’를 위해 바꿔볼 것", date: "2023년12월3일", image: "exampleNews", content: "2024년으로 접어든지 한 달이 넘었다. 하지만 올 해가 어떻게 흘러갈지 예측하기는 쉽지 않다. 한 가지 확실한 것은 정치적으로 매우 중요한 해라는 점이다. 미국과 러시아, 우크라이나, 방글라데시, 인도, 대만, 한국, 남아프리카공화국, 유럽의회, 영국에서 선거가 치러질 예정이다.", isBookmarked: false))
BookmarkView(bookmark: .init(title: "NHN, 작년 영업익 555억원...전년비 42% ↑", date: "2023년2월13일", image: "https://cdnimage.dailian.co.kr/news/202402/news_1707866329_1327972_m_1.png", content: "2NHN은 연결기준 지난해 영업이익이 555억원으로 전년 대비 42.2% 증가했다고 14일 밝혔다.같은 기간 매출은 7.3% 증가한 2조2696억원으로 연간 최대치를 기록했다. 작년 4분기 매출은 5983억원으로 전년 동기 대비 6.7% 올랐다. 반면 영업손실은 78억원으로 적자전환했다. 커머스 부문의 장기 미회수채권 대손상각비 인식과 기술 부문의 기 인식 매출 차감 등 일회성 요인이 영향을 미쳤다.", isBookmarked: false))
}
Loading

0 comments on commit 191acaf

Please sign in to comment.