diff --git a/donutshop_ecommerce/src/app/api/models/User.js b/donutshop_ecommerce/src/app/api/models/User.js index f52f1ca..d9d6f7a 100644 --- a/donutshop_ecommerce/src/app/api/models/User.js +++ b/donutshop_ecommerce/src/app/api/models/User.js @@ -16,6 +16,25 @@ const UserSchema = new Schema({ image:{ type: String, }, + phoneNumber: { + type: String, + }, + streetAddress: { + type: String, + }, + city: { + type: String, + }, + stateProvince: { + type: String, + }, + zipCode: { + type: String, + }, + country: { + type: String, + }, + }, {timestamps: true}); diff --git a/donutshop_ecommerce/src/app/api/profile/route.js b/donutshop_ecommerce/src/app/api/profile/route.js index 2c8907f..5fc563d 100644 --- a/donutshop_ecommerce/src/app/api/profile/route.js +++ b/donutshop_ecommerce/src/app/api/profile/route.js @@ -8,17 +8,19 @@ export async function PUT(req){ const data = await req.json(); const session = await getServerSession(authOptions) const email = session.user.email - const update = {}; - if('name' in data){ - update.name = data.name - } - if('image' in data){ - update.image = data.image - } - if(Object.keys(update).length > 0){ - await User.updateOne({email}, update); - } - + + + await User.updateOne({email}, data); return Response.json(true) +} + +export async function GET(){ + mongoose.connect(process.env.MONGO_URL) + const session = await getServerSession(authOptions) + const email = session.user.email + + return Response.json( + await User.findOne({email}) + ) } \ No newline at end of file diff --git a/donutshop_ecommerce/src/app/globals.css b/donutshop_ecommerce/src/app/globals.css index d38daa3..5215dfa 100644 --- a/donutshop_ecommerce/src/app/globals.css +++ b/donutshop_ecommerce/src/app/globals.css @@ -10,7 +10,7 @@ body{ overflow-x: hidden; } /*===== general setup =====*/ -input[type="email"], input[type="password"], input[type="text"]{ +input[type="email"], input[type="password"], input[type="text"], input[type="tel"]{ @apply border p-2 block my-2 w-full rounded-md outline-none border-[#DCA0AE] } diff --git a/donutshop_ecommerce/src/app/profile/page.js b/donutshop_ecommerce/src/app/profile/page.js index 72f5560..1602ea9 100644 --- a/donutshop_ecommerce/src/app/profile/page.js +++ b/donutshop_ecommerce/src/app/profile/page.js @@ -13,12 +13,28 @@ const ProfilePage = () => { //profile update const [userName, setUserName] = useState(''); const [image, setImage] = useState(''); + const [phoneNumber, setPhoneNumber] = useState(''); + const [streetAddress, setStreetAddress] = useState(''); + const [city, setCity] = useState(''); + const [stateProvince, setStateProvince] = useState(''); + const [zipCode, setZipCode] = useState(''); + const [country, setCountry] = useState(''); useEffect(() => { if(status === 'authenticated'){ setUserName(session.data.user.name) setImage(session.data.user.image) + fetch('/api/profile').then(response => { + response.json().then(data => { + setPhoneNumber(data.phoneNumber); + setStreetAddress(data.streetAddress); + setCity(data.city); + setStateProvince(data.stateProvince); + setZipCode(data.zipCode); + setCountry(data.country); + }) + }) } },[session, status]) @@ -30,7 +46,7 @@ const ProfilePage = () => { const response = await fetch('/api/profile', { method: 'PUT', headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({name:userName, image}), + body: JSON.stringify({name:userName, image, phoneNumber, streetAddress, city, stateProvince, zipCode, country}), }); if(response.ok) resolve() @@ -52,18 +68,16 @@ const ProfilePage = () => { const uploadPromise = fetch('/api/upload', { - method: 'POST', - body: data, - }).then(response => { - if(response.ok){ - return response.json().then(link => { - setImage(link) - }); - } - throw new Error('Something went wrong!') - }); - - + method: 'POST', + body: data, + }).then(response => { + if(response.ok){ + return response.json().then(link => { + setImage(link) + }); + } + throw new Error('Something went wrong!') + }); await toast.promise(uploadPromise, { loading: 'Uploading', success: 'An image is uploaded', @@ -73,7 +87,6 @@ const ProfilePage = () => { } } - if(status === 'loading'){ return 'Loading...' } @@ -84,7 +97,7 @@ const ProfilePage = () => { return ( -
+

Profile

@@ -96,9 +109,41 @@ const ProfilePage = () => { Edit
-
- setUserName(ev.target.value)}/> - + +
+ + setUserName(ev.target.value)}/> +
+
+ + +
+
+ + setPhoneNumber(ev.target.value)}/> +
+
+ + setStreetAddress(ev.target.value)}/> +
+
+ + setCity(ev.target.value)}/> +
+
+
+ + setStateProvince(ev.target.value)}/> +
+
+ + setZipCode(ev.target.value)}/> +
+
+
+ + setCountry(ev.target.value)}/> +