Skip to content

Commit

Permalink
#9 Set Userinform Api
Browse files Browse the repository at this point in the history
  • Loading branch information
JunseokNoh committed Aug 10, 2021
1 parent 9e65608 commit 625328f
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 15 deletions.
10 changes: 8 additions & 2 deletions KNU_CSE/KNU_CSE/Custom/Indicator/Indicator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ struct IndicatorView{
color: .black,
padding: 0)
let loadingView = UIView()
let viewController : UIViewController
var viewController : UIViewController

init(viewController : UIViewController){
self.viewController = viewController
Expand Down Expand Up @@ -45,5 +45,11 @@ struct IndicatorView{
self.loadingView.removeFromSuperview()
}
}

}

class BaseUIViewController:UIViewController{
lazy var indicator:IndicatorView = {
let indicator = IndicatorView(viewController: self)
return indicator
}()
}
32 changes: 29 additions & 3 deletions KNU_CSE/KNU_CSE/Main Tab/MyPage/UserInfrom/UserInformView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import UIKit

class UserInformView:UIViewController, ViewProtocol{
class UserInformView:BaseUIViewController, ViewProtocol{

let profile_width_hegiht:CGFloat = 150
let image_width_height:CGFloat = 150 * 0.2
Expand Down Expand Up @@ -77,8 +77,10 @@ class UserInformView:UIViewController, ViewProtocol{
confirmBtn.titleLabel?.font = UIFont.systemFont(ofSize: 20, weight: .regular)
confirmBtn.backgroundColor = .lightGray
confirmBtn.isEnabled = false
self.BindingSetUserInform()
confirmBtn.addAction {
self.navigationController?.popViewController(animated: true)
// self.navigationController?.popViewController(animated: true)
self.userInformationViewModel.setUserInform()
}
}
}
Expand Down Expand Up @@ -163,6 +165,7 @@ extension UserInformView:UITableViewDataSource{
cell.setEditable()
cell.setUpEditCellConstraints()
cell.setListener { [weak self] origin_text, last_text in
self?.userInformationViewModel.model.editedNickname = last_text
if origin_text != last_text && last_text != ""{
self?.addBtnAction()
}else{
Expand Down Expand Up @@ -195,6 +198,11 @@ extension UserInformView{
self?.presentPhotoView()
}, remove_text: "프로필 이미지 삭제", removeAction:{ [weak self] action in
self?.setOriginProfile()
if self?.userInformationViewModel.model.imagePath != nil{
self?.addBtnAction()
}
let image = UIImage(systemName: "person.circle.fill")!.resized(toWidth: self!.profile_width_hegiht)!.withTintColor(.lightGray.withAlphaComponent(0.4))
self?.userInformationViewModel.model.imageData = image.jpegData(compressionQuality: 1)
}
, cancel_text: "취소")
}
Expand Down Expand Up @@ -233,13 +241,31 @@ extension UserInformView{
}, failHandler: { Error in
Alert(title: "실패", message: "네트워크 상태를 확인하세요", viewController: self).popUpDefaultAlert(action: nil)
}, asyncHandler: {

self.indicator.viewController = self
self.indicator.startIndicator()
}, endHandler: {
if self.userInformationViewModel.model != nil{
self.initUI()
self.addView()
self.setUpConstraints()
}
self.indicator.stopIndicator()
})
}

func BindingSetUserInform(){
self.userInformationViewModel.setInformlistener.binding(successHandler: {result in
if result.success{
print(result.response)
}else{
print(result.error)
}
}, failHandler: { Error in
print(Error)
}, asyncHandler: {

}, endHandler: {

})
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
//

import Foundation
import Alamofire

struct UserInformViewModel{
var model:Profile!
var getInformlistener: BaseAction<Profile, errorHandler> = BaseAction()
var setInformlistener: BaseAction<String, errorHandler> = BaseAction()

init(){

Expand All @@ -21,14 +23,15 @@ struct UserInformViewModel{
}

func setUserInform(){
let request = Request(requestBodyObject: self.model, requestMethod: .put, enviroment: .getInform)
request.sendRequest(request: request, responseType: Profile.self, errorType: errorHandler.self, action:self.getInformlistener)
let request = Request(requestMultipart: model.getMultipart(), requestMethod: .put, enviroment:.setInform)
request.sendMutiPartRequest(request: request, responseType: String.self, errorType: errorHandler.self, action: self.setInformlistener)
}
}

class Profile:BaseObject{
var email:String!
var imagePath:String!
var editedNickname:String!
var nickname:String!
var userId:Int!
var username:String!
Expand All @@ -45,23 +48,39 @@ class Profile:BaseObject{

required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
imagePath = (try? container.decode(String.self, forKey: .imagePath)) ?? ""
email = (try? container.decode(String.self, forKey: .email)) ?? ""
username = (try? container.decode(String.self, forKey: .username)) ?? ""
nickname = (try? container.decode(String.self, forKey: .nickname)) ?? ""
studentId = (try? container.decode(String.self, forKey: .studentId)) ?? ""
self.imagePath = (try? container.decode(String.self, forKey: .imagePath)) ?? ""
self.email = (try? container.decode(String.self, forKey: .email)) ?? ""
self.username = (try? container.decode(String.self, forKey: .username)) ?? ""
self.nickname = (try? container.decode(String.self, forKey: .nickname)) ?? ""
self.editedNickname = nickname
self.studentId = (try? container.decode(String.self, forKey: .studentId)) ?? ""
super.init()
}

override func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(nickname, forKey: .name)
try container.encode(imageData, forKey: .file)
try container.encode(nickname, forKey: .nickname)
try container.encode(imageData, forKey: .image)
try super.encode(to: encoder)
}

enum CodingKeys: CodingKey {
case email, imagePath, nickname, userId, username, studentId
case name,file
case name,image
}

func getMultipart()->MultipartFormData{
let multipartFormData = MultipartFormData()

if editedNickname != nickname{
multipartFormData.append(Data(editedNickname.utf8), withName: "nickName")
}

if let image = imageData{
multipartFormData.append(image, withName: "image", fileName: "\(String(describing: nickname))_profile", mimeType: "image/jpeg")
}else{
multipartFormData.append(Data("".utf8), withName: "image")
}
return multipartFormData
}
}
4 changes: 4 additions & 0 deletions KNU_CSE/KNU_CSE/Network Service/Base/BaseApiRequest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import Alamofire
protocol BaseApiRequest {
var requestMethod: RequestHttpMethod?{ get }
var requestBodyObject: BaseObject?{ get }
var requestMultipart:MultipartFormData!{ get }
func request() -> URLRequest
var enviroment: Environment? { get }
}
Expand Down Expand Up @@ -86,6 +87,8 @@ extension BaseApiRequest{
return getAddress(domain: "user/signUp")
case .getInform:
return getAddress(domain: "user/getUserEmailNickname")
case .setInform:
return getAddress(domain: "user/image/nickname")
case .changePassword:
return getAddress(domain: "user/changePassword")
case .CodeRequest(let email):
Expand All @@ -110,6 +113,7 @@ enum Environment{
case SignIn
case SignUp
case getInform
case setInform
case changePassword
case CodeRequest(String)
case CodeConfirm
Expand Down
16 changes: 16 additions & 0 deletions KNU_CSE/KNU_CSE/Network Service/Request.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import Alamofire
struct Request: BaseApiRequest {

var requestBodyObject: BaseObject?
var requestMultipart: MultipartFormData!
var requestMethod: RequestHttpMethod? = RequestHttpMethod.post
var enviroment: Environment?

Expand All @@ -30,4 +31,19 @@ struct Request: BaseApiRequest {
action.endHandler()
}
}

func sendMutiPartRequest<T:Codable,V:Codable>(request:BaseApiRequest, responseType :T.Type,errorType:V.Type, action:BaseAction<T,V>){
action.asyncHandler()
AF.upload(multipartFormData: requestMultipart, with: request.request()).responseDecodable{ (response:AFDataResponse<ResponseBody<T,V>>) in
switch response.result{
case .success(let responseEventList):
action.successHandler(responseEventList)
print("success")
case .failure(let error):
action.failHandler(error)
print("fail")
}
action.endHandler()
}
}
}

0 comments on commit 625328f

Please sign in to comment.