Skip to content

Commit 7e5fa1c

Browse files
committed
添加 "创建项目"、"修改项目"、"删除项目" 的接口
1 parent a1f37cc commit 7e5fa1c

10 files changed

Lines changed: 174 additions & 20 deletions

Coding_iOS/Controllers/NewProject/NewProject.storyboard

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6751" systemVersion="14C109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6751" systemVersion="14C109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
33
<dependencies>
44
<deployment identifier="iOS"/>
55
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6736"/>
@@ -87,7 +87,7 @@
8787
<constraint firstAttribute="height" constant="21" id="2xj-0d-iFd"/>
8888
</constraints>
8989
<fontDescription key="fontDescription" type="system" pointSize="16"/>
90-
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
90+
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
9191
<nil key="highlightedColor"/>
9292
</label>
9393
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="私有" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tDj-1q-N6c">
@@ -127,7 +127,7 @@
127127
</tableViewController>
128128
<placeholder placeholderIdentifier="IBFirstResponder" id="f41-ib-nma" userLabel="First Responder" sceneMemberID="firstResponder"/>
129129
</objects>
130-
<point key="canvasLocation" x="613" y="356"/>
130+
<point key="canvasLocation" x="167" y="337"/>
131131
</scene>
132132
<!--项目类型-->
133133
<scene sceneID="gFz-UQ-GPk">
@@ -156,7 +156,12 @@
156156
</tableViewController>
157157
<placeholder placeholderIdentifier="IBFirstResponder" id="nB2-h8-RSI" userLabel="First Responder" sceneMemberID="firstResponder"/>
158158
</objects>
159-
<point key="canvasLocation" x="1002" y="356"/>
159+
<point key="canvasLocation" x="534.39999999999998" y="337.01333333333332"/>
160160
</scene>
161161
</scenes>
162+
<simulatedMetricsContainer key="defaultSimulatedMetrics">
163+
<simulatedStatusBarMetrics key="statusBar"/>
164+
<simulatedOrientationMetrics key="orientation"/>
165+
<simulatedScreenMetrics key="destination" type="retina4"/>
166+
</simulatedMetricsContainer>
162167
</document>

Coding_iOS/Controllers/NewProject/NewProjectViewController.m

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#import "NewProjectViewController.h"
1010
#import "NewProjectTypeViewController.h"
11+
#import "Coding_NetAPIManager.h"
1112

1213
@interface NewProjectViewController ()<NewProjectTypeDelegate,UITextFieldDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate>
1314

@@ -88,9 +89,21 @@ -(void)submit{
8889
}else{
8990
if ([self projectNameVerification:projectName]) {
9091

91-
// 效验完成,开始发送请求创建项目
92+
// init a Project
93+
Project *project = [[Project alloc] init];
94+
project.name = projectName;
95+
project.description_mine = [self.descTextView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
96+
97+
if (self.projectType == NewProjectTypePublic) {
98+
project.is_public = @YES;
99+
}else{
100+
project.is_public = @NO;
101+
}
92102

93-
[self.navigationController popToRootViewControllerAnimated:YES];
103+
// 效验完成,开始发送请求创建项目
104+
[[Coding_NetAPIManager sharedManager] request_NewProject_WithObj:project andBlock:^(Project *data, NSError *error) {
105+
[self.navigationController popToRootViewControllerAnimated:YES];
106+
}];
94107
}else{
95108
[[[UIAlertView alloc] initWithTitle:@"提示" message:@"项目名只允许字母、数字或者下划线(_)、中划线(-),必须以字母或者数字开头,且不能以.git结尾" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles: nil] show];
96109
}

Coding_iOS/Controllers/ProjectSetting/ProjectAdvancedSettingViewController.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
#import <UIKit/UIKit.h>
1010

11+
@class Project;
12+
1113
@interface ProjectAdvancedSettingViewController : UITableViewController
1214

15+
@property (nonatomic, strong) Project *project;
16+
1317
@end

Coding_iOS/Controllers/ProjectSetting/ProjectAdvancedSettingViewController.m

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//
88

99
#import "ProjectAdvancedSettingViewController.h"
10+
#import "Coding_NetAPIManager.h"
1011

1112
@interface ProjectAdvancedSettingViewController ()<UIAlertViewDelegate>
1213

@@ -51,14 +52,26 @@ -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cel
5152
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
5253
[tableView deselectRowAtIndexPath:indexPath animated:YES];
5354

54-
UIAlertView *alert = [UIAlertView bk_showAlertViewWithTitle:@"需要验证密码" message:@"这是一个危险的操作,请提供登录密码确认!" cancelButtonTitle:@"取消" otherButtonTitles:@[@"确定"] handler:^(UIAlertView *alertView, NSInteger buttonIndex) {
55-
if (buttonIndex == 1) {
56-
// 确定
57-
}
58-
}];
59-
55+
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"需要验证密码" message:@"这是一个危险的操作,请提供登录密码确认!" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
6056
alert.alertViewStyle = UIAlertViewStyleSecureTextInput;
6157
[alert show];
6258
}
6359

60+
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
61+
if (buttonIndex == 1) {
62+
// 确定
63+
NSString *password = [[alertView textFieldAtIndex:0].text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
64+
65+
if (password > 0) {
66+
// 删除项目
67+
[[Coding_NetAPIManager sharedManager] request_DeleteProject_WithObj:self.project password:password andBlock:^(Project *data, NSError *error) {
68+
if (!error) {
69+
[self.navigationController popToRootViewControllerAnimated:YES];
70+
}
71+
72+
}];
73+
}
74+
}
75+
}
76+
6477
@end

Coding_iOS/Controllers/ProjectSetting/ProjectSetting.storyboard

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6751" systemVersion="14C109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6751" systemVersion="14C109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
33
<dependencies>
44
<deployment identifier="iOS"/>
55
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6736"/>
@@ -87,7 +87,7 @@
8787
<constraint firstAttribute="height" constant="21" id="ceY-jT-Jgt"/>
8888
</constraints>
8989
<fontDescription key="fontDescription" type="system" pointSize="16"/>
90-
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
90+
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
9191
<nil key="highlightedColor"/>
9292
</label>
9393
</subviews>
@@ -98,7 +98,7 @@
9898
</tableViewCellContentView>
9999
<inset key="separatorInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
100100
<connections>
101-
<segue destination="cF4-XN-KG0" kind="show" id="zg4-cV-mOQ"/>
101+
<segue destination="cF4-XN-KG0" kind="push" id="Kyg-XK-Agc"/>
102102
</connections>
103103
</tableViewCell>
104104
</cells>
@@ -118,12 +118,12 @@
118118
</tableViewController>
119119
<placeholder placeholderIdentifier="IBFirstResponder" id="XTZ-Sc-Qlw" userLabel="First Responder" sceneMemberID="firstResponder"/>
120120
</objects>
121-
<point key="canvasLocation" x="324" y="320"/>
121+
<point key="canvasLocation" x="172.80000000000001" y="302.93333333333334"/>
122122
</scene>
123123
<!--高级设置-->
124124
<scene sceneID="aKh-1D-3YA">
125125
<objects>
126-
<tableViewController title="高级设置" id="cF4-XN-KG0" customClass="ProjectAdvancedSettingViewController" sceneMemberID="viewController">
126+
<tableViewController storyboardIdentifier="ProjectAdvancedSettingVC" title="高级设置" id="cF4-XN-KG0" customClass="ProjectAdvancedSettingViewController" sceneMemberID="viewController">
127127
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="qxv-8j-DgZ">
128128
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
129129
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@@ -198,11 +198,17 @@
198198
<outlet property="delegate" destination="cF4-XN-KG0" id="Q0h-2m-d6m"/>
199199
</connections>
200200
</tableView>
201+
<navigationItem key="navigationItem" id="4DW-1P-nzb"/>
201202
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/>
202203
</tableViewController>
203204
<placeholder placeholderIdentifier="IBFirstResponder" id="Kmr-F8-000" userLabel="First Responder" sceneMemberID="firstResponder"/>
204205
</objects>
205-
<point key="canvasLocation" x="731" y="320"/>
206+
<point key="canvasLocation" x="598" y="302"/>
206207
</scene>
207208
</scenes>
209+
<simulatedMetricsContainer key="defaultSimulatedMetrics">
210+
<simulatedStatusBarMetrics key="statusBar"/>
211+
<simulatedOrientationMetrics key="orientation"/>
212+
<simulatedScreenMetrics key="destination" type="retina4"/>
213+
</simulatedMetricsContainer>
208214
</document>

Coding_iOS/Controllers/ProjectSetting/ProjectSettingViewController.m

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#import "ProjectSettingViewController.h"
1010
#import "Projects.h"
1111
#import "UIImageView+WebCache.h"
12+
#import "Coding_NetAPIManager.h"
1213

1314
@interface ProjectSettingViewController ()<UITextViewDelegate>
1415

@@ -42,7 +43,13 @@ - (void)viewDidLoad {
4243
}
4344

4445
-(void)submit{
45-
46+
self.project.description_mine = [self.descTextView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
47+
48+
// 更新项目
49+
[[Coding_NetAPIManager sharedManager] request_UpdateProject_WithObj:self.project andBlock:^(Project *data, NSError *error) {
50+
[self.navigationController popToRootViewControllerAnimated:YES];
51+
}];
52+
4653
}
4754

4855
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
@@ -93,7 +100,7 @@ -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cel
93100

94101
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
95102
UIViewController *vc = segue.destinationViewController;
96-
// [vc setValue:nil forKey:@""];
103+
[vc setValue:self.project forKey:@"project"];
97104
}
98105

99106
@end

Coding_iOS/Models/Projects.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,15 @@ typedef NS_ENUM(NSInteger, ProjectsType)
6060
+ (Project *)project_All;
6161
+ (Project *)project_FeedBack;
6262

63+
- (NSString *)toProjectPath;
64+
- (NSDictionary *)toCreateParams;
65+
66+
- (NSString *)toUpdatePath;
67+
- (NSDictionary *)toUpdateParams;
68+
69+
- (NSString *)toDeletePath;
70+
- (NSDictionary *)toDeleteParamsWithPassword:(NSString *)password;
71+
6372
- (NSString *)toMembersPath;
6473
- (NSDictionary *)toMembersParams;
6574

Coding_iOS/Models/Projects.m

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
//
88

99
#import "Projects.h"
10+
#import "Login.h"
11+
#import "NSString+Common.h"
1012

1113
@implementation Projects
1214

@@ -119,6 +121,53 @@ + (Project *)project_FeedBack{
119121
return pro;
120122
}
121123

124+
-(NSString *)toProjectPath{
125+
return @"api/project";
126+
}
127+
128+
-(NSDictionary *)toCreateParams{
129+
130+
NSString *type;
131+
if ([self.is_public isEqual:@YES]) {
132+
type = @"1";
133+
}else{
134+
type = @"2";
135+
}
136+
137+
return @{@"name":self.name,
138+
@"description":self.description_mine,
139+
@"type":type,
140+
@"gitEnable":@"false",
141+
@"gitReadmeEnabled":@"false",
142+
@"gitIgnore":@"no",
143+
@"gitLicense":@"no",
144+
@"importFrom":@"no",
145+
@"vcsType":@"git"};
146+
}
147+
148+
-(NSString *)toUpdatePath{
149+
return [self toProjectPath];
150+
}
151+
152+
-(NSDictionary *)toUpdateParams{
153+
return @{@"name":self.name,
154+
@"description":self.description_mine,
155+
@"id":self.id
156+
// @"default_branch":[NSNull null]
157+
};
158+
}
159+
160+
-(NSString *)toDeletePath{
161+
return [NSString stringWithFormat:@"api/project/%@",self.id];
162+
}
163+
164+
-(NSDictionary *)toDeleteParamsWithPassword:(NSString *)password{
165+
return @{@"user_name":[Login curLoginUser].email,
166+
@"project_name":self.name,
167+
@"porject_id":[self.id stringValue],
168+
@"password":[password sha1Str]};
169+
}
170+
122171
- (NSString *)toMembersPath{
123172
return [NSString stringWithFormat:@"api/project/%d/members", self.id.intValue];
124173
}

Coding_iOS/Util/Manager/Coding_NetAPIManager.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@
4848
- (void)request_ProjectMembers_WithObj:(Project *)project andBlock:(void (^)(id data, NSError *error))block;
4949
- (void)request_ProjectMembersHaveTasks_WithObj:(Project *)project andBlock:(void (^)(NSArray *data, NSError *error))block;
5050
- (void)request_ProjectMember_Quit:(ProjectMember *)curMember andBlock:(void (^)(id data, NSError *error))block;
51+
52+
- (void)request_NewProject_WithObj:(Project *)project andBlock:(void (^)(Project *data, NSError *error))block;
53+
- (void)request_UpdateProject_WithObj:(Project *)project andBlock:(void (^)(Project *data, NSError *error))block;
54+
- (void)request_DeleteProject_WithObj:(Project *)project password:(NSString *)password andBlock:(void (^)(Project *data, NSError *error))block;
55+
5156
//File
5257
- (void)request_Folders:(ProjectFolders *)folders inProject:(Project *)project andBlock:(void (^)(id data, NSError *error))block;
5358
- (void)request_RefreshCountInFolders:(ProjectFolders *)folders inProject:(Project *)project andBlock:(void (^)(id data, NSError *error))block;

Coding_iOS/Util/Manager/Coding_NetAPIManager.m

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,49 @@ - (void)request_ProjectMember_Quit:(ProjectMember *)curMember andBlock:(void (^)
243243
}];
244244
}
245245
}
246+
247+
-(void)request_NewProject_WithObj:(Project *)project andBlock:(void (^)(Project *, NSError *))block{
248+
[MobClick event:kUmeng_Event_Request label:@"创建项目"];
249+
[self showStatusBarQueryStr:@"正在创建项目"];
250+
[[CodingNetAPIClient sharedJsonClient] requestJsonDataWithPath:[project toProjectPath] withParams:[project toCreateParams] withMethodType:Post andBlock:^(id data, NSError *error) {
251+
if (data) {
252+
[self showStatusBarSuccessStr:@"创建项目成功"];
253+
block(data, nil);
254+
}else{
255+
[self showStatusBarError:error];
256+
block(nil, error);
257+
}
258+
}];
259+
}
260+
261+
-(void)request_UpdateProject_WithObj:(Project *)project andBlock:(void (^)(Project *, NSError *))block{
262+
[MobClick event:kUmeng_Event_Request label:@"更新项目"];
263+
[self showStatusBarQueryStr:@"正在更新项目"];
264+
[[CodingNetAPIClient sharedJsonClient] requestJsonDataWithPath:[project toDeletePath] withParams:[project toUpdateParams] withMethodType:Put andBlock:^(id data, NSError *error) {
265+
if (data) {
266+
[self showStatusBarSuccessStr:@"更新项目成功"];
267+
block(data, nil);
268+
}else{
269+
[self showStatusBarError:error];
270+
block(nil, error);
271+
}
272+
}];
273+
}
274+
275+
-(void)request_DeleteProject_WithObj:(Project *)project password:(NSString *)password andBlock:(void (^)(Project *, NSError *))block{
276+
[MobClick event:kUmeng_Event_Request label:@"删除项目"];
277+
[self showStatusBarQueryStr:@"正在删除项目"];
278+
[[CodingNetAPIClient sharedJsonClient] requestJsonDataWithPath:[project toDeletePath] withParams:[project toDeleteParamsWithPassword:password] withMethodType:Delete andBlock:^(id data, NSError *error) {
279+
if (data) {
280+
[self showStatusBarSuccessStr:@"删除项目成功"];
281+
block(data, nil);
282+
}else{
283+
[self showStatusBarError:error];
284+
block(nil, error);
285+
}
286+
}];
287+
}
288+
246289
- (void)request_ProjectTaskList_WithObj:(Tasks *)tasks andBlock:(void (^)(Tasks *data, NSError *error))block{
247290
[MobClick event:kUmeng_Event_Request label:@"任务列表"];
248291
tasks.isLoading = YES;

0 commit comments

Comments
 (0)