Skip to content

Commit

Permalink
Merge pull request #38 from TeamHY2/Feature/#2-SignUp
Browse files Browse the repository at this point in the history
[Feature] 회원가입 API 연동
  • Loading branch information
Seokki-Kwon authored Oct 24, 2024
2 parents 76f4b24 + 53697fb commit 088d99c
Show file tree
Hide file tree
Showing 32 changed files with 995 additions and 280 deletions.
82 changes: 75 additions & 7 deletions HongikYeolgong2.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
4763FFBA2CB913FF00990336 /* UserDataInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4763FFB92CB913FF00990336 /* UserDataInteractor.swift */; };
4763FFBC2CB9228B00990336 /* AppEnviroment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4763FFBB2CB9228B00990336 /* AppEnviroment.swift */; };
47860E092CB82BEF005701C0 /* TimePickerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47860E082CB82BEF005701C0 /* TimePickerViewModel.swift */; };
478933792CADBDA500E1D89E /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478933782CADBDA500E1D89E /* SignInView.swift */; };
478933792CADBDA500E1D89E /* SignUpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478933782CADBDA500E1D89E /* SignUpView.swift */; };
4789337B2CADC43D00E1D89E /* DropDownPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4789337A2CADC43D00E1D89E /* DropDownPicker.swift */; };
4795DC902CB43B2700EC3AB1 /* TimePickerDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4795DC8F2CB43B2700EC3AB1 /* TimePickerDialog.swift */; };
479821D42CA24CFF002357EB /* .swiftlint.yml in Resources */ = {isa = PBXBuildFile; fileRef = 479821D32CA24CFF002357EB /* .swiftlint.yml */; };
Expand Down Expand Up @@ -76,10 +76,18 @@
47B1D4C72C9CB1760071B62B /* HongikYeolgong2UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B1D4C62C9CB1760071B62B /* HongikYeolgong2UITests.swift */; };
47B1D4C92C9CB1760071B62B /* HongikYeolgong2UITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B1D4C82C9CB1760071B62B /* HongikYeolgong2UITestsLaunchTests.swift */; };
47BACCF72CA164BA00295DAC /* Font+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47BACCF62CA164BA00295DAC /* Font+.swift */; };
47BE30E32CC813BB0015D973 /* KeyChainManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47BE30E22CC813BB0015D973 /* KeyChainManager.swift */; };
47BE30E52CC81A9E0015D973 /* URLRequest+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47BE30E42CC81A9E0015D973 /* URLRequest+.swift */; };
47CA17252CC9336100CBB251 /* StudyPeriodView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CA17242CC9336100CBB251 /* StudyPeriodView.swift */; };
47CA17272CC9340800CBB251 /* StudyTimerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CA17262CC9340800CBB251 /* StudyTimerView.swift */; };
47D6662C2CB4499300813ECA /* TimePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47D6662B2CB4499300813ECA /* TimePicker.swift */; };
47DF041F2CBE7A29007E58A7 /* Encodable+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47DF041E2CBE7A29007E58A7 /* Encodable+.swift */; };
47F4F6972CC88FBB00543D24 /* SignUpRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F4F6962CC88FBB00543D24 /* SignUpRequestDTO.swift */; };
47F4F6992CC89A6900543D24 /* SignUpResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F4F6982CC89A6900543D24 /* SignUpResponseDTO.swift */; };
47F4F69B2CC8E24300543D24 /* ServicesContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F4F69A2CC8E24300543D24 /* ServicesContainer.swift */; };
47F634FE2CC3E8A40034EAA9 /* NicknameCheckDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F634FD2CC3E8A40034EAA9 /* NicknameCheckDTO.swift */; };
47F635022CC3E98D0034EAA9 /* UserEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F635012CC3E98D0034EAA9 /* UserEndpoint.swift */; };
47F635052CC3EC1A0034EAA9 /* Department.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F635042CC3EC1A0034EAA9 /* Department.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -139,7 +147,7 @@
4763FFB92CB913FF00990336 /* UserDataInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDataInteractor.swift; sourceTree = "<group>"; };
4763FFBB2CB9228B00990336 /* AppEnviroment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppEnviroment.swift; sourceTree = "<group>"; };
47860E082CB82BEF005701C0 /* TimePickerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimePickerViewModel.swift; sourceTree = "<group>"; };
478933782CADBDA500E1D89E /* SignInView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInView.swift; sourceTree = "<group>"; };
478933782CADBDA500E1D89E /* SignUpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpView.swift; sourceTree = "<group>"; };
4789337A2CADC43D00E1D89E /* DropDownPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropDownPicker.swift; sourceTree = "<group>"; };
4795DC8F2CB43B2700EC3AB1 /* TimePickerDialog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimePickerDialog.swift; sourceTree = "<group>"; };
479821D32CA24CFF002357EB /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = "<group>"; };
Expand Down Expand Up @@ -177,10 +185,18 @@
47B1D4C62C9CB1760071B62B /* HongikYeolgong2UITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HongikYeolgong2UITests.swift; sourceTree = "<group>"; };
47B1D4C82C9CB1760071B62B /* HongikYeolgong2UITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HongikYeolgong2UITestsLaunchTests.swift; sourceTree = "<group>"; };
47BACCF62CA164BA00295DAC /* Font+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Font+.swift"; sourceTree = "<group>"; };
47BE30E22CC813BB0015D973 /* KeyChainManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyChainManager.swift; sourceTree = "<group>"; };
47BE30E42CC81A9E0015D973 /* URLRequest+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLRequest+.swift"; sourceTree = "<group>"; };
47CA17242CC9336100CBB251 /* StudyPeriodView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudyPeriodView.swift; sourceTree = "<group>"; };
47CA17262CC9340800CBB251 /* StudyTimerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudyTimerView.swift; sourceTree = "<group>"; };
47D6662B2CB4499300813ECA /* TimePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimePicker.swift; sourceTree = "<group>"; };
47DF041E2CBE7A29007E58A7 /* Encodable+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Encodable+.swift"; sourceTree = "<group>"; };
47F4F6962CC88FBB00543D24 /* SignUpRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpRequestDTO.swift; sourceTree = "<group>"; };
47F4F6982CC89A6900543D24 /* SignUpResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpResponseDTO.swift; sourceTree = "<group>"; };
47F4F69A2CC8E24300543D24 /* ServicesContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServicesContainer.swift; sourceTree = "<group>"; };
47F634FD2CC3E8A40034EAA9 /* NicknameCheckDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NicknameCheckDTO.swift; sourceTree = "<group>"; };
47F635012CC3E98D0034EAA9 /* UserEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserEndpoint.swift; sourceTree = "<group>"; };
47F635042CC3EC1A0034EAA9 /* Department.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Department.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -221,6 +237,7 @@
isa = PBXGroup;
children = (
470723002CBC16680046469F /* AuthEndpoint.swift */,
47F635012CC3E98D0034EAA9 /* UserEndpoint.swift */,
);
path = Endpoints;
sourceTree = "<group>";
Expand Down Expand Up @@ -295,12 +312,12 @@
4763FFB62CB9133600990336 /* Util */ = {
isa = PBXGroup;
children = (
47F4F69E2CC8E45A00543D24 /* Services */,
47DF041D2CBE7A16007E58A7 /* Extensions */,
470722FB2CBC15790046469F /* API */,
4763FFB72CB9134D00990336 /* Store.swift */,
4752A27C2CB96EB00073B784 /* CancleBag.swift */,
470722F92CBC0A870046469F /* Constants.swift */,
470723172CBC29510046469F /* AuthenticationService.swift */,
);
path = Util;
sourceTree = "<group>";
Expand Down Expand Up @@ -364,6 +381,7 @@
4763FFAE2CB90AE000990336 /* AppState.swift */,
4763FFB02CB90C1500990336 /* DependencyInjector.swift */,
4763FFB22CB90E3800990336 /* InteractorsContainer.swift */,
47F4F69A2CC8E24300543D24 /* ServicesContainer.swift */,
);
path = Injected;
sourceTree = "<group>";
Expand Down Expand Up @@ -413,6 +431,7 @@
47A147392CA138CB00A91F66 /* Core */ = {
isa = PBXGroup;
children = (
47F635032CC3EBF10034EAA9 /* Model */,
4763FFBB2CB9228B00990336 /* AppEnviroment.swift */,
);
path = Core;
Expand All @@ -421,9 +440,9 @@
47A1473A2CA13DD000A91F66 /* DTO */ = {
isa = PBXGroup;
children = (
47F635002CC3E9700034EAA9 /* User */,
47F634FC2CC3E8500034EAA9 /* Auth */,
470723122CBC1BF10046469F /* BaseResponse.swift */,
4707230E2CBC1A9C0046469F /* LoginRequestDTO.swift */,
470723102CBC1B0A0046469F /* LoginResponseDTO.swift */,
);
path = DTO;
sourceTree = "<group>";
Expand Down Expand Up @@ -501,7 +520,7 @@
isa = PBXGroup;
children = (
47A1477F2CA15A4E00A91F66 /* OnboardingView.swift */,
478933782CADBDA500E1D89E /* SignInView.swift */,
478933782CADBDA500E1D89E /* SignUpView.swift */,
);
path = Auth;
sourceTree = "<group>";
Expand Down Expand Up @@ -585,6 +604,7 @@
isa = PBXGroup;
children = (
47DF041E2CBE7A29007E58A7 /* Encodable+.swift */,
47BE30E42CC81A9E0015D973 /* URLRequest+.swift */,
);
path = Extensions;
sourceTree = "<group>";
Expand All @@ -599,6 +619,42 @@
path = Base;
sourceTree = "<group>";
};
47F4F69E2CC8E45A00543D24 /* Services */ = {
isa = PBXGroup;
children = (
470723172CBC29510046469F /* AuthenticationService.swift */,
47BE30E22CC813BB0015D973 /* KeyChainManager.swift */,
);
path = Services;
sourceTree = "<group>";
};
47F634FC2CC3E8500034EAA9 /* Auth */ = {
isa = PBXGroup;
children = (
4707230E2CBC1A9C0046469F /* LoginRequestDTO.swift */,
470723102CBC1B0A0046469F /* LoginResponseDTO.swift */,
47F4F6962CC88FBB00543D24 /* SignUpRequestDTO.swift */,
47F4F6982CC89A6900543D24 /* SignUpResponseDTO.swift */,
);
path = Auth;
sourceTree = "<group>";
};
47F635002CC3E9700034EAA9 /* User */ = {
isa = PBXGroup;
children = (
47F634FD2CC3E8A40034EAA9 /* NicknameCheckDTO.swift */,
);
path = User;
sourceTree = "<group>";
};
47F635032CC3EBF10034EAA9 /* Model */ = {
isa = PBXGroup;
children = (
47F635042CC3EC1A0034EAA9 /* Department.swift */,
);
path = Model;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
Expand Down Expand Up @@ -788,7 +844,9 @@
471940D12CAFE61A00426D30 /* LineHeight.swift in Sources */,
4763FFBC2CB9228B00990336 /* AppEnviroment.swift in Sources */,
473671A12CB1234800527896 /* TodayWiseSaying.swift in Sources */,
47F4F6992CC89A6900543D24 /* SignUpResponseDTO.swift in Sources */,
470722FE2CBC15DA0046469F /* NetworkProtocol.swift in Sources */,
47F635052CC3EC1A0034EAA9 /* Department.swift in Sources */,
4795DC902CB43B2700EC3AB1 /* TimePickerDialog.swift in Sources */,
4752A27D2CB96EB00073B784 /* CancleBag.swift in Sources */,
4736719F2CB120A600527896 /* WeeklyStudy.swift in Sources */,
Expand All @@ -797,20 +855,26 @@
47860E092CB82BEF005701C0 /* TimePickerViewModel.swift in Sources */,
470723052CBC180D0046469F /* NetworkError.swift in Sources */,
475B86E52CA1CA61000534B2 /* HY2Button.swift in Sources */,
47BE30E52CC81A9E0015D973 /* URLRequest+.swift in Sources */,
473671A52CB13D8100527896 /* SafeArea.swift in Sources */,
471940C82CAFCB1B00426D30 /* SizeCheckModifier.swift in Sources */,
47F634FE2CC3E8A40034EAA9 /* NicknameCheckDTO.swift in Sources */,
4763FFAF2CB90AE000990336 /* AppState.swift in Sources */,
47B1D4AC2C9CB1740071B62B /* HongikYeolgong2App.swift in Sources */,
4763FFBA2CB913FF00990336 /* UserDataInteractor.swift in Sources */,
475B86E72CA1CC20000534B2 /* HY2TextField.swift in Sources */,
478933792CADBDA500E1D89E /* SignInView.swift in Sources */,
47F635022CC3E98D0034EAA9 /* UserEndpoint.swift in Sources */,
478933792CADBDA500E1D89E /* SignUpView.swift in Sources */,
4763FFB52CB90EBD00990336 /* InitialView.swift in Sources */,
470723092CBC198E0046469F /* AuthRepository.swift in Sources */,
47F4F6972CC88FBB00543D24 /* SignUpRequestDTO.swift in Sources */,
47A1474E2CA144EC00A91F66 /* StudyRoomUsage+Mock.swift in Sources */,
4763FFB32CB90E3800990336 /* InteractorsContainer.swift in Sources */,
470723182CBC29510046469F /* AuthenticationService.swift in Sources */,
47BE30E32CC813BB0015D973 /* KeyChainManager.swift in Sources */,
470723132CBC1BF10046469F /* BaseResponse.swift in Sources */,
471940CD2CAFDAD700426D30 /* WeeklyRanking+Mock.swift in Sources */,
47F4F69B2CC8E24300543D24 /* ServicesContainer.swift in Sources */,
47CA17252CC9336100CBB251 /* StudyPeriodView.swift in Sources */,
4763FFB82CB9134D00990336 /* Store.swift in Sources */,
47A147802CA15A4E00A91F66 /* OnboardingView.swift in Sources */,
Expand Down Expand Up @@ -979,6 +1043,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = HongikYeolgong2/HongikYeolgong2.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
Expand All @@ -998,6 +1063,7 @@
INFOPLIST_KEY_UILaunchStoryboardName = "Launch Screen.storyboard";
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_UIUserInterfaceStyle = Dark;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
Expand All @@ -1023,6 +1089,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = HongikYeolgong2/HongikYeolgong2.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
Expand All @@ -1042,6 +1109,7 @@
INFOPLIST_KEY_UILaunchStoryboardName = "Launch Screen.storyboard";
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_UIUserInterfaceStyle = Dark;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
Expand Down
21 changes: 19 additions & 2 deletions HongikYeolgong2/Core/AppEnviroment.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,25 @@ extension AppEnviroment {
static func bootstrap() -> AppEnviroment {
let appState = Store<AppState>(AppState())
let authRepository = AuthRepositoryImpl()
let interactors: DIContainer.Interactors = .init(userDataInteractor: UserDataInteractorImpl(appState: appState, authRepository: authRepository))
let diContainer = DIContainer(appState: appState, interactors: interactors)

let services: DIContainer.Services = .init(
authenticationService: AuthenticationServiceImpl()
)

let interactors: DIContainer.Interactors = .init(
userDataInteractor: UserDataInteractorImpl(
appState: appState,
authRepository: authRepository,
authService: services.authenticationService
)
)

let diContainer = DIContainer(
appState: appState,
interactors: interactors,
services: services
)

return .init(container: diContainer)
}
}
47 changes: 47 additions & 0 deletions HongikYeolgong2/Core/Model/Department.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//
// Department.swift
// HongikYeolgong2
//
// Created by 권석기 on 10/19/24.
//

import Foundation

enum Department: String, CaseIterable {
case constructionUrban = "건설도시공학부"
case civilEnvironmental = "건설환경공학과"
case architecture = "건축학부"
case business = "경영학부"
case economics = "경제학부"
case performingArts = "공연예술학부"
case metalDesign = "금속조형디자인과"
case mechanicalSystem = "기계시스템디자인공학과"
case koreanEdu = "국어교육과"
case koreanLit = "국어국문학과"
case urbanPlanning = "도시공학과"
case germanLit = "독어독문학과"
case orientalPainting = "동양화과"
case ceramics = "도예유리과"
case designManagement = "디자인경영융합학부"
case designArtManagement = "디자인·예술경영학부"
case design = "디자인학부"
case physicsEdu = "물리교육과"
case law = "법학부"
case frenchLit = "불어불문학과"
case socialEdu = "사회교육과"
case industrialDesign = "산업디자인학과"
case industrialData = "산업·데이터공학과"
case textileFashion = "섬유미술패션디자인과"
case mathEdu = "수학교육과"
case materials = "신소재화공시스템공학부"
case englishEdu = "영어교육과"
case englishLit = "영어영문학과"
case historyEdu = "역사교육과"
case artStudies = "예술학과"
case appliedArts = "응용미술학과"
case electricalElectronic = "전자전기공학부"
case sculpture = "조소과"
case computerScience = "컴퓨터공학과"
case frenchStudies = "프랑스어문학과"
case painting = "회화과"
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ enum SocialLoginType: String, Encodable {
}

struct LoginRequestDTO: Encodable {
let socialPlatform: String
let email: String
let idToken: String
}



13 changes: 13 additions & 0 deletions HongikYeolgong2/Data/DTO/Auth/SignUpRequestDTO.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// SignUpRequestDTO.swift
// HongikYeolgong2
//
// Created by 권석기 on 10/23/24.
//

import Foundation

struct SignUpRequestDTO: Encodable {
let nickname: String
let department: String
}
15 changes: 15 additions & 0 deletions HongikYeolgong2/Data/DTO/Auth/SignUpResponseDTO.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// SignUpResponseDTO.swift
// HongikYeolgong2
//
// Created by 권석기 on 10/23/24.
//

import Foundation

struct SignUpResponseDTO: Decodable {
let id: Int
let username: String
let nickname: String
let department: String
}
2 changes: 2 additions & 0 deletions HongikYeolgong2/Data/DTO/BaseResponse.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import Foundation

/// 네트워크 기본응답 형식을 정의하는 제네릭 구조체 입니다.
/// 제네릭 타입은 Decodable 프로토콜을 준수 -> BaseResponse<T:Decodable> = try await NetworkManager.request()
struct BaseResponse<T: Decodable>: Decodable {
let code: Int
let status: String
Expand Down
14 changes: 14 additions & 0 deletions HongikYeolgong2/Data/DTO/User/NicknameCheckDTO.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//
// NicknameCheckDTO.swift
// HongikYeolgong2
//
// Created by 권석기 on 10/19/24.
//

import Foundation

/// 닉네임체크 응답 DTO
struct NicknameCheckDTO: Decodable {
let nickname: String
let duplicate: Bool
}
Loading

0 comments on commit 088d99c

Please sign in to comment.