From f588bb24239354cc721089b4de873f5a97791665 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 16 Apr 2024 12:27:54 +0100 Subject: [PATCH 01/26] Testing branch creation and pushing via Xcode. Only changed Acebook to Pawbook. --- .DS_Store | Bin 6148 -> 6148 bytes MobileAcebook/WelcomePageView.swift | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index 7fa1be84d357e72af5ed943ecd6fe9ee00e303cc..ef9d0d31efdf5d6caf352af0c06d104a5119f297 100644 GIT binary patch delta 134 zcmZoMXfc@JFUrQiz`)4BAi%(o!;s40$dC*qlQuK5EN5h7o7~1^$f!4Y2a_+5WMg&) zl3vX2KynhZrscf83}%aG!klb@WFlb-}s4K#(p4v6*sg8`7mz`(=c&EN^t;SDs$4G3}RTMtz0f~1dk zvH+7VqswGFCSM@g!{iJkFEF_SNeO06`z=T+c^HBiTp1i0To`rn$Lkd=xfoy>4 O1A35`Wiva+Uw#1d_(H(| diff --git a/MobileAcebook/WelcomePageView.swift b/MobileAcebook/WelcomePageView.swift index 96006af9..8d605011 100644 --- a/MobileAcebook/WelcomePageView.swift +++ b/MobileAcebook/WelcomePageView.swift @@ -13,7 +13,7 @@ struct WelcomePageView: View { VStack { Spacer() - Text("Welcome to Acebook!") + Text("Welcome to Pawbook!") .font(.largeTitle) .padding(.bottom, 20) .accessibilityIdentifier("welcomeText") From d5f2c312900381924419f4df4fcb63b14cccdbb4 Mon Sep 17 00:00:00 2001 From: Maria Basia Date: Tue, 16 Apr 2024 12:35:01 +0100 Subject: [PATCH 02/26] First commit - signup function added to AuthenticationService.swift. User model was updated as well --- .DS_Store | Bin 6148 -> 6148 bytes MobileAcebook/Models/User.swift | 8 +++-- .../Services/AuthenticationService.swift | 32 ++++++++++++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/.DS_Store b/.DS_Store index 7fa1be84d357e72af5ed943ecd6fe9ee00e303cc..aa44966853af418bd5abc15663ce08842a8d08f5 100644 GIT binary patch delta 53 zcmZoMXfc@JFUrcmz`)4BAi%(o!;s40$dC*qlQuK5EN5h7-Q33H$hi4GGY8AWhE1E< IIsWnk03q!R83}%aG!klb@WFlb-}s4K#(p4v6*sg8`7mz`(=c&EN^t;SDs$4G3}RTMtz0f~1dk qvjCGVqb3hS5Q8g&BZCWrFOb$_NM%UDYVG>XcFf`|o7p-3@&f?fUoQLr diff --git a/MobileAcebook/Models/User.swift b/MobileAcebook/Models/User.swift index ea748dd0..1daa5af5 100644 --- a/MobileAcebook/Models/User.swift +++ b/MobileAcebook/Models/User.swift @@ -5,7 +5,11 @@ // Created by Josué Estévez Fernández on 01/10/2023. // -public struct User { - let username: String + + +public struct User: Encodable { + let imgUrl: String + let email: String let password: String + let username: String } diff --git a/MobileAcebook/Services/AuthenticationService.swift b/MobileAcebook/Services/AuthenticationService.swift index 9f7181c3..3d97eaa6 100644 --- a/MobileAcebook/Services/AuthenticationService.swift +++ b/MobileAcebook/Services/AuthenticationService.swift @@ -4,10 +4,38 @@ // // Created by Josué Estévez Fernández on 01/10/2023. // +import Foundation + + class AuthenticationService: AuthenticationServiceProtocol { + struct Response: Codable { + let message : String + } + func signUp(user: User) -> Bool { - // Logic to call the backend API for signing up - return true // placeholder + guard let url = URL(string: "http://localhost:3000/users") else {return false} + + var urlRequest = URLRequest(url: url) + urlRequest.httpMethod = "POST" + urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let body = user + urlRequest.httpBody = try? JSONEncoder().encode(user) //JSONSerialization.data(withJSONObject: body, options: .fragmentsAllowed) + let task = URLSession.shared.dataTask(with : urlRequest) {data, response, error in + guard let data = data else {return} + do { + let response = try JSONSerialization.jsonObject(with: data, options: .allowFragments) + print(response) + print("User created successfully") + } + catch { + print(error) + } + } + task.resume() + return true } + } + From 0355fb02fb31a6d54d5b06dcfe370a7fa533c847 Mon Sep 17 00:00:00 2001 From: Venera Date: Tue, 16 Apr 2024 12:49:13 +0100 Subject: [PATCH 03/26] login page created --- .DS_Store | Bin 6148 -> 6148 bytes MobileAcebook.xcodeproj/project.pbxproj | 4 + .../xcschemes/MobileAcebook.xcscheme | 102 ++++++++++++++++++ MobileAcebook/LoginPageView.swift | 54 ++++++++++ 4 files changed, 160 insertions(+) create mode 100644 MobileAcebook.xcodeproj/xcshareddata/xcschemes/MobileAcebook.xcscheme create mode 100644 MobileAcebook/LoginPageView.swift diff --git a/.DS_Store b/.DS_Store index 7fa1be84d357e72af5ed943ecd6fe9ee00e303cc..aa44966853af418bd5abc15663ce08842a8d08f5 100644 GIT binary patch delta 53 zcmZoMXfc@JFUrcmz`)4BAi%(o!;s40$dC*qlQuK5EN5h7-Q33H$hi4GGY8AWhE1E< IIsWnk03q!R83}%aG!klb@WFlb-}s4K#(p4v6*sg8`7mz`(=c&EN^t;SDs$4G3}RTMtz0f~1dk qvjCGVqb3hS5Q8g&BZCWrFOb$_NM%UDYVG>XcFf`|o7p-3@&f?fUoQLr diff --git a/MobileAcebook.xcodeproj/project.pbxproj b/MobileAcebook.xcodeproj/project.pbxproj index 5506db3b..0822bc58 100644 --- a/MobileAcebook.xcodeproj/project.pbxproj +++ b/MobileAcebook.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 0F81A0C52BCE82C200AED673 /* LoginPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F81A0C42BCE82C200AED673 /* LoginPageView.swift */; }; AE5D85B02AC8A221009680C6 /* MobileAcebookApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85AF2AC8A221009680C6 /* MobileAcebookApp.swift */; }; AE5D85B42AC8A224009680C6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE5D85B32AC8A224009680C6 /* Assets.xcassets */; }; AE5D85B72AC8A224009680C6 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE5D85B62AC8A224009680C6 /* Preview Assets.xcassets */; }; @@ -39,6 +40,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 0F81A0C42BCE82C200AED673 /* LoginPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginPageView.swift; sourceTree = ""; }; AE5D85AC2AC8A221009680C6 /* MobileAcebook.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MobileAcebook.app; sourceTree = BUILT_PRODUCTS_DIR; }; AE5D85AF2AC8A221009680C6 /* MobileAcebookApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MobileAcebookApp.swift; sourceTree = ""; }; AE5D85B32AC8A224009680C6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -111,6 +113,7 @@ AE5D85B32AC8A224009680C6 /* Assets.xcassets */, AE5D85B52AC8A224009680C6 /* Preview Content */, AE5D85D92AC8A337009680C6 /* WelcomePageView.swift */, + 0F81A0C42BCE82C200AED673 /* LoginPageView.swift */, ); path = MobileAcebook; sourceTree = ""; @@ -309,6 +312,7 @@ AE5D85B02AC8A221009680C6 /* MobileAcebookApp.swift in Sources */, AE5D85E82AC9B29A009680C6 /* User.swift in Sources */, AE5D85DA2AC8A337009680C6 /* WelcomePageView.swift in Sources */, + 0F81A0C52BCE82C200AED673 /* LoginPageView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MobileAcebook.xcodeproj/xcshareddata/xcschemes/MobileAcebook.xcscheme b/MobileAcebook.xcodeproj/xcshareddata/xcschemes/MobileAcebook.xcscheme new file mode 100644 index 00000000..f988e3d0 --- /dev/null +++ b/MobileAcebook.xcodeproj/xcshareddata/xcschemes/MobileAcebook.xcscheme @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MobileAcebook/LoginPageView.swift b/MobileAcebook/LoginPageView.swift new file mode 100644 index 00000000..7de4ca1b --- /dev/null +++ b/MobileAcebook/LoginPageView.swift @@ -0,0 +1,54 @@ +// +// WelcomePageView.swift +// MobileAcebook +// +// Created by Josué Estévez Fernández on 30/09/2023. +// + +import SwiftUI + +struct LoginPageView: View { + @State private var username = "" + @State private var password = "" + + var body: some View { + NavigationView { + + VStack { + Spacer() + Text("Log in") + .font(.largeTitle) + .bold() + Spacer() + TextField("Username", text: $username) + .frame(width: 200, height: 30) + .textFieldStyle(.roundedBorder) + .multilineTextAlignment(.center) + .accessibilityIdentifier("loginUsername") + TextField("Password", text: $password) + .frame(width: 200, height: 30) + .textFieldStyle(.roundedBorder) + .multilineTextAlignment(.center) + .accessibilityIdentifier("loginPassword") + .padding() + Button("Submit") { + guard !username.isEmpty && !password.isEmpty else { return } + } + .frame(width: 200, height: 30) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) + + Spacer() + Spacer() + } + + } + } +} + +struct LoginPageView_Previews: PreviewProvider { + static var previews: some View { + LoginPageView() + } +} From 2c481f321655a2e366b6ac4656c62010b40eaefa Mon Sep 17 00:00:00 2001 From: Jess Date: Tue, 16 Apr 2024 12:49:33 +0100 Subject: [PATCH 04/26] added post model, aand also changed the welcome page --- .DS_Store | Bin 6148 -> 6148 bytes MobileAcebook.xcodeproj/project.pbxproj | 4 ++ .../paw-logo.imageset/Contents.json | 21 ++++++++++ .../paw-logo.imageset/pawprint.png | Bin 0 -> 25412 bytes .../paw-logo2.imageset/Contents.json | 21 ++++++++++ .../paw-logo2.imageset/paw.png | Bin 0 -> 21003 bytes MobileAcebook/Models/Post.swift | 15 ++++++++ MobileAcebook/WelcomePageView.swift | 36 ++++++++++++++---- 8 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 MobileAcebook/Assets.xcassets/paw-logo.imageset/Contents.json create mode 100644 MobileAcebook/Assets.xcassets/paw-logo.imageset/pawprint.png create mode 100644 MobileAcebook/Assets.xcassets/paw-logo2.imageset/Contents.json create mode 100644 MobileAcebook/Assets.xcassets/paw-logo2.imageset/paw.png create mode 100644 MobileAcebook/Models/Post.swift diff --git a/.DS_Store b/.DS_Store index 7fa1be84d357e72af5ed943ecd6fe9ee00e303cc..aa44966853af418bd5abc15663ce08842a8d08f5 100644 GIT binary patch delta 53 zcmZoMXfc@JFUrcmz`)4BAi%(o!;s40$dC*qlQuK5EN5h7-Q33H$hi4GGY8AWhE1E< IIsWnk03q!R83}%aG!klb@WFlb-}s4K#(p4v6*sg8`7mz`(=c&EN^t;SDs$4G3}RTMtz0f~1dk qvjCGVqb3hS5Q8g&BZCWrFOb$_NM%UDYVG>XcFf`|o7p-3@&f?fUoQLr diff --git a/MobileAcebook.xcodeproj/project.pbxproj b/MobileAcebook.xcodeproj/project.pbxproj index 5506db3b..5e4a2f21 100644 --- a/MobileAcebook.xcodeproj/project.pbxproj +++ b/MobileAcebook.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 3D9855862BCE82EF007D584D /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9855852BCE82EF007D584D /* Post.swift */; }; AE5D85B02AC8A221009680C6 /* MobileAcebookApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85AF2AC8A221009680C6 /* MobileAcebookApp.swift */; }; AE5D85B42AC8A224009680C6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE5D85B32AC8A224009680C6 /* Assets.xcassets */; }; AE5D85B72AC8A224009680C6 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE5D85B62AC8A224009680C6 /* Preview Assets.xcassets */; }; @@ -39,6 +40,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 3D9855852BCE82EF007D584D /* Post.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = ""; }; AE5D85AC2AC8A221009680C6 /* MobileAcebook.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MobileAcebook.app; sourceTree = BUILT_PRODUCTS_DIR; }; AE5D85AF2AC8A221009680C6 /* MobileAcebookApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MobileAcebookApp.swift; sourceTree = ""; }; AE5D85B32AC8A224009680C6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -162,6 +164,7 @@ isa = PBXGroup; children = ( AE5D85E72AC9B29A009680C6 /* User.swift */, + 3D9855852BCE82EF007D584D /* Post.swift */, ); path = Models; sourceTree = ""; @@ -307,6 +310,7 @@ AE5D85E12AC9AFA9009680C6 /* AuthenticationService.swift in Sources */, AE5D85E62AC9B077009680C6 /* AuthenticationServiceProtocol.swift in Sources */, AE5D85B02AC8A221009680C6 /* MobileAcebookApp.swift in Sources */, + 3D9855862BCE82EF007D584D /* Post.swift in Sources */, AE5D85E82AC9B29A009680C6 /* User.swift in Sources */, AE5D85DA2AC8A337009680C6 /* WelcomePageView.swift in Sources */, ); diff --git a/MobileAcebook/Assets.xcassets/paw-logo.imageset/Contents.json b/MobileAcebook/Assets.xcassets/paw-logo.imageset/Contents.json new file mode 100644 index 00000000..7ce02f14 --- /dev/null +++ b/MobileAcebook/Assets.xcassets/paw-logo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "pawprint.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MobileAcebook/Assets.xcassets/paw-logo.imageset/pawprint.png b/MobileAcebook/Assets.xcassets/paw-logo.imageset/pawprint.png new file mode 100644 index 0000000000000000000000000000000000000000..cefb2dffa460653eb0db59c25426343430000848 GIT binary patch literal 25412 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 b($eOI<&J%_qSoNL3k112dtz%3;&1*BBN(9d literal 0 HcmV?d00001 diff --git a/MobileAcebook/Assets.xcassets/paw-logo2.imageset/Contents.json b/MobileAcebook/Assets.xcassets/paw-logo2.imageset/Contents.json new file mode 100644 index 00000000..31e7613a --- /dev/null +++ b/MobileAcebook/Assets.xcassets/paw-logo2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "paw.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MobileAcebook/Assets.xcassets/paw-logo2.imageset/paw.png b/MobileAcebook/Assets.xcassets/paw-logo2.imageset/paw.png new file mode 100644 index 0000000000000000000000000000000000000000..537087f38c8058262607d17f41256f403cedaa2c GIT binary patch literal 21003 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 WRk~f>>;?)s0{eC!z|h?Y$^QXec6fpS literal 0 HcmV?d00001 diff --git a/MobileAcebook/Models/Post.swift b/MobileAcebook/Models/Post.swift new file mode 100644 index 00000000..4e404a90 --- /dev/null +++ b/MobileAcebook/Models/Post.swift @@ -0,0 +1,15 @@ +// +// Post.swift +// MobileAcebook +// +// Created by Jess Todd on 16/04/2024. +// + +import Foundation + +public struct Post { + let message: String + let date: String + let user: String + let profilePicture: String +} diff --git a/MobileAcebook/WelcomePageView.swift b/MobileAcebook/WelcomePageView.swift index 96006af9..56326e90 100644 --- a/MobileAcebook/WelcomePageView.swift +++ b/MobileAcebook/WelcomePageView.swift @@ -13,24 +13,46 @@ struct WelcomePageView: View { VStack { Spacer() - Text("Welcome to Acebook!") + Text("Welcome to\n Pawbook!") .font(.largeTitle) - .padding(.bottom, 20) + .padding(.bottom, 25) .accessibilityIdentifier("welcomeText") + .multilineTextAlignment(.center) + .foregroundColor(Color(red: 0.50, green: 0.71, blue: 0.71)) + .bold() Spacer() - - Image("makers-logo") + + + Image("paw-logo") .resizable() .scaledToFit() - .frame(width: 200, height: 200) - .accessibilityIdentifier("makers-logo") + .frame(width: 130, height: 120) + .accessibilityIdentifier("paw-logo") Spacer() - + + + Button("Login") { + // TODO: login logic + } + .frame(width: 100) + .buttonStyle(.bordered) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) + .accessibilityIdentifier("loginButton") + + + Button("Sign Up") { // TODO: sign up logic } + .frame(width: 100) + .buttonStyle(.bordered) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) .accessibilityIdentifier("signUpButton") Spacer() From 32e21a907e8f699e5ae785cf21e9eb52806130db Mon Sep 17 00:00:00 2001 From: Maria Basia Date: Tue, 16 Apr 2024 14:34:01 +0100 Subject: [PATCH 05/26] .DS_Store file added to .gitignore file --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 1 + .../Services/AuthenticationService.swift | 4 ++++ 3 files changed, 5 insertions(+) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index aa44966853af418bd5abc15663ce08842a8d08f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!Ab)$5Pex&sEANR(2I~S5d4F+tcM;vsds5BqAsjh1&@38cli5 zw~KQ$+_5_>?_WdT!?&o}VC!~wf5&VV!E4E!+$ShGb2 zJBDtZ0cXG&STG>phe#DH6Sju>>7dao0I^563fpp*keHaTOxPOo2_;x4(LzJIVgw7P zKc;bI!q(8j5p-teNi&CZLkT)N{ZWS_l!k7d0cT*9fi3F}rT(9-zyGfWdCwVe2L2TT zp;uj0BQ7b`*3ROj)<)_zRYb Date: Tue, 16 Apr 2024 14:45:44 +0100 Subject: [PATCH 06/26] deleted .DS_Store file and removed not needed comments --- MobileAcebook/Services/AuthenticationService.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MobileAcebook/Services/AuthenticationService.swift b/MobileAcebook/Services/AuthenticationService.swift index f8ad4f16..02b635e9 100644 --- a/MobileAcebook/Services/AuthenticationService.swift +++ b/MobileAcebook/Services/AuthenticationService.swift @@ -21,7 +21,7 @@ class AuthenticationService: AuthenticationServiceProtocol { urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") let body = user - urlRequest.httpBody = try? JSONEncoder().encode(user) //JSONSerialization.data(withJSONObject: body, options: .fragmentsAllowed) + urlRequest.httpBody = try? JSONEncoder().encode(user) let task = URLSession.shared.dataTask(with : urlRequest) {data, response, error in guard let data = data else {return} do { From 787e45266672e738cd19813b51875c0a3b2daff4 Mon Sep 17 00:00:00 2001 From: George Paul Date: Tue, 16 Apr 2024 15:11:13 +0100 Subject: [PATCH 07/26] removed DS_Store added DS_Store to gitignore to avoid future pushes --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 1 + .../xcshareddata/WorkspaceSettings.xcsettings | 5 +++++ 3 files changed, 6 insertions(+) delete mode 100644 .DS_Store create mode 100644 MobileAcebook.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index ef9d0d31efdf5d6caf352af0c06d104a5119f297..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO-sW-5Pch~w1`kd(2I~?Q1Bnbk{o*Q;>W$T5m6%%tKczr|AYV2lfIcg!iBcRwr2<)SEMHMvFHF>&&#rjt4Bufzne+zBOe?uJJ^v31vCduy@n zZ(zG5%L>m}wKzUn90waXt}sInPju7b+2%Wo9z}aZ?r-3|rojm3$e2wza>iLdAaA~- zR@7A^fte{_3YY@FssPVyvEi;qi>81nU<#}iknclG7fb?H9`)0~pjQCmfN3?hsS8&O=gXOoL%$?o<B!^>BfD@zaXLElv37?`JX$mbOo65X zTmI)*&i}0c{@*OJU#5U5@UIkbgY+Vua!TQB?MzP2+L%74i%GxA^8fiDExY3Bd{ diff --git a/.gitignore b/.gitignore index 166face2..4b1e6d9e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ *.xcworkspace/xcuserdata/ DerivedData/ build/ +.DS_Store \ No newline at end of file diff --git a/MobileAcebook.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/MobileAcebook.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..0c67376e --- /dev/null +++ b/MobileAcebook.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,5 @@ + + + + + From 490ce944be1b239a9b76f344660ba641350e039f Mon Sep 17 00:00:00 2001 From: Jess Date: Tue, 16 Apr 2024 15:43:42 +0100 Subject: [PATCH 08/26] playing around with button sizes --- .../makers-logo.imageset/Contents.json | 21 ---------- .../makers-logo.imageset/makers-logo.png | Bin 13280 -> 0 bytes .../paw-logo.imageset/Contents.json | 2 +- .../paw-logo.imageset/paw (1).png | Bin 0 -> 26012 bytes .../paw-logo.imageset/pawprint.png | Bin 25412 -> 0 bytes .../paw-logo2.imageset/Contents.json | 21 ---------- .../paw-logo2.imageset/paw.png | Bin 21003 -> 0 bytes MobileAcebook/WelcomePageView.swift | 38 ++++++++---------- 8 files changed, 18 insertions(+), 64 deletions(-) delete mode 100644 MobileAcebook/Assets.xcassets/makers-logo.imageset/Contents.json delete mode 100644 MobileAcebook/Assets.xcassets/makers-logo.imageset/makers-logo.png create mode 100644 MobileAcebook/Assets.xcassets/paw-logo.imageset/paw (1).png delete mode 100644 MobileAcebook/Assets.xcassets/paw-logo.imageset/pawprint.png delete mode 100644 MobileAcebook/Assets.xcassets/paw-logo2.imageset/Contents.json delete mode 100644 MobileAcebook/Assets.xcassets/paw-logo2.imageset/paw.png diff --git a/MobileAcebook/Assets.xcassets/makers-logo.imageset/Contents.json b/MobileAcebook/Assets.xcassets/makers-logo.imageset/Contents.json deleted file mode 100644 index 216c5e2c..00000000 --- a/MobileAcebook/Assets.xcassets/makers-logo.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "makers-logo.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/MobileAcebook/Assets.xcassets/makers-logo.imageset/makers-logo.png b/MobileAcebook/Assets.xcassets/makers-logo.imageset/makers-logo.png deleted file mode 100644 index 8e9844cb6daab61d57384dfa4835275caa12e4b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13280 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 YGPM^I#Stq><1b7}PF=QI`c3fv0P2|{bN~PV diff --git a/MobileAcebook/Assets.xcassets/paw-logo.imageset/Contents.json b/MobileAcebook/Assets.xcassets/paw-logo.imageset/Contents.json index 7ce02f14..22adbe44 100644 --- a/MobileAcebook/Assets.xcassets/paw-logo.imageset/Contents.json +++ b/MobileAcebook/Assets.xcassets/paw-logo.imageset/Contents.json @@ -5,7 +5,7 @@ "scale" : "1x" }, { - "filename" : "pawprint.png", + "filename" : "paw (1).png", "idiom" : "universal", "scale" : "2x" }, diff --git a/MobileAcebook/Assets.xcassets/paw-logo.imageset/paw (1).png b/MobileAcebook/Assets.xcassets/paw-logo.imageset/paw (1).png new file mode 100644 index 0000000000000000000000000000000000000000..d903848247336087edb14cfda5fcd611870c2163 GIT binary patch literal 26012 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 B5`+K% literal 0 HcmV?d00001 diff --git a/MobileAcebook/Assets.xcassets/paw-logo.imageset/pawprint.png b/MobileAcebook/Assets.xcassets/paw-logo.imageset/pawprint.png deleted file mode 100644 index cefb2dffa460653eb0db59c25426343430000848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25412 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 b($eOI<&J%_qSoNL3k112dtz%3;&1*BBN(9d diff --git a/MobileAcebook/Assets.xcassets/paw-logo2.imageset/Contents.json b/MobileAcebook/Assets.xcassets/paw-logo2.imageset/Contents.json deleted file mode 100644 index 31e7613a..00000000 --- a/MobileAcebook/Assets.xcassets/paw-logo2.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "paw.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/MobileAcebook/Assets.xcassets/paw-logo2.imageset/paw.png b/MobileAcebook/Assets.xcassets/paw-logo2.imageset/paw.png deleted file mode 100644 index 537087f38c8058262607d17f41256f403cedaa2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21003 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 WRk~f>>;?)s0{eC!z|h?Y$^QXec6fpS diff --git a/MobileAcebook/WelcomePageView.swift b/MobileAcebook/WelcomePageView.swift index 56326e90..28ba7c8e 100644 --- a/MobileAcebook/WelcomePageView.swift +++ b/MobileAcebook/WelcomePageView.swift @@ -20,41 +20,37 @@ struct WelcomePageView: View { .multilineTextAlignment(.center) .foregroundColor(Color(red: 0.50, green: 0.71, blue: 0.71)) .bold() - Spacer() - Image("paw-logo") .resizable() .scaledToFit() - .frame(width: 130, height: 120) + .frame(width: 130, height: 130) .accessibilityIdentifier("paw-logo") - Spacer() - Button("Login") { // TODO: login logic } - .frame(width: 100) - .buttonStyle(.bordered) - .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) - .foregroundColor(.white) - .cornerRadius(10) - .accessibilityIdentifier("loginButton") - - - + .frame(width: 100) + .controlSize(.large) + .buttonStyle(.bordered) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) + .accessibilityIdentifier("loginButton") + Button("Sign Up") { // TODO: sign up logic } - .frame(width: 100) - .buttonStyle(.bordered) - .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) - .foregroundColor(.white) - .cornerRadius(10) - .accessibilityIdentifier("signUpButton") - + .frame(width: 100) + .controlSize(.large) + .buttonStyle(.bordered) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) + .accessibilityIdentifier("signUpButton") + Spacer() } } From 8cacb5f552d0397a52b372cd94e74156e8140d71 Mon Sep 17 00:00:00 2001 From: Venera Date: Tue, 16 Apr 2024 15:55:18 +0100 Subject: [PATCH 09/26] DSSTOREREMOVED --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index aa44966853af418bd5abc15663ce08842a8d08f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!Ab)$5Pex&sEANR(2I~S5d4F+tcM;vsds5BqAsjh1&@38cli5 zw~KQ$+_5_>?_WdT!?&o}VC!~wf5&VV!E4E!+$ShGb2 zJBDtZ0cXG&STG>phe#DH6Sju>>7dao0I^563fpp*keHaTOxPOo2_;x4(LzJIVgw7P zKc;bI!q(8j5p-teNi&CZLkT)N{ZWS_l!k7d0cT*9fi3F}rT(9-zyGfWdCwVe2L2TT zp;uj0BQ7b`*3ROj)<)_zRYb Date: Tue, 16 Apr 2024 15:55:39 +0100 Subject: [PATCH 10/26] deleted DS_Store --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index aa44966853af418bd5abc15663ce08842a8d08f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!Ab)$5Pex&sEANR(2I~S5d4F+tcM;vsds5BqAsjh1&@38cli5 zw~KQ$+_5_>?_WdT!?&o}VC!~wf5&VV!E4E!+$ShGb2 zJBDtZ0cXG&STG>phe#DH6Sju>>7dao0I^563fpp*keHaTOxPOo2_;x4(LzJIVgw7P zKc;bI!q(8j5p-teNi&CZLkT)N{ZWS_l!k7d0cT*9fi3F}rT(9-zyGfWdCwVe2L2TT zp;uj0BQ7b`*3ROj)<)_zRYb Date: Tue, 16 Apr 2024 17:04:50 +0100 Subject: [PATCH 11/26] let's try --- MobileAcebook.xcodeproj/project.pbxproj | 4 + MobileAcebook/LoginPageView.swift | 6 +- MobileAcebook/SignUpPageView.swift | 101 ++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 MobileAcebook/SignUpPageView.swift diff --git a/MobileAcebook.xcodeproj/project.pbxproj b/MobileAcebook.xcodeproj/project.pbxproj index 9eb5bc3e..31da6ef3 100644 --- a/MobileAcebook.xcodeproj/project.pbxproj +++ b/MobileAcebook.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 0F81A0C52BCE82C200AED673 /* LoginPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F81A0C42BCE82C200AED673 /* LoginPageView.swift */; }; + 0F81A0C72BCED6FD00AED673 /* SignUpPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F81A0C62BCED6FD00AED673 /* SignUpPageView.swift */; }; 3D9855862BCE82EF007D584D /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9855852BCE82EF007D584D /* Post.swift */; }; AE5D85B02AC8A221009680C6 /* MobileAcebookApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85AF2AC8A221009680C6 /* MobileAcebookApp.swift */; }; AE5D85B42AC8A224009680C6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE5D85B32AC8A224009680C6 /* Assets.xcassets */; }; @@ -42,6 +43,7 @@ /* Begin PBXFileReference section */ 0F81A0C42BCE82C200AED673 /* LoginPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginPageView.swift; sourceTree = ""; }; + 0F81A0C62BCED6FD00AED673 /* SignUpPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpPageView.swift; sourceTree = ""; }; 3D9855852BCE82EF007D584D /* Post.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = ""; }; AE5D85AC2AC8A221009680C6 /* MobileAcebook.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MobileAcebook.app; sourceTree = BUILT_PRODUCTS_DIR; }; AE5D85AF2AC8A221009680C6 /* MobileAcebookApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MobileAcebookApp.swift; sourceTree = ""; }; @@ -116,6 +118,7 @@ AE5D85B52AC8A224009680C6 /* Preview Content */, AE5D85D92AC8A337009680C6 /* WelcomePageView.swift */, 0F81A0C42BCE82C200AED673 /* LoginPageView.swift */, + 0F81A0C62BCED6FD00AED673 /* SignUpPageView.swift */, ); path = MobileAcebook; sourceTree = ""; @@ -315,6 +318,7 @@ AE5D85B02AC8A221009680C6 /* MobileAcebookApp.swift in Sources */, 3D9855862BCE82EF007D584D /* Post.swift in Sources */, AE5D85E82AC9B29A009680C6 /* User.swift in Sources */, + 0F81A0C72BCED6FD00AED673 /* SignUpPageView.swift in Sources */, AE5D85DA2AC8A337009680C6 /* WelcomePageView.swift in Sources */, 0F81A0C52BCE82C200AED673 /* LoginPageView.swift in Sources */, ); diff --git a/MobileAcebook/LoginPageView.swift b/MobileAcebook/LoginPageView.swift index 7723efb7..983be4e7 100644 --- a/MobileAcebook/LoginPageView.swift +++ b/MobileAcebook/LoginPageView.swift @@ -20,19 +20,20 @@ struct LoginPageView: View { .font(.largeTitle) .bold() Spacer() - Text("Username") + Text("Username") .frame(maxWidth: 220, alignment: .topLeading) + TextField("", text: $username) .frame(width: 220, height: 40) .textFieldStyle(.roundedBorder) .multilineTextAlignment(.center) .accessibilityIdentifier("loginUsername") Text("Password") + .frame(maxWidth: 220, alignment: .topLeading) TextField("", text: $password) .frame(width: 220, height: 40) .textFieldStyle(.roundedBorder) .multilineTextAlignment(.center) .accessibilityIdentifier("loginPassword") - .padding() Button("Submit") { guard !username.isEmpty && !password.isEmpty else { return } } @@ -40,6 +41,7 @@ struct LoginPageView: View { .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) .foregroundColor(.white) .cornerRadius(5) + .padding() Spacer() Spacer() diff --git a/MobileAcebook/SignUpPageView.swift b/MobileAcebook/SignUpPageView.swift new file mode 100644 index 00000000..d827b8e5 --- /dev/null +++ b/MobileAcebook/SignUpPageView.swift @@ -0,0 +1,101 @@ +// +// SignUpPageView.swift +// MobileAcebook +// +// Created by Venera Zhargakova on 16/04/2024. +// + +import Foundation + +import SwiftUI +struct SignUpPageView: View { + @State private var email = "" + @State private var fullName = "" + @State private var password = "" + @State private var confirmPassword = "" + //errors: + @State private var emailError = "" + //let authService: AuthenticationServiceProtocol + var body: some View { + NavigationView { + VStack(spacing: 30) { + Text("Sign Up") + .font(.largeTitle) + .fontWeight(/*@START_MENU_TOKEN@*/.bold/*@END_MENU_TOKEN@*/) + VStack(spacing:0) { + Text("Email Address") + .multilineTextAlignment(.leading) + .frame(maxWidth: .infinity, alignment: .topLeading) + .padding() + TextField("", text: $email) + .font(.title3) + .padding() + .frame(maxWidth: 350) + //sure + .border(Color.gray) + Text("Full Name") + .multilineTextAlignment(.leading) + .frame(maxWidth: .infinity, alignment: .topLeading) + .padding() + TextField("Enter your full name", text: $fullName) + .font(.title3) + .padding() + .frame(maxWidth: .infinity) + .border(Color.gray) + Text("Password") + .multilineTextAlignment(.leading) + .frame(maxWidth: .infinity, alignment: .topLeading) + .padding() + TextField("Enter a password", text: $password) + .font(.title3) + .padding() + .frame(maxWidth: .infinity) + .border(Color.gray) + Text("Confirm Password") + .multilineTextAlignment(.leading) + .frame(maxWidth: .infinity, alignment: .topLeading) + .padding() + TextField("Enter a password", text: $confirmPassword) + .font(.title3) + .padding() + .frame(maxWidth: .infinity) + .border(Color.gray) + Text("Image upload placeholder") + .multilineTextAlignment(.leading) + .frame(maxWidth: .infinity, alignment: .topLeading) + .padding() + //placeholder for image upload - format to be defined. + VStack{ + Button("Sign Up"){ + //add logic here + } + .frame(width: 250) + .padding() + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(50) + } + .padding(.top, 40) + Spacer() + HStack(spacing:3){ + Text("Already have an account?") + Text("Login here") + .fontWeight(.bold) + //add navigation to login + } + .padding() + } + } + } + } +} +#Preview { + SignUpPageView() +} + + + + + + + From 0a2b0569a18adb16794e2ac034230af78d729572 Mon Sep 17 00:00:00 2001 From: Venera Date: Wed, 17 Apr 2024 12:04:03 +0100 Subject: [PATCH 12/26] login and signup style --- MobileAcebook/LoginPageView.swift | 44 +++++++++++++------- MobileAcebook/SignUpPageView.swift | 66 +++++++++++++----------------- 2 files changed, 57 insertions(+), 53 deletions(-) diff --git a/MobileAcebook/LoginPageView.swift b/MobileAcebook/LoginPageView.swift index 983be4e7..99a56260 100644 --- a/MobileAcebook/LoginPageView.swift +++ b/MobileAcebook/LoginPageView.swift @@ -20,27 +20,41 @@ struct LoginPageView: View { .font(.largeTitle) .bold() Spacer() - Text("Username") .frame(maxWidth: 220, alignment: .topLeading) + VStack { + Text("Username") .frame(maxWidth: 250, alignment: .topLeading) + + TextField("", text: $username) + .frame(width: 250, height: 40) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray) + ) + .multilineTextAlignment(.center) + .accessibilityIdentifier("loginUsername") + }.padding() + + VStack { + Text("Password") + .frame(maxWidth: 250, alignment: .topLeading) + + TextField("", text: $password) + .frame(width: 250, height: 40) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray) + ) + .multilineTextAlignment(.center) + .accessibilityIdentifier("loginPassword") + }.padding() + - TextField("", text: $username) - .frame(width: 220, height: 40) - .textFieldStyle(.roundedBorder) - .multilineTextAlignment(.center) - .accessibilityIdentifier("loginUsername") - Text("Password") - .frame(maxWidth: 220, alignment: .topLeading) - TextField("", text: $password) - .frame(width: 220, height: 40) - .textFieldStyle(.roundedBorder) - .multilineTextAlignment(.center) - .accessibilityIdentifier("loginPassword") Button("Submit") { guard !username.isEmpty && !password.isEmpty else { return } } - .frame(width: 220, height: 40) + .frame(width: 250, height: 40) .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) .foregroundColor(.white) - .cornerRadius(5) + .cornerRadius(10) .padding() Spacer() diff --git a/MobileAcebook/SignUpPageView.swift b/MobileAcebook/SignUpPageView.swift index d827b8e5..d6015215 100644 --- a/MobileAcebook/SignUpPageView.swift +++ b/MobileAcebook/SignUpPageView.swift @@ -19,61 +19,51 @@ struct SignUpPageView: View { var body: some View { NavigationView { VStack(spacing: 30) { + Spacer() + Spacer() Text("Sign Up") .font(.largeTitle) .fontWeight(/*@START_MENU_TOKEN@*/.bold/*@END_MENU_TOKEN@*/) VStack(spacing:0) { Text("Email Address") - .multilineTextAlignment(.leading) - .frame(maxWidth: .infinity, alignment: .topLeading) + .frame(maxWidth: 250, alignment: .topLeading) .padding() TextField("", text: $email) - .font(.title3) - .padding() - .frame(maxWidth: 350) - //sure - .border(Color.gray) + .frame(width: 250, height: 40) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray) + ) + .accessibilityIdentifier("email") Text("Full Name") - .multilineTextAlignment(.leading) - .frame(maxWidth: .infinity, alignment: .topLeading) - .padding() - TextField("Enter your full name", text: $fullName) - .font(.title3) + .frame(maxWidth: 250, alignment: .topLeading) .padding() - .frame(maxWidth: .infinity) - .border(Color.gray) + TextField("", text: $fullName) + .frame(width: 250, height: 40) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray) + ) + .accessibilityIdentifier("Full Name") Text("Password") - .multilineTextAlignment(.leading) - .frame(maxWidth: .infinity, alignment: .topLeading) - .padding() - TextField("Enter a password", text: $password) - .font(.title3) - .padding() - .frame(maxWidth: .infinity) - .border(Color.gray) - Text("Confirm Password") - .multilineTextAlignment(.leading) - .frame(maxWidth: .infinity, alignment: .topLeading) + .frame(maxWidth: 250, alignment: .topLeading) .padding() - TextField("Enter a password", text: $confirmPassword) - .font(.title3) - .padding() - .frame(maxWidth: .infinity) - .border(Color.gray) - Text("Image upload placeholder") - .multilineTextAlignment(.leading) - .frame(maxWidth: .infinity, alignment: .topLeading) - .padding() - //placeholder for image upload - format to be defined. + SecureField("", text: $password) + .frame(width: 250, height: 40) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray) + ) + .accessibilityIdentifier("Password") + VStack{ Button("Sign Up"){ //add logic here } - .frame(width: 250) - .padding() + .frame(width: 250, height: 40) .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) .foregroundColor(.white) - .cornerRadius(50) + .cornerRadius(10) } .padding(.top, 40) Spacer() From 6eb5044726e20de9c392e233fbd11b6369c2e1b6 Mon Sep 17 00:00:00 2001 From: ohmygois Date: Wed, 17 Apr 2024 12:08:45 +0100 Subject: [PATCH 13/26] first logic changes --- MobileAcebook/SignUpPageView.swift | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/MobileAcebook/SignUpPageView.swift b/MobileAcebook/SignUpPageView.swift index d827b8e5..717a01cb 100644 --- a/MobileAcebook/SignUpPageView.swift +++ b/MobileAcebook/SignUpPageView.swift @@ -12,10 +12,14 @@ struct SignUpPageView: View { @State private var email = "" @State private var fullName = "" @State private var password = "" - @State private var confirmPassword = "" //errors: @State private var emailError = "" - //let authService: AuthenticationServiceProtocol + + @State private var signupErrorMessage = "" + @State private var isSignupSuccess = false + + let authService: AuthenticationServiceProtocol + var body: some View { NavigationView { VStack(spacing: 30) { @@ -67,6 +71,20 @@ struct SignUpPageView: View { //placeholder for image upload - format to be defined. VStack{ Button("Sign Up"){ + if $email.isValidEmail && $password.isValidPassword && password == confirmPassword { + // Create a new user object + let newUser = User(imgUrl: "", email: email, password: password, username: fullName) + + // Call signUp method of AuthenticationService + let success = authService.signUp(user: newUser) + + if success { + // Handle successful signup + isSignupSuccess = true + } else { + // Handle signup failure + signupErrorMessage = "Unable to sign up. Please try again." + } //add logic here } .frame(width: 250) @@ -74,6 +92,14 @@ struct SignUpPageView: View { .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) .foregroundColor(.white) .cornerRadius(50) + + // Error messages... + Text(signupErrorMessage) + .foregroundColor(.red) + + // Navigation to login page after successful signup + NavigationLink(destination: LoginPageView(), isActive: $isSignupSuccess) { + EmptyView() } .padding(.top, 40) Spacer() From 9219017cc60c056b242e654e761f1548bd136877 Mon Sep 17 00:00:00 2001 From: Venera Date: Wed, 17 Apr 2024 12:19:02 +0100 Subject: [PATCH 14/26] signup page final --- MobileAcebook/LoginPageView.swift | 1 + MobileAcebook/SignUpPageView.swift | 41 ++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/MobileAcebook/LoginPageView.swift b/MobileAcebook/LoginPageView.swift index 99a56260..5ce6b2ba 100644 --- a/MobileAcebook/LoginPageView.swift +++ b/MobileAcebook/LoginPageView.swift @@ -10,6 +10,7 @@ import SwiftUI struct LoginPageView: View { @State private var username = "" @State private var password = "" + @State var isShowingPassword: Bool = false var body: some View { NavigationView { diff --git a/MobileAcebook/SignUpPageView.swift b/MobileAcebook/SignUpPageView.swift index d6015215..944d5ab4 100644 --- a/MobileAcebook/SignUpPageView.swift +++ b/MobileAcebook/SignUpPageView.swift @@ -12,7 +12,8 @@ struct SignUpPageView: View { @State private var email = "" @State private var fullName = "" @State private var password = "" - @State private var confirmPassword = "" + @State var isShowingPassword: Bool = false + //errors: @State private var emailError = "" //let authService: AuthenticationServiceProtocol @@ -30,6 +31,7 @@ struct SignUpPageView: View { .padding() TextField("", text: $email) .frame(width: 250, height: 40) + .multilineTextAlignment(.center) .overlay( RoundedRectangle(cornerRadius: 10) .stroke(Color.gray) @@ -40,6 +42,7 @@ struct SignUpPageView: View { .padding() TextField("", text: $fullName) .frame(width: 250, height: 40) + .multilineTextAlignment(.center) .overlay( RoundedRectangle(cornerRadius: 10) .stroke(Color.gray) @@ -48,13 +51,35 @@ struct SignUpPageView: View { Text("Password") .frame(maxWidth: 250, alignment: .topLeading) .padding() - SecureField("", text: $password) - .frame(width: 250, height: 40) - .overlay( - RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray) - ) - .accessibilityIdentifier("Password") + VStack { + Group { + if isShowingPassword { + TextField("", text: $password) + .frame(width: 250, height: 40) + .multilineTextAlignment(.center) + .overlay(RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray)) + }else { + SecureField("", text: $password) + .frame(width: 250, height: 40) + .multilineTextAlignment(.center) + .overlay(RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray)) + } + } + .disableAutocorrection(true) + .autocapitalization(.none) + + Button { + isShowingPassword.toggle() + } label: { + if isShowingPassword { + Text("Hide password") + } else { + Text("Show password") + } + }.padding() + } VStack{ Button("Sign Up"){ From ba9a4f9e649a44f5a89b9181d8bb3d85bc4b379c Mon Sep 17 00:00:00 2001 From: Venera Date: Wed, 17 Apr 2024 12:31:43 +0100 Subject: [PATCH 15/26] all pages styles alligned --- MobileAcebook/LoginPageView.swift | 43 +++++++++++++++++++++++------ MobileAcebook/WelcomePageView.swift | 14 ++++------ 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/MobileAcebook/LoginPageView.swift b/MobileAcebook/LoginPageView.swift index 5ce6b2ba..0126a2b0 100644 --- a/MobileAcebook/LoginPageView.swift +++ b/MobileAcebook/LoginPageView.swift @@ -33,20 +33,37 @@ struct LoginPageView: View { .multilineTextAlignment(.center) .accessibilityIdentifier("loginUsername") }.padding() - VStack { Text("Password") .frame(maxWidth: 250, alignment: .topLeading) - - TextField("", text: $password) + Group { + if isShowingPassword { + TextField("", text: $password) + .frame(width: 250, height: 40) + .multilineTextAlignment(.center) + .overlay(RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray)) + }else { + SecureField("", text: $password) .frame(width: 250, height: 40) - .overlay( - RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray) - ) .multilineTextAlignment(.center) - .accessibilityIdentifier("loginPassword") - }.padding() + .overlay(RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray)) + } + } + .disableAutocorrection(true) + .autocapitalization(.none) + + Button { + isShowingPassword.toggle() + } label: { + if isShowingPassword { + Text("Hide password") + } else { + Text("Show password") + } + }.padding() + } Button("Submit") { @@ -60,6 +77,14 @@ struct LoginPageView: View { Spacer() Spacer() + Spacer() + HStack(spacing:3){ + Text("Don't have an account?") + Text("Sign up here") + .fontWeight(.bold) + //add navigation to login + } + .padding() } } diff --git a/MobileAcebook/WelcomePageView.swift b/MobileAcebook/WelcomePageView.swift index 28ba7c8e..b943f09c 100644 --- a/MobileAcebook/WelcomePageView.swift +++ b/MobileAcebook/WelcomePageView.swift @@ -32,9 +32,7 @@ struct WelcomePageView: View { Button("Login") { // TODO: login logic } - .frame(width: 100) - .controlSize(.large) - .buttonStyle(.bordered) + .frame(width: 250, height: 40) .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) .foregroundColor(.white) .cornerRadius(10) @@ -43,12 +41,10 @@ struct WelcomePageView: View { Button("Sign Up") { // TODO: sign up logic } - .frame(width: 100) - .controlSize(.large) - .buttonStyle(.bordered) - .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) - .foregroundColor(.white) - .cornerRadius(10) + .frame(width: 250, height: 40) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) .accessibilityIdentifier("signUpButton") Spacer() From 336f533dcf65a5cb396492083bb19fcfd2c589d5 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 17 Apr 2024 12:55:35 +0100 Subject: [PATCH 16/26] Create Post Service + assign :Encodable to Post [Model] - created Post Service file: with /POST request - /GET request to add later - slight modification to the Post model to assign Encodable type due to JSON data needing to be in encoded format --- MobileAcebook.xcodeproj/project.pbxproj | 4 ++ MobileAcebook/Models/Post.swift | 2 +- MobileAcebook/Services/PostService.swift | 58 ++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 MobileAcebook/Services/PostService.swift diff --git a/MobileAcebook.xcodeproj/project.pbxproj b/MobileAcebook.xcodeproj/project.pbxproj index 31da6ef3..8888098d 100644 --- a/MobileAcebook.xcodeproj/project.pbxproj +++ b/MobileAcebook.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ AE5D85E32AC9AFD2009680C6 /* MockAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85E22AC9AFD2009680C6 /* MockAuthenticationService.swift */; }; AE5D85E62AC9B077009680C6 /* AuthenticationServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85E52AC9B077009680C6 /* AuthenticationServiceProtocol.swift */; }; AE5D85E82AC9B29A009680C6 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85E72AC9B29A009680C6 /* User.swift */; }; + C1615B992BCFEF2800A7AB81 /* PostService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1615B982BCFEF2800A7AB81 /* PostService.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,6 +61,7 @@ AE5D85E22AC9AFD2009680C6 /* MockAuthenticationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAuthenticationService.swift; sourceTree = ""; }; AE5D85E52AC9B077009680C6 /* AuthenticationServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationServiceProtocol.swift; sourceTree = ""; }; AE5D85E72AC9B29A009680C6 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; + C1615B982BCFEF2800A7AB81 /* PostService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostService.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -154,6 +156,7 @@ isa = PBXGroup; children = ( AE5D85E02AC9AFA9009680C6 /* AuthenticationService.swift */, + C1615B982BCFEF2800A7AB81 /* PostService.swift */, ); path = Services; sourceTree = ""; @@ -320,6 +323,7 @@ AE5D85E82AC9B29A009680C6 /* User.swift in Sources */, 0F81A0C72BCED6FD00AED673 /* SignUpPageView.swift in Sources */, AE5D85DA2AC8A337009680C6 /* WelcomePageView.swift in Sources */, + C1615B992BCFEF2800A7AB81 /* PostService.swift in Sources */, 0F81A0C52BCE82C200AED673 /* LoginPageView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/MobileAcebook/Models/Post.swift b/MobileAcebook/Models/Post.swift index 4e404a90..ec1a3ad9 100644 --- a/MobileAcebook/Models/Post.swift +++ b/MobileAcebook/Models/Post.swift @@ -7,7 +7,7 @@ import Foundation -public struct Post { +public struct Post: Encodable { let message: String let date: String let user: String diff --git a/MobileAcebook/Services/PostService.swift b/MobileAcebook/Services/PostService.swift new file mode 100644 index 00000000..82ff278a --- /dev/null +++ b/MobileAcebook/Services/PostService.swift @@ -0,0 +1,58 @@ +// +// PostService.swift +// MobileAcebook +// +// Created by Bogdan Stăiculescu on 17/04/2024. +// + +import Foundation + +class postService { + + // response returned on succesful /POST request + struct Response: Codable { + // let message : String + let token: String + } + + + func createPost(post: Post, token: String, completion: @escaping ((String) -> Void)) -> Bool { + // defining URL to which we make the POST on the Backend + guard let url = URL(string: "http://localhost:3000/posts") else + {return false} + + // var that contains the URL request and content + var urlRequest = URLRequest(url: url) + // method of the createPost + urlRequest.httpMethod = "POST" + // value of the URL request that's being sent to backend [application/json] + urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + // also passing along Bearer and Token to show authorization + urlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") + + // defining the body of the HTTP request + let body = post + + urlRequest.httpBody = try? JSONEncoder().encode(body) + + // defining what we do with the response of our request + let task = URLSession.shared.dataTask(with: urlRequest) {data, response, error in + // ensures there is data that returns after making the request ELSE print error + guard let data = data else {return} + // if there is data + do { + let response = try JSONDecoder().decode(Response.self, from: data) + //print(response.token) + DispatchQueue.main.async { + completion(response.token) + } + print("Post Created") + } + catch { + print(error) + } + } + task.resume() + return true + } +} From 69892922a1bad227860c75a2aa0691aa1d8cc91c Mon Sep 17 00:00:00 2001 From: Maria Basia Date: Wed, 17 Apr 2024 14:31:18 +0100 Subject: [PATCH 17/26] login function and UserLogin model added --- MobileAcebook.xcodeproj/project.pbxproj | 4 ++++ MobileAcebook/Models/UserLogin.swift | 13 ++++++++++ .../Services/AuthenticationService.swift | 24 ++++++++++++++++++- 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 MobileAcebook/Models/UserLogin.swift diff --git a/MobileAcebook.xcodeproj/project.pbxproj b/MobileAcebook.xcodeproj/project.pbxproj index 31da6ef3..b5b7b6e7 100644 --- a/MobileAcebook.xcodeproj/project.pbxproj +++ b/MobileAcebook.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ AE5D85E32AC9AFD2009680C6 /* MockAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85E22AC9AFD2009680C6 /* MockAuthenticationService.swift */; }; AE5D85E62AC9B077009680C6 /* AuthenticationServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85E52AC9B077009680C6 /* AuthenticationServiceProtocol.swift */; }; AE5D85E82AC9B29A009680C6 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85E72AC9B29A009680C6 /* User.swift */; }; + D6070C072BD005F5003EFBE5 /* UserLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6070C062BD005F5003EFBE5 /* UserLogin.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,6 +61,7 @@ AE5D85E22AC9AFD2009680C6 /* MockAuthenticationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAuthenticationService.swift; sourceTree = ""; }; AE5D85E52AC9B077009680C6 /* AuthenticationServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationServiceProtocol.swift; sourceTree = ""; }; AE5D85E72AC9B29A009680C6 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; + D6070C062BD005F5003EFBE5 /* UserLogin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserLogin.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -171,6 +173,7 @@ children = ( AE5D85E72AC9B29A009680C6 /* User.swift */, 3D9855852BCE82EF007D584D /* Post.swift */, + D6070C062BD005F5003EFBE5 /* UserLogin.swift */, ); path = Models; sourceTree = ""; @@ -315,6 +318,7 @@ files = ( AE5D85E12AC9AFA9009680C6 /* AuthenticationService.swift in Sources */, AE5D85E62AC9B077009680C6 /* AuthenticationServiceProtocol.swift in Sources */, + D6070C072BD005F5003EFBE5 /* UserLogin.swift in Sources */, AE5D85B02AC8A221009680C6 /* MobileAcebookApp.swift in Sources */, 3D9855862BCE82EF007D584D /* Post.swift in Sources */, AE5D85E82AC9B29A009680C6 /* User.swift in Sources */, diff --git a/MobileAcebook/Models/UserLogin.swift b/MobileAcebook/Models/UserLogin.swift new file mode 100644 index 00000000..5e8dfbe9 --- /dev/null +++ b/MobileAcebook/Models/UserLogin.swift @@ -0,0 +1,13 @@ +// +// UserLogin.swift +// MobileAcebook +// +// Created by Maria Basia on 17/04/2024. +// + +import Foundation + +struct UserLogin: Encodable { + let email: String + let password: String +} diff --git a/MobileAcebook/Services/AuthenticationService.swift b/MobileAcebook/Services/AuthenticationService.swift index 02b635e9..295d2eff 100644 --- a/MobileAcebook/Services/AuthenticationService.swift +++ b/MobileAcebook/Services/AuthenticationService.swift @@ -37,7 +37,29 @@ class AuthenticationService: AuthenticationServiceProtocol { return true } - + func login(userLogin: UserLogin) -> Bool { + guard let url = URL(string: "http://localhost:3000/tokens") else {return false} + + var urlRequest = URLRequest(url: url) + urlRequest.httpMethod = "POST" + urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let body = userLogin + urlRequest.httpBody = try? JSONEncoder().encode(userLogin) + let task = URLSession.shared.dataTask(with : urlRequest) {data, response, error in + guard let data = data else {return} + do { + let response = try JSONSerialization.jsonObject(with: data, options: .allowFragments) + print("Valid user") + print(response) + } + catch { + print(error) + } + } + task.resume() + return true + } From 12d4847b55a123f30432b422d29d611d124a67cd Mon Sep 17 00:00:00 2001 From: Venera Date: Thu, 18 Apr 2024 09:57:46 +0100 Subject: [PATCH 18/26] some changes --- MobileAcebook/LoginPageView.swift | 7 +++++-- MobileAcebook/SignUpPageView.swift | 11 +++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/MobileAcebook/LoginPageView.swift b/MobileAcebook/LoginPageView.swift index 0126a2b0..32db62cb 100644 --- a/MobileAcebook/LoginPageView.swift +++ b/MobileAcebook/LoginPageView.swift @@ -80,8 +80,11 @@ struct LoginPageView: View { Spacer() HStack(spacing:3){ Text("Don't have an account?") - Text("Sign up here") - .fontWeight(.bold) + NavigationLink(destination: SignUpPageView()){ + Text("Sign up here") + .fontWeight(.bold) + } + //add navigation to login } .padding() diff --git a/MobileAcebook/SignUpPageView.swift b/MobileAcebook/SignUpPageView.swift index 944d5ab4..145d5f73 100644 --- a/MobileAcebook/SignUpPageView.swift +++ b/MobileAcebook/SignUpPageView.swift @@ -13,7 +13,7 @@ struct SignUpPageView: View { @State private var fullName = "" @State private var password = "" @State var isShowingPassword: Bool = false - + //errors: @State private var emailError = "" //let authService: AuthenticationServiceProtocol @@ -94,11 +94,10 @@ struct SignUpPageView: View { Spacer() HStack(spacing:3){ Text("Already have an account?") - Text("Login here") - .fontWeight(.bold) - //add navigation to login - } - .padding() + NavigationLink(destination: LoginPageView()){ + Text("Login here") + .fontWeight(.bold)} + } } } } From b0486fb3709ce1cf561710160ef778e64e547f94 Mon Sep 17 00:00:00 2001 From: Venera Date: Thu, 18 Apr 2024 10:35:53 +0100 Subject: [PATCH 19/26] welcome page links added --- MobileAcebook/WelcomePageView.swift | 78 ++++++++++++++--------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/MobileAcebook/WelcomePageView.swift b/MobileAcebook/WelcomePageView.swift index b943f09c..afa6ef75 100644 --- a/MobileAcebook/WelcomePageView.swift +++ b/MobileAcebook/WelcomePageView.swift @@ -9,48 +9,48 @@ import SwiftUI struct WelcomePageView: View { var body: some View { - ZStack { - VStack { - Spacer() - - Text("Welcome to\n Pawbook!") - .font(.largeTitle) - .padding(.bottom, 25) - .accessibilityIdentifier("welcomeText") - .multilineTextAlignment(.center) - .foregroundColor(Color(red: 0.50, green: 0.71, blue: 0.71)) - .bold() - Spacer() - - Image("paw-logo") - .resizable() - .scaledToFit() - .frame(width: 130, height: 130) - .accessibilityIdentifier("paw-logo") - Spacer() - - Button("Login") { - // TODO: login logic - } - .frame(width: 250, height: 40) - .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) - .foregroundColor(.white) - .cornerRadius(10) - .accessibilityIdentifier("loginButton") + NavigationView { + ZStack { + VStack { + Spacer() - Button("Sign Up") { - // TODO: sign up logic - } - .frame(width: 250, height: 40) - .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) - .foregroundColor(.white) - .cornerRadius(10) - .accessibilityIdentifier("signUpButton") + Text("Welcome to\n Pawbook!") + .font(.largeTitle) + .padding(.bottom, 25) + .accessibilityIdentifier("welcomeText") + .multilineTextAlignment(.center) + .foregroundColor(Color(red: 0.50, green: 0.71, blue: 0.71)) + .bold() + Spacer() + + Image("paw-logo") + .resizable() + .scaledToFit() + .frame(width: 130, height: 130) + .accessibilityIdentifier("paw-logo") + Spacer() - Spacer() + NavigationLink(destination: LoginPageView()){ + Text("Login") + .frame(width: 250, height: 40) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) + .accessibilityIdentifier("loginButton") + } + NavigationLink(destination: SignUpPageView()){ + Text("Sign Up") + .frame(width: 250, height: 40) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) + .accessibilityIdentifier("signUpButton") + } + + Spacer() + } } - } - } + }} } struct WelcomePageView_Previews: PreviewProvider { From fc2b2045cda146d7cc2f3458f7fa7410d87ee5be Mon Sep 17 00:00:00 2001 From: Venera Date: Thu, 18 Apr 2024 10:49:17 +0100 Subject: [PATCH 20/26] autocapitalization removed --- MobileAcebook/LoginPageView.swift | 1 + MobileAcebook/SignUpPageView.swift | 2 ++ 2 files changed, 3 insertions(+) diff --git a/MobileAcebook/LoginPageView.swift b/MobileAcebook/LoginPageView.swift index 32db62cb..ac8ebd30 100644 --- a/MobileAcebook/LoginPageView.swift +++ b/MobileAcebook/LoginPageView.swift @@ -31,6 +31,7 @@ struct LoginPageView: View { .stroke(Color.gray) ) .multilineTextAlignment(.center) + . autocapitalization(. none) .accessibilityIdentifier("loginUsername") }.padding() VStack { diff --git a/MobileAcebook/SignUpPageView.swift b/MobileAcebook/SignUpPageView.swift index 145d5f73..d29faf42 100644 --- a/MobileAcebook/SignUpPageView.swift +++ b/MobileAcebook/SignUpPageView.swift @@ -36,6 +36,7 @@ struct SignUpPageView: View { RoundedRectangle(cornerRadius: 10) .stroke(Color.gray) ) + .autocapitalization(. none) .accessibilityIdentifier("email") Text("Full Name") .frame(maxWidth: 250, alignment: .topLeading) @@ -47,6 +48,7 @@ struct SignUpPageView: View { RoundedRectangle(cornerRadius: 10) .stroke(Color.gray) ) + .autocapitalization(. none) .accessibilityIdentifier("Full Name") Text("Password") .frame(maxWidth: 250, alignment: .topLeading) From 95ad1e83192ec8f788583fc87cffc9dde58ba238 Mon Sep 17 00:00:00 2001 From: Venera Date: Thu, 18 Apr 2024 11:38:34 +0100 Subject: [PATCH 21/26] signup working --- MobileAcebook/LoginPageView.swift | 2 +- MobileAcebook/SignUpPageView.swift | 31 +++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/MobileAcebook/LoginPageView.swift b/MobileAcebook/LoginPageView.swift index ac8ebd30..32a3ce34 100644 --- a/MobileAcebook/LoginPageView.swift +++ b/MobileAcebook/LoginPageView.swift @@ -31,7 +31,7 @@ struct LoginPageView: View { .stroke(Color.gray) ) .multilineTextAlignment(.center) - . autocapitalization(. none) + .autocapitalization(. none) .accessibilityIdentifier("loginUsername") }.padding() VStack { diff --git a/MobileAcebook/SignUpPageView.swift b/MobileAcebook/SignUpPageView.swift index d29faf42..466dd86f 100644 --- a/MobileAcebook/SignUpPageView.swift +++ b/MobileAcebook/SignUpPageView.swift @@ -10,13 +10,18 @@ import Foundation import SwiftUI struct SignUpPageView: View { @State private var email = "" - @State private var fullName = "" + @State private var username = "" @State private var password = "" + @State private var imgUrl = "" @State var isShowingPassword: Bool = false + @State private var isSignUpComplete = false + + @State private var signUpError: String? = nil + //errors: @State private var emailError = "" - //let authService: AuthenticationServiceProtocol + let authService = AuthenticationService() var body: some View { NavigationView { VStack(spacing: 30) { @@ -41,7 +46,7 @@ struct SignUpPageView: View { Text("Full Name") .frame(maxWidth: 250, alignment: .topLeading) .padding() - TextField("", text: $fullName) + TextField("", text: $username) .frame(width: 250, height: 40) .multilineTextAlignment(.center) .overlay( @@ -85,7 +90,20 @@ struct SignUpPageView: View { VStack{ Button("Sign Up"){ - //add logic here + let newUser = User(imgUrl: imgUrl, email: email, password: password, username: username) + let success = authService.signUp(user: newUser) + if success { + // Clear fields if signup successful + email = "" + username = "" + password = "" + // Show success message + signUpError = "Account created successfully" + isSignUpComplete = true + } else { + // Show error message + signUpError = "Error creating account" + } } .frame(width: 250, height: 40) .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) @@ -96,9 +114,8 @@ struct SignUpPageView: View { Spacer() HStack(spacing:3){ Text("Already have an account?") - NavigationLink(destination: LoginPageView()){ - Text("Login here") - .fontWeight(.bold)} + NavigationLink(destination: LoginPageView(), isActive: $isSignUpComplete, label: {Text("Login here") + .fontWeight(.bold)}) } } } From 83b1f6e36b5322196d2ce1a5c1ac79c38422d6e7 Mon Sep 17 00:00:00 2001 From: ohmygois Date: Thu, 18 Apr 2024 11:49:07 +0100 Subject: [PATCH 22/26] changes made --- MobileAcebook/SignUpPageView.swift | 90 +++++++++++++++++++---------- MobileAcebook/WelcomePageView.swift | 80 +++++++++++++------------ 2 files changed, 101 insertions(+), 69 deletions(-) diff --git a/MobileAcebook/SignUpPageView.swift b/MobileAcebook/SignUpPageView.swift index b7090723..b3193288 100644 --- a/MobileAcebook/SignUpPageView.swift +++ b/MobileAcebook/SignUpPageView.swift @@ -8,11 +8,25 @@ import Foundation import SwiftUI + +struct SignUpError: Identifiable { + let id = UUID() + let message: String +} + +let authService = AuthenticationService() + + struct SignUpPageView: View { @State private var email = "" - @State private var fullName = "" + @State private var imgUrl = "" + @State private var username = "" @State private var password = "" @State var isShowingPassword: Bool = false + @State private var signUpError: String? = nil + @State private var showAlert = false + @State private var isSignUpComplete = false + //errors: @State private var emailError = "" @@ -34,38 +48,38 @@ struct SignUpPageView: View { .multilineTextAlignment(.center) .overlay( RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray) + .stroke(Color.gray) ) .accessibilityIdentifier("email") Text("Full Name") .frame(maxWidth: 250, alignment: .topLeading) .padding() - TextField("", text: $fullName) + TextField("", text: $username) .frame(width: 250, height: 40) .multilineTextAlignment(.center) .overlay( RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray) + .stroke(Color.gray) ) .accessibilityIdentifier("Full Name") Text("Password") .frame(maxWidth: 250, alignment: .topLeading) .padding() VStack { - Group { - if isShowingPassword { - TextField("", text: $password) - .frame(width: 250, height: 40) - .multilineTextAlignment(.center) - .overlay(RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray)) - }else { - SecureField("", text: $password) - .frame(width: 250, height: 40) - .multilineTextAlignment(.center) - .overlay(RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray)) - } + Group { + if isShowingPassword { + TextField("", text: $password) + .frame(width: 250, height: 40) + .multilineTextAlignment(.center) + .overlay(RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray)) + }else { + SecureField("", text: $password) + .frame(width: 250, height: 40) + .multilineTextAlignment(.center) + .overlay(RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray)) + } } .disableAutocorrection(true) .autocapitalization(.none) @@ -80,38 +94,50 @@ struct SignUpPageView: View { } }.padding() } - + VStack{ Button("Sign Up"){ + let newUser = User(imgUrl: imgUrl, email: email, password: password, username: username) + let success = authService.signUp(user: newUser) + if success { + // Clear fields if signup successful + email = "" + username = "" + password = "" + isSignUpComplete = true + + + // Show success message + signUpError = "Account created successfully" + } else { + // Show error message + signUpError = "Error creating account" + } + } .frame(width: 250, height: 40) .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) .foregroundColor(.white) .cornerRadius(10) + } } .padding(.top, 40) Spacer() HStack(spacing:3){ Text("Already have an account?") - NavigationLink(destination: LoginPageView()){ + NavigationLink(destination: LoginPageView(), isActive: $isSignUpComplete){ Text("Login here") .fontWeight(.bold)} } .padding() } + + } + } } - } + #Preview { + SignUpPageView() } -} -#Preview { - SignUpPageView() -} - - - - - - - + diff --git a/MobileAcebook/WelcomePageView.swift b/MobileAcebook/WelcomePageView.swift index b943f09c..c9b9148c 100644 --- a/MobileAcebook/WelcomePageView.swift +++ b/MobileAcebook/WelcomePageView.swift @@ -9,45 +9,51 @@ import SwiftUI struct WelcomePageView: View { var body: some View { - ZStack { - VStack { - Spacer() - - Text("Welcome to\n Pawbook!") - .font(.largeTitle) - .padding(.bottom, 25) - .accessibilityIdentifier("welcomeText") - .multilineTextAlignment(.center) - .foregroundColor(Color(red: 0.50, green: 0.71, blue: 0.71)) - .bold() - Spacer() - - Image("paw-logo") - .resizable() - .scaledToFit() - .frame(width: 130, height: 130) - .accessibilityIdentifier("paw-logo") - Spacer() - - Button("Login") { - // TODO: login logic - } - .frame(width: 250, height: 40) - .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) - .foregroundColor(.white) - .cornerRadius(10) - .accessibilityIdentifier("loginButton") + NavigationView{ + ZStack { + VStack { + Spacer() - Button("Sign Up") { - // TODO: sign up logic - } - .frame(width: 250, height: 40) - .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) - .foregroundColor(.white) - .cornerRadius(10) - .accessibilityIdentifier("signUpButton") + Text("Welcome to\n Pawbook!") + .font(.largeTitle) + .padding(.bottom, 25) + .accessibilityIdentifier("welcomeText") + .multilineTextAlignment(.center) + .foregroundColor(Color(red: 0.50, green: 0.71, blue: 0.71)) + .bold() + Spacer() + + Image("paw-logo") + .resizable() + .scaledToFit() + .frame(width: 130, height: 130) + .accessibilityIdentifier("paw-logo") + Spacer() - Spacer() + NavigationLink(destination: LoginPageView()) { + Button("Login") { + // TODO: login logic + } + .frame(width: 250, height: 40) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) + .accessibilityIdentifier("loginButton")} + + NavigationLink(destination: SignUpPageView()) { + Button(action: { + }) { + Text("Sign Up") + .frame(width: 250, height: 40) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) + .accessibilityIdentifier("signUpButton") + } + } + + Spacer() + } } } } From 67c151f5c42646c6d313492a80c038cf0cfceb86 Mon Sep 17 00:00:00 2001 From: Venera Date: Thu, 18 Apr 2024 12:11:16 +0100 Subject: [PATCH 23/26] logging in added --- MobileAcebook/LoginPageView.swift | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/MobileAcebook/LoginPageView.swift b/MobileAcebook/LoginPageView.swift index 32a3ce34..c1915810 100644 --- a/MobileAcebook/LoginPageView.swift +++ b/MobileAcebook/LoginPageView.swift @@ -8,13 +8,14 @@ import SwiftUI struct LoginPageView: View { - @State private var username = "" + @State private var email = "" @State private var password = "" @State var isShowingPassword: Bool = false + @State private var loginError: String? = nil + let authService = AuthenticationService() var body: some View { NavigationView { - VStack { Spacer() Text("Log in") @@ -22,9 +23,9 @@ struct LoginPageView: View { .bold() Spacer() VStack { - Text("Username") .frame(maxWidth: 250, alignment: .topLeading) + Text("Email") .frame(maxWidth: 250, alignment: .topLeading) - TextField("", text: $username) + TextField("", text: $email) .frame(width: 250, height: 40) .overlay( RoundedRectangle(cornerRadius: 10) @@ -32,7 +33,7 @@ struct LoginPageView: View { ) .multilineTextAlignment(.center) .autocapitalization(. none) - .accessibilityIdentifier("loginUsername") + .accessibilityIdentifier("loginEmail") }.padding() VStack { Text("Password") @@ -68,7 +69,15 @@ struct LoginPageView: View { Button("Submit") { - guard !username.isEmpty && !password.isEmpty else { return } +// guard !username.isEmpty && !password.isEmpty else { return } + let user = UserLogin(email: email, password: password) + let success = authService.login(userLogin: user) + if success { + email = "" + password = "" + } else { + loginError = "Error logging in" + } } .frame(width: 250, height: 40) .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) From a9b71abcbcf3bb31dea7ab21a9a03a4df2b84bf6 Mon Sep 17 00:00:00 2001 From: Venera Date: Thu, 18 Apr 2024 12:14:31 +0100 Subject: [PATCH 24/26] logging in with main --- MobileAcebook/WelcomePageView.swift | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/MobileAcebook/WelcomePageView.swift b/MobileAcebook/WelcomePageView.swift index 03d8a325..afa6ef75 100644 --- a/MobileAcebook/WelcomePageView.swift +++ b/MobileAcebook/WelcomePageView.swift @@ -9,11 +9,7 @@ import SwiftUI struct WelcomePageView: View { var body: some View { -<<<<<<< HEAD - NavigationView{ -======= NavigationView { ->>>>>>> bddf4de293ba456171c3682d257fba2a9996240b ZStack { VStack { Spacer() @@ -34,28 +30,6 @@ struct WelcomePageView: View { .accessibilityIdentifier("paw-logo") Spacer() -<<<<<<< HEAD - NavigationLink(destination: LoginPageView()) { - Button("Login") { - // TODO: login logic - } - .frame(width: 250, height: 40) - .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) - .foregroundColor(.white) - .cornerRadius(10) - .accessibilityIdentifier("loginButton")} - - NavigationLink(destination: SignUpPageView()) { - Button(action: { - }) { - Text("Sign Up") - .frame(width: 250, height: 40) - .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) - .foregroundColor(.white) - .cornerRadius(10) - .accessibilityIdentifier("signUpButton") - } -======= NavigationLink(destination: LoginPageView()){ Text("Login") .frame(width: 250, height: 40) @@ -71,7 +45,6 @@ struct WelcomePageView: View { .foregroundColor(.white) .cornerRadius(10) .accessibilityIdentifier("signUpButton") ->>>>>>> bddf4de293ba456171c3682d257fba2a9996240b } Spacer() From 4f9a3032a498147487bc988f8b583f04aafaaad1 Mon Sep 17 00:00:00 2001 From: Jess Date: Thu, 18 Apr 2024 12:33:24 +0100 Subject: [PATCH 25/26] feedPage - no logic yet --- MobileAcebook.xcodeproj/project.pbxproj | 13 +++--- MobileAcebook/FeedPageView.swift | 59 +++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 MobileAcebook/FeedPageView.swift diff --git a/MobileAcebook.xcodeproj/project.pbxproj b/MobileAcebook.xcodeproj/project.pbxproj index cdc734b1..1b6160ac 100644 --- a/MobileAcebook.xcodeproj/project.pbxproj +++ b/MobileAcebook.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ 0F81A0C52BCE82C200AED673 /* LoginPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F81A0C42BCE82C200AED673 /* LoginPageView.swift */; }; 0F81A0C72BCED6FD00AED673 /* SignUpPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F81A0C62BCED6FD00AED673 /* SignUpPageView.swift */; }; 3D9855862BCE82EF007D584D /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9855852BCE82EF007D584D /* Post.swift */; }; + 3D98558C2BD12380007D584D /* FeedPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D98558B2BD12380007D584D /* FeedPageView.swift */; }; AE5D85B02AC8A221009680C6 /* MobileAcebookApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85AF2AC8A221009680C6 /* MobileAcebookApp.swift */; }; AE5D85B42AC8A224009680C6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE5D85B32AC8A224009680C6 /* Assets.xcassets */; }; AE5D85B72AC8A224009680C6 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE5D85B62AC8A224009680C6 /* Preview Assets.xcassets */; }; @@ -22,11 +23,8 @@ AE5D85E32AC9AFD2009680C6 /* MockAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85E22AC9AFD2009680C6 /* MockAuthenticationService.swift */; }; AE5D85E62AC9B077009680C6 /* AuthenticationServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85E52AC9B077009680C6 /* AuthenticationServiceProtocol.swift */; }; AE5D85E82AC9B29A009680C6 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5D85E72AC9B29A009680C6 /* User.swift */; }; - - D6070C072BD005F5003EFBE5 /* UserLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6070C062BD005F5003EFBE5 /* UserLogin.swift */; }; - C1615B992BCFEF2800A7AB81 /* PostService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1615B982BCFEF2800A7AB81 /* PostService.swift */; }; - + D6070C072BD005F5003EFBE5 /* UserLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6070C062BD005F5003EFBE5 /* UserLogin.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -50,6 +48,7 @@ 0F81A0C42BCE82C200AED673 /* LoginPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginPageView.swift; sourceTree = ""; }; 0F81A0C62BCED6FD00AED673 /* SignUpPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpPageView.swift; sourceTree = ""; }; 3D9855852BCE82EF007D584D /* Post.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = ""; }; + 3D98558B2BD12380007D584D /* FeedPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedPageView.swift; sourceTree = ""; }; AE5D85AC2AC8A221009680C6 /* MobileAcebook.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MobileAcebook.app; sourceTree = BUILT_PRODUCTS_DIR; }; AE5D85AF2AC8A221009680C6 /* MobileAcebookApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MobileAcebookApp.swift; sourceTree = ""; }; AE5D85B32AC8A224009680C6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -65,10 +64,8 @@ AE5D85E22AC9AFD2009680C6 /* MockAuthenticationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAuthenticationService.swift; sourceTree = ""; }; AE5D85E52AC9B077009680C6 /* AuthenticationServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationServiceProtocol.swift; sourceTree = ""; }; AE5D85E72AC9B29A009680C6 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; - - D6070C062BD005F5003EFBE5 /* UserLogin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserLogin.swift; sourceTree = ""; }; C1615B982BCFEF2800A7AB81 /* PostService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostService.swift; sourceTree = ""; }; - + D6070C062BD005F5003EFBE5 /* UserLogin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserLogin.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -126,6 +123,7 @@ AE5D85B32AC8A224009680C6 /* Assets.xcassets */, AE5D85B52AC8A224009680C6 /* Preview Content */, AE5D85D92AC8A337009680C6 /* WelcomePageView.swift */, + 3D98558B2BD12380007D584D /* FeedPageView.swift */, 0F81A0C42BCE82C200AED673 /* LoginPageView.swift */, 0F81A0C62BCED6FD00AED673 /* SignUpPageView.swift */, ); @@ -330,6 +328,7 @@ AE5D85B02AC8A221009680C6 /* MobileAcebookApp.swift in Sources */, 3D9855862BCE82EF007D584D /* Post.swift in Sources */, AE5D85E82AC9B29A009680C6 /* User.swift in Sources */, + 3D98558C2BD12380007D584D /* FeedPageView.swift in Sources */, 0F81A0C72BCED6FD00AED673 /* SignUpPageView.swift in Sources */, AE5D85DA2AC8A337009680C6 /* WelcomePageView.swift in Sources */, C1615B992BCFEF2800A7AB81 /* PostService.swift in Sources */, diff --git a/MobileAcebook/FeedPageView.swift b/MobileAcebook/FeedPageView.swift new file mode 100644 index 00000000..fa192fc9 --- /dev/null +++ b/MobileAcebook/FeedPageView.swift @@ -0,0 +1,59 @@ +// +// FeedPageView.swift +// MobileAcebook +// +// Created by Jess Todd on 18/04/2024. +// + +import Foundation +import SwiftUI + +struct FeedPageView: View { + @State private var text = "" + @State public var token: String + + var body: some View { + + VStack { + + Text("Pawbook") + .font(.largeTitle) + .fontWeight(.bold) + .padding() + .frame(maxWidth: .infinity) + .background(Color(red: 0.50, green: 0.71, blue: 0.71)) + .foregroundColor(.white) + + Text("Your feed") + .font(/*@START_MENU_TOKEN@*/.title/*@END_MENU_TOKEN@*/) + .fontWeight(/*@START_MENU_TOKEN@*/.bold/*@END_MENU_TOKEN@*/) + .padding(.top, 20) + + TextField("Type something...", text: $text) + .padding(.vertical, 20) + .padding(.horizontal) + .font(.system(size: 18)) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .cornerRadius(10) + .padding([.leading, .trailing], 24) + + Button("Add Post"){ + } + .frame(width: 250, height: 40) + .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) + .foregroundColor(.white) + .cornerRadius(10) + Spacer() + + } + } +} + + + + struct FeedPageView_Previews: PreviewProvider { + static var previews: some View { + FeedPageView(token: "") + } + } + From 5d0ca8d6cc6ee5dbe2bbe4f9119256a7aa55bc06 Mon Sep 17 00:00:00 2001 From: Maria Basia Date: Thu, 18 Apr 2024 15:26:36 +0100 Subject: [PATCH 26/26] signUp function fixed and signUp button on signup page calls signUp and provides feedback --- .../AuthenticationServiceProtocol.swift | 2 +- .../Services/AuthenticationService.swift | 60 ++++++--- MobileAcebook/SignUpPageView.swift | 114 +++++++++++------- .../Services/MockAuthenticationService.swift | 12 +- 4 files changed, 122 insertions(+), 66 deletions(-) diff --git a/MobileAcebook/Protocols/AuthenticationServiceProtocol.swift b/MobileAcebook/Protocols/AuthenticationServiceProtocol.swift index ae012f49..c848660e 100644 --- a/MobileAcebook/Protocols/AuthenticationServiceProtocol.swift +++ b/MobileAcebook/Protocols/AuthenticationServiceProtocol.swift @@ -6,5 +6,5 @@ // public protocol AuthenticationServiceProtocol { - func signUp(user: User) -> Bool + func signUp(user: User, completion: @escaping (Bool) -> Void) } diff --git a/MobileAcebook/Services/AuthenticationService.swift b/MobileAcebook/Services/AuthenticationService.swift index 295d2eff..8a07c647 100644 --- a/MobileAcebook/Services/AuthenticationService.swift +++ b/MobileAcebook/Services/AuthenticationService.swift @@ -12,30 +12,56 @@ class AuthenticationService: AuthenticationServiceProtocol { struct Response: Codable { let message : String } + - func signUp(user: User) -> Bool { - guard let url = URL(string: "http://localhost:3000/users") else {return false} + func signUp(user: User, completion: @escaping (Bool) -> Void){ + guard let url = URL(string: "http://localhost:3000/users") else { + completion(false) + return + } - var urlRequest = URLRequest(url: url) - urlRequest.httpMethod = "POST" - urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") - let body = user - urlRequest.httpBody = try? JSONEncoder().encode(user) - let task = URLSession.shared.dataTask(with : urlRequest) {data, response, error in - guard let data = data else {return} + var urlRequest = URLRequest(url: url) + urlRequest.httpMethod = "POST" + urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + do { - let response = try JSONSerialization.jsonObject(with: data, options: .allowFragments) - print(response) - print("User created successfully") + urlRequest.httpBody = try JSONEncoder().encode(user) + } catch { + print("Error encoding user: \(error)") + completion(false) + return } - catch { - print(error) + + let task = URLSession.shared.dataTask(with: urlRequest) { data, response, error in + guard let httpResponse = response as? HTTPURLResponse, let data = data else { + completion(false) + return + } + + if !(200...299).contains(httpResponse.statusCode) { + print("HTTP error: \(httpResponse.statusCode)") + completion(false) + return + } + + do { + let jsonResponse = try JSONDecoder().decode(Response.self, from: data) + print("Response message: \(jsonResponse.message)") + + if jsonResponse.message != "Something went wrong" { + completion(true) // Signup successful + } else { + completion(false) // Signup failed + } + } catch { + print("JSON decoding error: \(error)") + completion(false) + } } + + task.resume() } - task.resume() - return true - } func login(userLogin: UserLogin) -> Bool { guard let url = URL(string: "http://localhost:3000/tokens") else {return false} diff --git a/MobileAcebook/SignUpPageView.swift b/MobileAcebook/SignUpPageView.swift index 145d5f73..910cd044 100644 --- a/MobileAcebook/SignUpPageView.swift +++ b/MobileAcebook/SignUpPageView.swift @@ -1,22 +1,30 @@ // -// SignUpPageView.swift -// MobileAcebook +// SignUpPageView.swift +// MobileAcebook // -// Created by Venera Zhargakova on 16/04/2024. +// Created by Venera Zhargakova on 16/04/2024. // - import Foundation - import SwiftUI +struct SignUpError: Identifiable { + let id = UUID() + let message: String +} +let authService = AuthenticationService() struct SignUpPageView: View { @State private var email = "" - @State private var fullName = "" + @State private var imgUrl = "" + @State private var username = "" @State private var password = "" @State var isShowingPassword: Bool = false - + @State private var signUpError: String? = nil //errors: @State private var emailError = "" //let authService: AuthenticationServiceProtocol + @State private var showAlert = false + @State private var alertMessage = "" + + var body: some View { NavigationView { VStack(spacing: 30) { @@ -34,42 +42,41 @@ struct SignUpPageView: View { .multilineTextAlignment(.center) .overlay( RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray) + .stroke(Color.gray) ) .accessibilityIdentifier("email") Text("Full Name") .frame(maxWidth: 250, alignment: .topLeading) .padding() - TextField("", text: $fullName) + TextField("", text: $username) .frame(width: 250, height: 40) .multilineTextAlignment(.center) .overlay( RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray) + .stroke(Color.gray) ) .accessibilityIdentifier("Full Name") Text("Password") .frame(maxWidth: 250, alignment: .topLeading) .padding() VStack { - Group { - if isShowingPassword { - TextField("", text: $password) - .frame(width: 250, height: 40) - .multilineTextAlignment(.center) - .overlay(RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray)) - }else { - SecureField("", text: $password) - .frame(width: 250, height: 40) - .multilineTextAlignment(.center) - .overlay(RoundedRectangle(cornerRadius: 10) - .stroke(Color.gray)) - } + Group { + if isShowingPassword { + TextField("", text: $password) + .frame(width: 250, height: 40) + .multilineTextAlignment(.center) + .overlay(RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray)) + }else { + SecureField("", text: $password) + .frame(width: 250, height: 40) + .multilineTextAlignment(.center) + .overlay(RoundedRectangle(cornerRadius: 10) + .stroke(Color.gray)) + } } .disableAutocorrection(true) .autocapitalization(.none) - Button { isShowingPassword.toggle() } label: { @@ -80,36 +87,59 @@ struct SignUpPageView: View { } }.padding() } - VStack{ - Button("Sign Up"){ - //add logic here + Button("Sign Up") { + + let newUser = User(imgUrl: imgUrl, email: email, password: password, username: username) + + authService.signUp(user: newUser) { success in + if success { + // Clear fields if signup successful + DispatchQueue.main.async { + email = "" + username = "" + password = "" + + alertMessage = "Account created successfully" + showAlert = true + } + } else { + DispatchQueue.main.async { + + alertMessage = "Error creating account" + showAlert = true + } + } + } } .frame(width: 250, height: 40) .background(Color(red: 0x50/255, green: 0xB7/255, blue: 0xB7/255)) .foregroundColor(.white) .cornerRadius(10) } - .padding(.top, 40) - Spacer() - HStack(spacing:3){ - Text("Already have an account?") - NavigationLink(destination: LoginPageView()){ - Text("Login here") - .fontWeight(.bold)} - } } + .padding(.top, 40) + Spacer() + HStack(spacing:3){ + Text("Already have an account?") + NavigationLink(destination: LoginPageView()){ + Text("Login here") + .fontWeight(.bold)} + } + .padding() } + .alert(isPresented: $showAlert) { + Alert( + title: Text(alertMessage), + dismissButton: .default(Text("OK")) + + )} + } } } #Preview { SignUpPageView() -} - - - - - +} diff --git a/MobileAcebookTests/Services/MockAuthenticationService.swift b/MobileAcebookTests/Services/MockAuthenticationService.swift index 29a608e0..1fbb987e 100644 --- a/MobileAcebookTests/Services/MockAuthenticationService.swift +++ b/MobileAcebookTests/Services/MockAuthenticationService.swift @@ -7,9 +7,9 @@ @testable import MobileAcebook -class MockAuthenticationService: AuthenticationServiceProtocol { - func signUp(user: User) -> Bool { - // Mocked logic for unit tests - return true // placeholder - } -} +//class MockAuthenticationService: AuthenticationServiceProtocol { +// func signUp(user: User) { +// // Mocked logic for unit tests +// return true // placeholder +// } +//}