From 18d3d71c057e1d439a4598732ee258b7126624e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabi=C3=A1n=20Romero?= Date: Tue, 23 Jul 2024 14:52:02 +0200 Subject: [PATCH] move all components to hooks #79 --- staff/fabian-romero/react/ponies/.DS_Store | Bin 6148 -> 6148 bytes .../react/ponies/api/data/deletePost.js | 21 - .../react/ponies/api/data/demo.js | 65 -- .../react/ponies/api/data/findPost.js | 13 - .../react/ponies/api/data/findPosts.js | 14 - .../react/ponies/api/data/findUser.js | 13 - .../react/ponies/api/data/index.js | 21 - .../react/ponies/api/data/insertPost.js | 15 - .../react/ponies/api/data/insertUser.js | 15 - .../react/ponies/api/data/posts.json | 37 - .../react/ponies/api/data/updatePost.js | 25 - .../react/ponies/api/data/updatePost.test.js | 13 - .../react/ponies/api/data/updateUser.js | 24 - .../react/ponies/api/data/users.json | 16 - staff/fabian-romero/react/ponies/api/index.js | 287 +++++++ .../ponies/api/logic/authenticateUser.js | 18 - .../ponies/api/logic/authenticateUser.test.js | 3 - .../react/ponies/api/logic/createPost.js | 27 - .../react/ponies/api/logic/createPost.test.js | 3 - .../react/ponies/api/logic/deletePost.js | 20 - .../react/ponies/api/logic/deletePost.test.js | 3 - .../react/ponies/api/logic/getAllFavPosts.js | 28 - .../ponies/api/logic/getAllFavPosts.test.js | 5 - .../ponies/api/logic/getAllPoniesPosts.js | 30 - .../api/logic/getAllPoniesPosts.test.js | 5 - .../react/ponies/api/logic/getAllPosts.js | 28 - .../ponies/api/logic/getAllPosts.test.js | 5 - .../react/ponies/api/logic/getUser.js | 14 - .../react/ponies/api/logic/getUser.test.js | 5 - .../react/ponies/api/logic/getUserName.js | 12 - .../ponies/api/logic/getUserName.test.js | 5 - .../react/ponies/api/logic/getUserUsername.js | 3 - .../react/ponies/api/logic/registerUser.js | 38 - .../ponies/api/logic/registerUser.test.js | 3 - .../react/ponies/api/logic/toggleFavPost.js | 26 - .../ponies/api/logic/toggleFavPost.test.js | 3 - .../ponies/api/logic/toggleFollowUser.js | 24 - .../ponies/api/logic/toggleFollowUser.test.js | 3 - .../react/ponies/api/logic/toggleLikePost.js | 25 - .../ponies/api/logic/toggleLikePost.test.js | 3 - .../react/ponies/api/logic/updateAvatar.js | 15 - .../ponies/api/logic/updateAvatar.test.js | 3 - .../react/ponies/api/logic/updatePassword.js | 27 - .../ponies/api/logic/updatePassword.test.js | 3 - .../ponies/api/logic/updatePostCaption.js | 20 - .../api/logic/updatePostCaption.test.js | 3 - .../react/ponies/api/package-lock.json | 706 ++++++++++++++++++ .../react/ponies/api/package.json | 10 +- .../react/ponies/api/test/authenticateUser.sh | 1 + .../react/ponies/api/test/create-post.sh | 1 + .../react/ponies/api/test/delete-post.sh | 1 + .../ponies/api/test/get-all-fav-posts.sh | 1 + .../react/ponies/api/test/get-all-ponies.sh | 7 + .../react/ponies/api/test/get-all-posts.sh | 7 + .../react/ponies/api/test/get-user.sh | 6 + .../react/ponies/api/test/index.js | 9 - .../react/ponies/api/test/register.sh | 1 + .../react/ponies/api/test/toggle-fav-post.sh | 1 + .../ponies/api/test/toggle-follow-user.sh | 1 + .../react/ponies/api/test/toggle-like-post.sh | 1 + .../ponies/api/test/update-post-caption.sh | 1 + .../ponies/app/.vite/deps/_metadata.json | 8 + .../react/ponies/app/.vite/deps/package.json | 3 + .../react/ponies/app/data/deletePost.js | 13 - .../react/ponies/app/data/findPost.js | 9 - .../react/ponies/app/data/findPosts.js | 9 - .../react/ponies/app/data/findUser.js | 9 - .../react/ponies/app/data/insertPost.js | 9 - .../react/ponies/app/data/insertUser.js | 9 - .../react/ponies/app/data/updatePost.js | 13 - .../react/ponies/app/data/updateUser.js | 13 - .../react/ponies/app/logic/createPost.js | 38 +- .../react/ponies/app/logic/deletePost.js | 30 +- .../react/ponies/app/logic/getAllFavPosts.js | 34 +- .../ponies/app/logic/getAllPoniesPosts.js | 35 +- .../react/ponies/app/logic/getAllPosts.js | 34 +- .../react/ponies/app/logic/getUserName.js | 27 +- .../react/ponies/app/logic/isUserLoggedIn.js | 4 - .../react/ponies/app/logic/loginUser.js | 37 +- .../react/ponies/app/logic/registerUser.js | 56 +- .../react/ponies/app/logic/toggleFavPost.js | 35 +- .../ponies/app/logic/toggleFollowUser.js | 33 +- .../react/ponies/app/logic/toggleLikePost.js | 34 +- .../ponies/app/logic/updatePostCaption.js | 32 +- .../react/ponies/app/view/App.jsx | 48 +- .../react/ponies/app/view/Home.jsx | 61 +- .../react/ponies/app/view/Login.jsx | 16 +- .../react/ponies/app/view/Register.jsx | 14 +- .../ponies/app/view/components/Button.css | 4 +- .../react/ponies/app/view/home/CreatePost.jsx | 14 +- .../ponies/app/view/home/FavsPostList.jsx | 136 ++-- .../react/ponies/app/view/home/Footer.jsx | 39 +- .../react/ponies/app/view/home/Header.jsx | 61 +- .../ponies/app/view/home/PoniesPostList.jsx | 137 ++-- .../react/ponies/app/view/home/Post.jsx | 156 ++-- .../react/ponies/app/view/home/PostList.jsx | 145 ++-- .../react/ponies/cor/data/deletePost.js | 44 ++ .../{api => cor}/data/deletePost.test.js | 0 .../react/ponies/cor/data/findPost.js | 29 + .../ponies/{api => cor}/data/findPost.test.js | 0 .../react/ponies/cor/data/findPosts.js | 29 + .../{api => cor}/data/findPosts.test.js | 0 .../react/ponies/cor/data/findUser.js | 29 + .../ponies/{api => cor}/data/findUser.test.js | 0 .../react/ponies/{app => cor}/data/index.js | 0 .../react/ponies/cor/data/insertPost.js | 39 + .../{api => cor}/data/insertPost.test.js | 0 .../{api => cor}/data/insertUser.Test.js | 0 .../react/ponies/cor/data/insertUser.js | 40 + .../react/ponies/cor/data/posts.json | 1 + .../react/ponies/cor/data/updatePost.js | 48 ++ .../react/ponies/cor/data/updatePost.test.js | 55 ++ .../react/ponies/cor/data/updateUser.js | 48 ++ .../{api => cor}/data/updateUser.test.js | 0 .../react/ponies/cor/data/users.json | 1 + staff/fabian-romero/react/ponies/cor/index.js | 0 .../ponies/cor/logic/authenticateUser.js | 33 + .../ponies/cor/logic/authenticateUser.test.js | 12 + .../react/ponies/cor/logic/createPost.js | 47 ++ .../react/ponies/cor/logic/createPost.test.js | 11 + .../react/ponies/cor/logic/deletePost.js | 50 ++ .../react/ponies/cor/logic/deletePost.test.js | 11 + .../react/ponies/cor/logic/getAllFavPosts.js | 61 ++ .../ponies/cor/logic/getAllFavPosts.test.js | 11 + .../ponies/cor/logic/getAllPoniesPosts.js | 64 ++ .../cor/logic/getAllPoniesPosts.test.js | 18 + .../react/ponies/cor/logic/getAllPosts.js | 60 ++ .../ponies/cor/logic/getAllPosts.test.js | 10 + .../react/ponies/cor/logic/getUserName.js | 42 ++ .../ponies/cor/logic/getUserName.test.js | 10 + .../react/ponies/{api => cor}/logic/index.js | 22 +- .../react/ponies/cor/logic/registerUser.js | 65 ++ .../ponies/cor/logic/registerUser.test.js | 15 + .../react/ponies/cor/logic/toggleFavPost.js | 56 ++ .../ponies/cor/logic/toggleFavPost.test.js | 12 + .../ponies/cor/logic/toggleFollowUser.js | 57 ++ .../ponies/cor/logic/toggleFollowUser.test.js | 11 + .../react/ponies/cor/logic/toggleLikePost.js | 56 ++ .../ponies/cor/logic/toggleLikePost.test.js | 10 + .../ponies/cor/logic/updatePostCaption.js | 52 ++ .../cor/logic/updatePostCaption.test.js | 11 + .../react/ponies/cor/package.json | 13 + .../react/ponies/cor/util/generateId.js | 9 + .../ponies/{api/test => cor}/validate.js | 17 +- .../react/ponies/web/favicon.ico | Bin 0 -> 216753 bytes .../fabian-romero/react/ponies/web/home.html | 20 + .../fabian-romero/react/ponies/web/index.css | 4 + staff/fabian-romero/react/ponies/web/index.js | 154 ++++ .../react/ponies/web/login-error.html | 18 + .../fabian-romero/react/ponies/web/login.html | 29 + .../react/ponies/web/package-lock.json | 706 ++++++++++++++++++ .../react/ponies/web/package.json | 20 + .../react/ponies/web/register-error.html | 18 + .../react/ponies/web/register.html | 29 + 154 files changed, 3961 insertions(+), 1344 deletions(-) delete mode 100644 staff/fabian-romero/react/ponies/api/data/deletePost.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/demo.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/findPost.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/findPosts.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/findUser.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/index.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/insertPost.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/insertUser.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/posts.json delete mode 100644 staff/fabian-romero/react/ponies/api/data/updatePost.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/updatePost.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/updateUser.js delete mode 100644 staff/fabian-romero/react/ponies/api/data/users.json create mode 100644 staff/fabian-romero/react/ponies/api/index.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/authenticateUser.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/authenticateUser.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/createPost.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/createPost.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/deletePost.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/deletePost.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getAllFavPosts.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getAllFavPosts.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getAllPoniesPosts.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getAllPoniesPosts.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getAllPosts.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getAllPosts.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getUser.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getUser.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getUserName.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getUserName.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/getUserUsername.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/registerUser.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/registerUser.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/toggleFavPost.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/toggleFavPost.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/toggleFollowUser.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/toggleFollowUser.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/toggleLikePost.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/toggleLikePost.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/updateAvatar.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/updateAvatar.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/updatePassword.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/updatePassword.test.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/updatePostCaption.js delete mode 100644 staff/fabian-romero/react/ponies/api/logic/updatePostCaption.test.js create mode 100644 staff/fabian-romero/react/ponies/api/package-lock.json create mode 100755 staff/fabian-romero/react/ponies/api/test/authenticateUser.sh create mode 100644 staff/fabian-romero/react/ponies/api/test/create-post.sh create mode 100644 staff/fabian-romero/react/ponies/api/test/delete-post.sh create mode 100644 staff/fabian-romero/react/ponies/api/test/get-all-fav-posts.sh create mode 100755 staff/fabian-romero/react/ponies/api/test/get-all-ponies.sh create mode 100755 staff/fabian-romero/react/ponies/api/test/get-all-posts.sh create mode 100755 staff/fabian-romero/react/ponies/api/test/get-user.sh delete mode 100644 staff/fabian-romero/react/ponies/api/test/index.js create mode 100755 staff/fabian-romero/react/ponies/api/test/register.sh create mode 100644 staff/fabian-romero/react/ponies/api/test/toggle-fav-post.sh create mode 100644 staff/fabian-romero/react/ponies/api/test/toggle-follow-user.sh create mode 100644 staff/fabian-romero/react/ponies/api/test/toggle-like-post.sh create mode 100644 staff/fabian-romero/react/ponies/api/test/update-post-caption.sh create mode 100644 staff/fabian-romero/react/ponies/app/.vite/deps/_metadata.json create mode 100644 staff/fabian-romero/react/ponies/app/.vite/deps/package.json delete mode 100644 staff/fabian-romero/react/ponies/app/data/deletePost.js delete mode 100644 staff/fabian-romero/react/ponies/app/data/findPost.js delete mode 100644 staff/fabian-romero/react/ponies/app/data/findPosts.js delete mode 100644 staff/fabian-romero/react/ponies/app/data/findUser.js delete mode 100644 staff/fabian-romero/react/ponies/app/data/insertPost.js delete mode 100644 staff/fabian-romero/react/ponies/app/data/insertUser.js delete mode 100644 staff/fabian-romero/react/ponies/app/data/updatePost.js delete mode 100644 staff/fabian-romero/react/ponies/app/data/updateUser.js create mode 100644 staff/fabian-romero/react/ponies/cor/data/deletePost.js rename staff/fabian-romero/react/ponies/{api => cor}/data/deletePost.test.js (100%) create mode 100644 staff/fabian-romero/react/ponies/cor/data/findPost.js rename staff/fabian-romero/react/ponies/{api => cor}/data/findPost.test.js (100%) create mode 100644 staff/fabian-romero/react/ponies/cor/data/findPosts.js rename staff/fabian-romero/react/ponies/{api => cor}/data/findPosts.test.js (100%) create mode 100644 staff/fabian-romero/react/ponies/cor/data/findUser.js rename staff/fabian-romero/react/ponies/{api => cor}/data/findUser.test.js (100%) rename staff/fabian-romero/react/ponies/{app => cor}/data/index.js (100%) create mode 100644 staff/fabian-romero/react/ponies/cor/data/insertPost.js rename staff/fabian-romero/react/ponies/{api => cor}/data/insertPost.test.js (100%) rename staff/fabian-romero/react/ponies/{api => cor}/data/insertUser.Test.js (100%) create mode 100644 staff/fabian-romero/react/ponies/cor/data/insertUser.js create mode 100644 staff/fabian-romero/react/ponies/cor/data/posts.json create mode 100644 staff/fabian-romero/react/ponies/cor/data/updatePost.js create mode 100644 staff/fabian-romero/react/ponies/cor/data/updatePost.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/data/updateUser.js rename staff/fabian-romero/react/ponies/{api => cor}/data/updateUser.test.js (100%) create mode 100644 staff/fabian-romero/react/ponies/cor/data/users.json create mode 100644 staff/fabian-romero/react/ponies/cor/index.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/authenticateUser.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/authenticateUser.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/createPost.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/createPost.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/deletePost.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/deletePost.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/getAllFavPosts.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/getAllFavPosts.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/getAllPoniesPosts.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/getAllPoniesPosts.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/getAllPosts.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/getAllPosts.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/getUserName.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/getUserName.test.js rename staff/fabian-romero/react/ponies/{api => cor}/logic/index.js (73%) create mode 100644 staff/fabian-romero/react/ponies/cor/logic/registerUser.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/registerUser.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/toggleFavPost.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/toggleFavPost.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/toggleFollowUser.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/toggleFollowUser.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/toggleLikePost.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/toggleLikePost.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/updatePostCaption.js create mode 100644 staff/fabian-romero/react/ponies/cor/logic/updatePostCaption.test.js create mode 100644 staff/fabian-romero/react/ponies/cor/package.json create mode 100644 staff/fabian-romero/react/ponies/cor/util/generateId.js rename staff/fabian-romero/react/ponies/{api/test => cor}/validate.js (77%) create mode 100644 staff/fabian-romero/react/ponies/web/favicon.ico create mode 100644 staff/fabian-romero/react/ponies/web/home.html create mode 100644 staff/fabian-romero/react/ponies/web/index.css create mode 100644 staff/fabian-romero/react/ponies/web/index.js create mode 100644 staff/fabian-romero/react/ponies/web/login-error.html create mode 100644 staff/fabian-romero/react/ponies/web/login.html create mode 100644 staff/fabian-romero/react/ponies/web/package-lock.json create mode 100644 staff/fabian-romero/react/ponies/web/package.json create mode 100644 staff/fabian-romero/react/ponies/web/register-error.html create mode 100644 staff/fabian-romero/react/ponies/web/register.html diff --git a/staff/fabian-romero/react/ponies/.DS_Store b/staff/fabian-romero/react/ponies/.DS_Store index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..a0f3d05b6f5b0e190ef2e90e59b3b9075ff2092b 100644 GIT binary patch delta 310 zcmZoMXfc=|#>B`mF;Q%yo}wrd0|Nsi1A_oVaY0f}eiD$kBdK6w;_`Zs1T#Z9Ln=d3 zQaQ3@PG)h5fx$IKCT12^Hg*nn4sMRv;Eeq8;F83W(qgB?qG%8=BtJhV3C2!L3d>9_ zj~5Ve&d)1J%*;zI0&B=jNd+p23D3++$uD=xFU?CS2I~z5N~8g0I5;^t;{_zDtBuSI zbQFwD%xZNMsx6IxY!hR%+FDKyQDuGWp!n>Z+`RlQpmTwM5$G2%;DypKsvF3FdZ#S7 yC@&{JFC8etxG_AjHu~2NHo+1YW5HK<@2yFhyD8{ylX%^#Vb`E|Hpgd6EJM(0I5k*d* SG(!SN-DDFU<;^i7E0_TqCl31n diff --git a/staff/fabian-romero/react/ponies/api/data/deletePost.js b/staff/fabian-romero/react/ponies/api/data/deletePost.js deleted file mode 100644 index adb6f5bea..000000000 --- a/staff/fabian-romero/react/ponies/api/data/deletePost.js +++ /dev/null @@ -1,21 +0,0 @@ -import fs from 'fs' // importo esto para saber la forma en que se tienen que leer los codigos - -function deletePost(condition) { - let json = fs.readFileSync('./data/posts.json', 'utf8') // ya no uso localstorage, uso disco y esta es la manera apra poder que se lea la info que tengo almacenada en el disco - - const posts = json ? JSON.parse(json) : [] //si en el json hay algo, lo parsee, y si no.. que me devuelva un array vacio - - const postIndex = posts.findIndex(condition) - - if (postIndex > -1) { - posts.splice(postIndex, 1) - - json = JSON.stringify(posts) // local no más ahora json - fs.writeFileSync('./data/posts.json', json) - } -} - -export default deletePost -// esta carpeta datos de api es solo para manejar datos no sesiones - -// cambiar a los validation \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/demo.js b/staff/fabian-romero/react/ponies/api/data/demo.js deleted file mode 100644 index 4737c3135..000000000 --- a/staff/fabian-romero/react/ponies/api/data/demo.js +++ /dev/null @@ -1,65 +0,0 @@ -import fs from 'fs' - -const users = [] // aqui es paras cargar la info en tu local - -const Fabian = { - name: 'Fabian', - surname: 'Romero', - email: 'fabian@romero.com', - username: 'Fabito', - password: 'fabi1234' -} - -const Valentin = { - name: 'Valentin', - surname: 'Romero', - email: 'valentin@romero.com', - username: 'Valito', - password: 'vali1234' -} - -users.push(Fabian) // aqui los pusheo' para añadirlos a las arrys vacias en caso de pedirlos en alguna funcion -users.push(Valentin) - - -const usersJSON = JSON.stringify(users) - -console.log('usersJSON', usersJSON) - -fs.writeFileSync('./data/users.json', usersJSON) - -const usersJSON2 = fs.readFileSync('./data/users.json', 'utf-8') - -console.log('usersJSON2', usersJSON2) - -const posts = [] - -const post1 = { - - author: "Fabito", - caption: "TOT EL DIA!!", - date: "2024-07-10T12:42:54.986Z", - id: "gho3apb3njs", - image: "https://media.tenor.com/LLTYGBtru5kAAAAM/mila-stauffer-whatever.gif" -} - -const post2 = { - author: "Valito", - caption: "ÑamÑam!", - date: "2024-07-11T09:41:57.634Z", - id: "gud3txmwlqo", - image: "https://media.tenor.com/u3QduFHVtJ8AAAAM/tacos-dog.gif" -} - -posts.push(post1) -posts.push(post2) - -const postsJSON = JSON.stringify(posts) - -console.log('postsJSON', postsJSON) - -fs.writeFileSync('./data/posts.json', postsJSON) - -const postsJSON2 = fs.readFileSync('./data/users.json', 'utf-8') - -console.log('postsJSON2', postsJSON2) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/findPost.js b/staff/fabian-romero/react/ponies/api/data/findPost.js deleted file mode 100644 index aa4cc46f3..000000000 --- a/staff/fabian-romero/react/ponies/api/data/findPost.js +++ /dev/null @@ -1,13 +0,0 @@ -import fs from 'fs' - -function findPost(condition) { - let json = fs.readFileSync('./data/posts.json', 'utf8') - - const posts = json ? JSON.parse(json) : [] - - const post = posts.find(condition) - - return post || null -} - -export default findPost // este se queda tal cual porque no tiene stringyfy \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/findPosts.js b/staff/fabian-romero/react/ponies/api/data/findPosts.js deleted file mode 100644 index cc0dd19db..000000000 --- a/staff/fabian-romero/react/ponies/api/data/findPosts.js +++ /dev/null @@ -1,14 +0,0 @@ -import fs from 'fs' - -function findPosts(condition) { - - let json = fs.readFileSync('./data/posts.json', 'utf8') - - const posts = json ? JSON.parse(json) : [] - - const foundPosts = posts.filter(condition) - - return foundPosts -} - -export default findPosts \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/findUser.js b/staff/fabian-romero/react/ponies/api/data/findUser.js deleted file mode 100644 index 394321a40..000000000 --- a/staff/fabian-romero/react/ponies/api/data/findUser.js +++ /dev/null @@ -1,13 +0,0 @@ -import fs from 'fs' - -function findUser(condition) { - let json = fs.readFileSync('./data/users.json', 'utf8') - - const users = json ? JSON.parse(json) : [] - - const user = users.find(condition) - - return user || null -} - -export default findUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/index.js b/staff/fabian-romero/react/ponies/api/data/index.js deleted file mode 100644 index d4065b125..000000000 --- a/staff/fabian-romero/react/ponies/api/data/index.js +++ /dev/null @@ -1,21 +0,0 @@ -import deletePost from './deletePost' -import findPost from './findPost' -import findPosts from './findPosts' -import findUser from './findUser' -import insertPost from './insertPost' -import insertUser from './insertUser' -import updatePost from './updatePost' -import updateUser from './updateUser' - -const data = { - deletePost, - findPost, - findPosts, - findUser, - insertPost, - insertUser, - updatePost, - updateUser -} - -export default data \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/insertPost.js b/staff/fabian-romero/react/ponies/api/data/insertPost.js deleted file mode 100644 index b8473e94b..000000000 --- a/staff/fabian-romero/react/ponies/api/data/insertPost.js +++ /dev/null @@ -1,15 +0,0 @@ -import fs from 'fs' - -function insertPost(post) { - let json = fs.readFileSync('./data/posts.json', 'utf8') - - const posts = json ? JSON.parse(json) : [] - - posts.push(post) - - json = JSON.stringify(posts) - - fs.writeFileSync('./data/posts.json', json) -} - -export default insertPost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/insertUser.js b/staff/fabian-romero/react/ponies/api/data/insertUser.js deleted file mode 100644 index 17456e8bc..000000000 --- a/staff/fabian-romero/react/ponies/api/data/insertUser.js +++ /dev/null @@ -1,15 +0,0 @@ -import fs from 'fs' - -function insertUser(user) { - let json = fs.readFileSync('./data/users.json', 'utf8') - - const users = json ? JSON.parse(json) : [] - - users.push(user) - - json = JSON.stringify(users) - - fs.writeFileSync('./data/users.json', json) -} - -export default insertUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/posts.json b/staff/fabian-romero/react/ponies/api/data/posts.json deleted file mode 100644 index fdb27ab7a..000000000 --- a/staff/fabian-romero/react/ponies/api/data/posts.json +++ /dev/null @@ -1,37 +0,0 @@ -[ - { - "author": "Valito", - "caption": "ÑamÑam!", - "date": "2024-07-11T09:41:57.634Z", - "id": "gud3txmwlqo", - "image": "https://media.tenor.com/u3QduFHVtJ8AAAAM/tacos-dog.gif" - }, - { - "author": "Valito", - "caption": "ÑamÑam!", - "date": "2024-07-11T09:41:57.634Z", - "id": "gud3txmwlqo", - "image": "https://media.tenor.com/u3QduFHVtJ8AAAAM/tacos-dog.gif" - }, - { - "author": "Valito", - "caption": "ÑamÑam!", - "date": "2024-07-11T09:41:57.634Z", - "id": "gud3txmwlqo", - "image": "https://media.tenor.com/u3QduFHVtJ8AAAAM/tacos-dog.gif" - }, - { - "author": "Valito", - "caption": "ÑamÑam!", - "date": "2024-07-11T09:41:57.634Z", - "id": "gud3txmwlqo", - "image": "https://media.tenor.com/u3QduFHVtJ8AAAAM/tacos-dog.gif" - }, - { - "author": "Valito", - "caption": "ÑamÑam!", - "date": "2024-07-11T09:41:57.634Z", - "id": "gud3txmwlqo", - "image": "https://media.tenor.com/u3QduFHVtJ8AAAAM/tacos-dog.gif" - } -] \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/updatePost.js b/staff/fabian-romero/react/ponies/api/data/updatePost.js deleted file mode 100644 index bd355b70d..000000000 --- a/staff/fabian-romero/react/ponies/api/data/updatePost.js +++ /dev/null @@ -1,25 +0,0 @@ -import fs from 'fs' - -import validate from '../validate.js' - -function updatePost(condition, post) { - validate.callback(condition, 'condition') - vaklidate.object(post, 'post') - - - let json = fs.readFileSync('./data/posts.json', 'utf8') - - const posts = json ? JSON.parse(json) : [] - - const index = posts.findIndex(condition) - - if (index > -1) { - posts.splice(index, 1, post) - - json = JSON.stringify(posts) - - fs.writeFileSync('./data/posts.json', json) - - } -} -export default updatePost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/updatePost.test.js b/staff/fabian-romero/react/ponies/api/data/updatePost.test.js deleted file mode 100644 index d3eb40bc3..000000000 --- a/staff/fabian-romero/react/ponies/api/data/updatePost.test.js +++ /dev/null @@ -1,13 +0,0 @@ -import updatePost from './updatePost.js' - -const post = { - - author: "Valito", - caption: "tiki tiki", - date: "2024-07-10T12:47:25.218Z", - id: "mi8drcuyseo", - image: "https://media.tenor.com/lhUSFl0CnpEAAAAM/frenchie-french.gif" - -} - -updatePost(post => post.id === "mi8drcuyseo", post) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/updateUser.js b/staff/fabian-romero/react/ponies/api/data/updateUser.js deleted file mode 100644 index 505a76a66..000000000 --- a/staff/fabian-romero/react/ponies/api/data/updateUser.js +++ /dev/null @@ -1,24 +0,0 @@ -import fs from 'fs' - -import validate from '../validate.js' - -function updateUser(condition, user) { - validate.callback(condition, 'condition') - validate.object(user, 'user') - - let json = fs.readFileSync('./data/user.json', 'uft8') - - const user = json ? JSON.parse(json) : [] - - const index = users.findIndex(condition) - - if (index > -1) { - users.splice(index, 1, user) - - json = JSON.stringify(users) - - fs.writeFileSync('./data/users.json', json) - } -} - -export default updateUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/data/users.json b/staff/fabian-romero/react/ponies/api/data/users.json deleted file mode 100644 index d6755965e..000000000 --- a/staff/fabian-romero/react/ponies/api/data/users.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "name": "Fabian", - "surname": "Romero", - "email": "fabian@romero.com", - "username": "Fabito", - "password": "fabi1234" - }, - { - "name": "Valentin", - "surname": "Romero", - "email": "valentin@romero.com", - "username": "Valito", - "password": "vali1234" - } -] \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/index.js b/staff/fabian-romero/react/ponies/api/index.js new file mode 100644 index 000000000..5968865d6 --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/index.js @@ -0,0 +1,287 @@ +import express from 'express' + +import logic from 'cor/logic/index.js' + +const api = express() + +api.use((req, res, next) => { + res.setHeader('Access-Control-Allow-Origin', '*') + res.setHeader('Access-Control-Allow-Headers', '*') + res.setHeader('Access-Control-Allow-Methods', '*') + + next() +}) + +api.get('/', (req, res) => { + res.send('Hello, World!') +}) + +api.post('/users', (req, res) => { + req.setEncoding('utf-8') + + req.on('data', json => { + const { name, surname, email, username, password, passwordRepeat } = JSON.parse(json) + + try { + logic.registerUser(name, surname, email, username, password, passwordRepeat, error => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.status(201).send() + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } + }) +}) + +api.post('/users/auth', (req, res) => { + req.setEncoding('utf-8') + + req.on('data', json => { + const { username, password } = JSON.parse(json) + + try { + logic.authenticateUser(username, password, error => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.send() + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } + }) +}) + +api.get('/users/:targetUsername/name', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + const { targetUsername } = req.params + + try { + logic.getUserName(username, targetUsername, (error, name) => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.json(name) + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } +}) + +api.get('/posts', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + try { + logic.getAllPosts(username, (error, posts) => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.json(posts) + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } +}) + +api.get('/posts/ponies', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + try { + logic.getAllPoniesPosts(username, (error, posts) => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.json(posts) + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } +}) + +api.get('/posts/favs', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + try { + logic.getAllFavPosts(username, (error, posts) => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.json(posts) + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } +}) + +api.post('/posts', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + req.setEncoding('utf-8') + + req.on('data', json => { + const { image, caption } = JSON.parse(json) + + try { + logic.createPost(username, image, caption, error => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.status(201).send() + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } + }) +}) + +api.delete('/posts/:postId', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + const { postId } = req.params + + try { + logic.deletePost(username, postId, error => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.status(204).send() + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } +}) + +api.patch('/posts/:postId/likes', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + const { postId } = req.params + + try { + logic.toggleLikePost(username, postId, error => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.status(204).send() + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } +}) + +api.patch('/posts/:postId/favs', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + const { postId } = req.params + + try { + logic.toggleFavPost(username, postId, error => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.status(204).send() + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } +}) + +api.patch('/users/:targetUsername/follows', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + const { targetUsername } = req.params + + try { + logic.toggleFollowUser(username, targetUsername, error => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.status(204).send() + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } +}) + +api.patch('/posts/:postId/caption', (req, res) => { + const { authorization } = req.headers + + const username = authorization.slice(6) + + const { postId } = req.params + + req.setEncoding('utf-8') + + req.on('data', json => { + const { caption } = JSON.parse(json) + + try { + logic.updatePostCaption(username, postId, caption, error => { + if (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + + return + } + + res.status(204).send() + }) + } catch (error) { + res.status(500).json({ error: error.constructor.name, message: error.message }) + } + }) +}) + +api.listen(8080, () => console.log('API is up')) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/authenticateUser.js b/staff/fabian-romero/react/ponies/api/logic/authenticateUser.js deleted file mode 100644 index 5d148c68e..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/authenticateUser.js +++ /dev/null @@ -1,18 +0,0 @@ -import data from "../data/index.js" - -import validate from "../validate.js" - -const authenticateUser = (username, password) => { - validate.username(username) - validate.password(password) - - const user = data.findUser(user => user.username === username) - - if (user === null) - throw new Error('user not found') - - if (user.password !== password) - throw new Error('wrong password') -} - -export default authenticateUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/authenticateUser.test.js b/staff/fabian-romero/react/ponies/api/logic/authenticateUser.test.js deleted file mode 100644 index d05db5fd1..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/authenticateUser.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import authenticateUser from './authenticateUser.js' - -authenticateUser("valito", "vali1234") \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/createPost.js b/staff/fabian-romero/react/ponies/api/logic/createPost.js deleted file mode 100644 index b4df88907..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/createPost.js +++ /dev/null @@ -1,27 +0,0 @@ -import data from '../data/index.js' - -import generateId from '../util/generateId' - -const createPost = (image, caption) => { - - const user = data.findeUser(user => user.username == username) - - if (user === null) - throw new Error('user not found') - - if (!image.startsWith('http')) - throw new Error('invalid image') - - const post = { - id: generateId(), - image, - caption, - author: username, - date: new Date().toISOString(), - likes: [] - } - - data.insertPost(post) -} - -export default createPost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/createPost.test.js b/staff/fabian-romero/react/ponies/api/logic/createPost.test.js deleted file mode 100644 index 9ebcd3390..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/createPost.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import createPost from './createPost.js' - -createPost(//MODIFICAR EJEMPLO) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/deletePost.js b/staff/fabian-romero/react/ponies/api/logic/deletePost.js deleted file mode 100644 index 37ae3bf7c..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/deletePost.js +++ /dev/null @@ -1,20 +0,0 @@ -import data from '../data/index.js' - -const deletePost = (username, postId) => { - - const user = data.findUser(user => user.username === username) - - if (user = null) - throw new Error('user not found') - - - if (postId.trim().length === 0) throw new Error('invalid postId') - - const post = data.findPost(post => post.id === postId) - - if (post === null) throw new Error('post not found') - - data.deletePost(post => post.id === postId) -} - -export default deletePost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/deletePost.test.js b/staff/fabian-romero/react/ponies/api/logic/deletePost.test.js deleted file mode 100644 index 2cdbcbb5f..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/deletePost.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import deletePost from './deletePost.js' - -deletePost("samu", "3cpx3rsbvqw0") \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getAllFavPosts.js b/staff/fabian-romero/react/ponies/api/logic/getAllFavPosts.js deleted file mode 100644 index f469c0989..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getAllFavPosts.js +++ /dev/null @@ -1,28 +0,0 @@ -import data from '../data/index.js' - -const getAllFavPosts = username => { - - const user = data.findUser(user => user.username === sessionStorage.username) - - if (user === null) - throw new Error('user not found') - - const posts = data.findPosts(post => user.favs.includes(post.id)) - - posts.forEach(post => { - post.fav = user.favs.includes(post.id) - post.like = post.likes.includes(sessionStorage.username) - - const author = data.findUser(user => user.username === post.author) - - post.author = { - username: author.username, - avatar: author.avatar, - following: user.following.includes(author.username) - } - }) - - return posts.reverse() -} - -export default getAllFavPosts \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getAllFavPosts.test.js b/staff/fabian-romero/react/ponies/api/logic/getAllFavPosts.test.js deleted file mode 100644 index 0afe5c75e..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getAllFavPosts.test.js +++ /dev/null @@ -1,5 +0,0 @@ -import getAllFavPosts from './getAllFavPosts.js' - -const posts = getAllFavPosts("samu") - -console.log(posts) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getAllPoniesPosts.js b/staff/fabian-romero/react/ponies/api/logic/getAllPoniesPosts.js deleted file mode 100644 index 566f9146d..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getAllPoniesPosts.js +++ /dev/null @@ -1,30 +0,0 @@ -import data from '../data/index.js' - -const getAllPoniesPosts = username => { - - - const user = data.findUser(user => user.username === - username) - - if (user === null) - throw new Error('user not found') - - const posts = data.findPosts(post => user.following.includes(post.author)) - - posts.forEach(post => { - post.fav = user.favs.includes(post.id) - post.like = post.likes.includes(username) - - const author = data.findUser(user => user.username === post.author) - - post.author = { - username: author.username, - avatar: author.avatar, - following: user.following.includes(author.username) - } - }) - - return posts.reverse() -} - -export default getAllPoniesPosts \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getAllPoniesPosts.test.js b/staff/fabian-romero/react/ponies/api/logic/getAllPoniesPosts.test.js deleted file mode 100644 index d95e01f5f..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getAllPoniesPosts.test.js +++ /dev/null @@ -1,5 +0,0 @@ -import getAllPoniesPosts from './getAllPoniesPosts.js' - -const posts = getAllPoniesPosts("samu") - -console.log(posts) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getAllPosts.js b/staff/fabian-romero/react/ponies/api/logic/getAllPosts.js deleted file mode 100644 index b4ab9f5a2..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getAllPosts.js +++ /dev/null @@ -1,28 +0,0 @@ -import data from '../data/index.js' - -const getAllPosts = username => { - - const user = data.findUser(user => user.username === username) - - if (user === null) - throw new Error('user not found') - - const posts = data.findPosts(() => true) - - posts.forEach(post => { - post.fav = user.favs.includes(post.id) - post.like = post.likes.includes(username) - - const author = data.findUser(user => user.username === post.author) - - post.author = { - username: author.username, - avatar: author.avatar, - following: user.following.includes(author.username) - } - }) - - return posts.reverse() -} - -export default getAllPosts \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getAllPosts.test.js b/staff/fabian-romero/react/ponies/api/logic/getAllPosts.test.js deleted file mode 100644 index 12a1130c9..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getAllPosts.test.js +++ /dev/null @@ -1,5 +0,0 @@ -import getAllPosts from './getAllPosts.js' - -const posts = getAllPosts("samu") - -console.log(posts) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getUser.js b/staff/fabian-romero/react/ponies/api/logic/getUser.js deleted file mode 100644 index 5ab5e4eb9..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getUser.js +++ /dev/null @@ -1,14 +0,0 @@ -import data from '../data/index.js' - -const getUser = username => { - const user = data.findUser(user => user.username === username) - - if (user === null) - throw new Error('user not found') - - delete user.password - - return user -} - -export default getUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getUser.test.js b/staff/fabian-romero/react/ponies/api/logic/getUser.test.js deleted file mode 100644 index 89421b14b..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getUser.test.js +++ /dev/null @@ -1,5 +0,0 @@ -import getUser from './getUser.js' - -const user = getUser("samu") - -console.log(user) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getUserName.js b/staff/fabian-romero/react/ponies/api/logic/getUserName.js deleted file mode 100644 index 8f228ba4f..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getUserName.js +++ /dev/null @@ -1,12 +0,0 @@ -import data from "../data/index.js" - -const getUserName = username => { - const user = data.findUser(user => user.username === username) - - if (user === null) - throw new Error('user not found') - - return user.name -} - -export default getUserName \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getUserName.test.js b/staff/fabian-romero/react/ponies/api/logic/getUserName.test.js deleted file mode 100644 index 8c75e8616..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getUserName.test.js +++ /dev/null @@ -1,5 +0,0 @@ -import getUserName from './getUserName.js' - -const user = getUserName("samu") - -console.log(user) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/getUserUsername.js b/staff/fabian-romero/react/ponies/api/logic/getUserUsername.js deleted file mode 100644 index 8e33b442d..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/getUserUsername.js +++ /dev/null @@ -1,3 +0,0 @@ -const getUserUsername = () => sessionStorage.username - -export default getUserUsername \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/registerUser.js b/staff/fabian-romero/react/ponies/api/logic/registerUser.js deleted file mode 100644 index 65cb692f9..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/registerUser.js +++ /dev/null @@ -1,38 +0,0 @@ -import data from '../data/index.js' -import validate from '..//validate.js' - -const registerUser = (name, surname, email, username, password, passwordRepeat) => { - validate.name(name) - validate.name(surname, 'surname') - validate.email(email) - validate.username(username) - validate.password(password) - - if (password !== passwordRepeat) - throw new Error('passwords do not match') - - let user = data.findUser(user => user.email === email) - - if (user !== null) - throw new Error('email already exists') - - user = data.findUser(user => user.username === username) - - if (user !== null) - throw new Error('username already exists') - - user = { - name, - surname, - email, - username, - password, - favs: [], - following: [], - avatar: "https://i.pinimg.com/564x/f6/21/64/f621641d5082d74385fabb5c2afb62f5.jpg" - } - - data.insertUser(user) -} - -export default registerUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/registerUser.test.js b/staff/fabian-romero/react/ponies/api/logic/registerUser.test.js deleted file mode 100644 index c5cea719c..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/registerUser.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import registerUser from './registerUser.js' - -registerUser("Marti", "Herms", "marti@herms.com", "marti", "123456789", "123456789") \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/toggleFavPost.js b/staff/fabian-romero/react/ponies/api/logic/toggleFavPost.js deleted file mode 100644 index 33ba30629..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/toggleFavPost.js +++ /dev/null @@ -1,26 +0,0 @@ -import data from '../data/index.js' - -function toggleFavPost(username, postId) { - if (postId.trim().length === 0) throw new Error('invalid postId') - - const user = data.findUser(user => user.username === sessionStorage.username) - - if (user === null) - throw new Error('user not found') - - const post = data.findPost(post => post.id === postId) - - if (post === null) - throw new Error('post not found') - - const index = user.favs.indexOf(postId) - - if (index < 0) - user.favs.push(postId) - else - user.favs.splice(index, 1) - - data.updateUser(user => user.username === username, user) -} - -export default toggleFavPost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/toggleFavPost.test.js b/staff/fabian-romero/react/ponies/api/logic/toggleFavPost.test.js deleted file mode 100644 index 64a578103..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/toggleFavPost.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import toggleFavPost from './toggleFavPost.js' - -toggleFavPost("samu", "abcdefghi") \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/toggleFollowUser.js b/staff/fabian-romero/react/ponies/api/logic/toggleFollowUser.js deleted file mode 100644 index 62006ca42..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/toggleFollowUser.js +++ /dev/null @@ -1,24 +0,0 @@ -import data from '../data/index.js' - -function toggleFollowUser(username) { - if (!username.trim().length) throw new Error('invalid username') - - const user = data.findUser(user => user.username === username) - - if (!user) throw new Error('user not found') - - const following = data.findUser(user => user.username === targetUsername) - - if (!following) throw new Error('following user not found') - - const index = user.following.indexOf(targetUsername) - - if (index < 0) - user.following.push(username) - else - user.following.splice(index, 1) - - data.updateUser(user => user.username === username, user) -} - -export default toggleFollowUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/toggleFollowUser.test.js b/staff/fabian-romero/react/ponies/api/logic/toggleFollowUser.test.js deleted file mode 100644 index cf197ec9f..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/toggleFollowUser.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import toggleFollowUser from './toggleFollowUser.js' - -toggleFollowUser("samu", "marti") \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/toggleLikePost.js b/staff/fabian-romero/react/ponies/api/logic/toggleLikePost.js deleted file mode 100644 index 04c152ffd..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/toggleLikePost.js +++ /dev/null @@ -1,25 +0,0 @@ -import data from '../data/index.js' - -function toggleLikePost(username, postId) { - - const user = data.findUser(user => user.username === username) - if (!user) throw new Error('user not found') - - if (postId.trim().length === 0) throw new Error('invalid postId') - - const post = data.findPost(post => post.id === postId) - - if (post === null) - throw new Error('post not found') - - const index = post.likes.indexOf(username) - - if (index < 0) - post.likes.push(username) - else - post.likes.splice(index, 1) - - data.updatePost(post => post.id === postId, post) -} - -export default toggleLikePost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/toggleLikePost.test.js b/staff/fabian-romero/react/ponies/api/logic/toggleLikePost.test.js deleted file mode 100644 index bf21c4353..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/toggleLikePost.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import toggleLikePost from './toggleLikePost.js' - -toggleLikePost("samu", "kg6nl8j0imo") \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/updateAvatar.js b/staff/fabian-romero/react/ponies/api/logic/updateAvatar.js deleted file mode 100644 index 91779e0a4..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/updateAvatar.js +++ /dev/null @@ -1,15 +0,0 @@ -import data from '../data/index.js' - -const updateAvatar = (username, newAvatar) => { - if (!newAvatar.starWith('http')) throw new Error('invalid image') - - const user = data.findUser(user => user.username === username) - - if (user === null) throw new Error('user not found') - - user.avatar = newAvatar - - data.updateUser(user => user.username === username) -} - -export default updateAvatar \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/updateAvatar.test.js b/staff/fabian-romero/react/ponies/api/logic/updateAvatar.test.js deleted file mode 100644 index 70d2bed29..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/updateAvatar.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import updateAvatar from './updateAvatar.js' - -updateAvatar("samu", "https//:jbvidbviobfiofobi") \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/updatePassword.js b/staff/fabian-romero/react/ponies/api/logic/updatePassword.js deleted file mode 100644 index 79250ef31..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/updatePassword.js +++ /dev/null @@ -1,27 +0,0 @@ -import data from '../data/index.js' - -const USER_REGEX = /^(?!.*\s{2})[a-zA-Z0-9._-]{4,16}$/ - -const updatePassword = (username, oldPassword, newPassword, newPasswordRepeat) => { - if (!USER_REGEX.test(username)) throw new Error('invalid username') - - if (oldPassword.trim().length < 8) throw new Error('invalid password') - - if (newPassword.trim().length < 8) throw new Error('invalid password') - - if (oldPassword === newPassword) throw new Error('new password is equal to old password') - - if (newPassword !== newPasswordRepeat) throw new Error('passwords do not match') - - const user = data.findUser(user => user.username === username) - - if (user === null) throw new Error('user not found') - - if (oldPassword !== user.password) throw new Error('invalid password') - - user.password = newPassword - - data.updateUser(user => user.username === username, user) -} - -export default updatePassword \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/updatePassword.test.js b/staff/fabian-romero/react/ponies/api/logic/updatePassword.test.js deleted file mode 100644 index ab8fffebb..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/updatePassword.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import updatePassword from './updatePassword.js' - -updatePassword("123123123", "123456789", "samu") \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/updatePostCaption.js b/staff/fabian-romero/react/ponies/api/logic/updatePostCaption.js deleted file mode 100644 index 094574c93..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/updatePostCaption.js +++ /dev/null @@ -1,20 +0,0 @@ -import data from '../data/index.js' - -const updatePostCaption = (username, postId, newCaption) => { - - const user = data.findUser(user => user.username === username) - - if (user === null) throw new Error('user not found') - - if (postId.trim().length === 0) throw new Error('invalid postId') - - const post = data.findPost(post => post.id === postId) - - if (post === undefined) throw new Error('post not found') - - post.caption = newCaption - - data.updatePost(post => post.id === postId, post) -} - -export default updatePostCaption \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/logic/updatePostCaption.test.js b/staff/fabian-romero/react/ponies/api/logic/updatePostCaption.test.js deleted file mode 100644 index ce5a7da27..000000000 --- a/staff/fabian-romero/react/ponies/api/logic/updatePostCaption.test.js +++ /dev/null @@ -1,3 +0,0 @@ -import updatePostCaption from './updatePostCaption.js' - -updatePostCaption("samu", "abcdefghi", "Hello, soy Samu") \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/package-lock.json b/staff/fabian-romero/react/ponies/api/package-lock.json new file mode 100644 index 000000000..9c436f5a8 --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/package-lock.json @@ -0,0 +1,706 @@ +{ + "name": "api", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "api", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "cor": "file:../cor", + "express": "^4.19.2" + } + }, + "../cor": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cor": { + "resolved": "../cor", + "link": true + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + } + } +} diff --git a/staff/fabian-romero/react/ponies/api/package.json b/staff/fabian-romero/react/ponies/api/package.json index 5b9d33718..8a7e9b1c1 100644 --- a/staff/fabian-romero/react/ponies/api/package.json +++ b/staff/fabian-romero/react/ponies/api/package.json @@ -5,8 +5,16 @@ "type": "module", "main": "index.js", "scripts": { + "start": "node .", + "watch": "node --watch .", + "inspect": "node --inspect-brk .", "test": "echo \"Error: no test specified\" && exit 1" }, + "keywords": [], "author": "", - "license": "ISC" + "license": "ISC", + "dependencies": { + "cor": "file:../cor", + "express": "^4.19.2" + } } \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/authenticateUser.sh b/staff/fabian-romero/react/ponies/api/test/authenticateUser.sh new file mode 100755 index 000000000..0d81fb0f0 --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/authenticateUser.sh @@ -0,0 +1 @@ +curl -v http://localhost:8080/users/authenticateUser -X POST -d '{"username":"Fabito","password":"fabi1234"}' \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/create-post.sh b/staff/fabian-romero/react/ponies/api/test/create-post.sh new file mode 100644 index 000000000..5bfb7bf68 --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/create-post.sh @@ -0,0 +1 @@ +curl -v http://localhost:8080/posts -X POST -d '{"image":"http//image","caption":"nones"}' -H "Authorization: Basic Fabito" \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/delete-post.sh b/staff/fabian-romero/react/ponies/api/test/delete-post.sh new file mode 100644 index 000000000..8bb8d353f --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/delete-post.sh @@ -0,0 +1 @@ +curl -v http://localhost:8080/posts/fgefrmf1i00 -X DELETE -H "Authorization: Basic Valito" \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/get-all-fav-posts.sh b/staff/fabian-romero/react/ponies/api/test/get-all-fav-posts.sh new file mode 100644 index 000000000..9834c4398 --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/get-all-fav-posts.sh @@ -0,0 +1 @@ +curl -v http://localhost:8080/posts/favs -H "Authorization: Basic Fabito" \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/get-all-ponies.sh b/staff/fabian-romero/react/ponies/api/test/get-all-ponies.sh new file mode 100755 index 000000000..1d606de1c --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/get-all-ponies.sh @@ -0,0 +1,7 @@ +# # curl -v http://localhost:8080/users/:userId/name -X GET '{"username":"Fabito","password":"fabi1234"}' + +# aquí el userId se tiene que pasar el parametro ID para encontrar al usuario + + +curl -v http://localhost:8080/posts -X GET -H "Authorization: Basic Valito" + diff --git a/staff/fabian-romero/react/ponies/api/test/get-all-posts.sh b/staff/fabian-romero/react/ponies/api/test/get-all-posts.sh new file mode 100755 index 000000000..1d606de1c --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/get-all-posts.sh @@ -0,0 +1,7 @@ +# # curl -v http://localhost:8080/users/:userId/name -X GET '{"username":"Fabito","password":"fabi1234"}' + +# aquí el userId se tiene que pasar el parametro ID para encontrar al usuario + + +curl -v http://localhost:8080/posts -X GET -H "Authorization: Basic Valito" + diff --git a/staff/fabian-romero/react/ponies/api/test/get-user.sh b/staff/fabian-romero/react/ponies/api/test/get-user.sh new file mode 100755 index 000000000..a5ef204b7 --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/get-user.sh @@ -0,0 +1,6 @@ +# # curl -v http://localhost:8080/users/:userId/name -X GET '{"username":"Fabito","password":"fabi1234"}' + +# aquí el userId se tiene que pasar el parametro ID para encontrar al usuario + + +curl -v http://localhost:8080/users/Valito/name -X GET -H "Authorization: Basic Valito" \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/index.js b/staff/fabian-romero/react/ponies/api/test/index.js deleted file mode 100644 index fd1dbb539..000000000 --- a/staff/fabian-romero/react/ponies/api/test/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import express from 'express' - -const api = express() - -api.get('/hello', (req, res) => { - res.send('Hello, World!') -}) - -api.listen(8080, () => console.log('server up')) \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/register.sh b/staff/fabian-romero/react/ponies/api/test/register.sh new file mode 100755 index 000000000..09ceef17c --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/register.sh @@ -0,0 +1 @@ +curl -v http://localhost:8080/users -X POST -d '{"name":"Peter","surname":"Pan","email":"peter@pan.com","username":"peterpan","password":"123123123","passwordRepeat":"123123123"}' \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/toggle-fav-post.sh b/staff/fabian-romero/react/ponies/api/test/toggle-fav-post.sh new file mode 100644 index 000000000..07198d678 --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/toggle-fav-post.sh @@ -0,0 +1 @@ +curl -v http://localhost:8080/users/nico/follows -X PATCH -H "Authorization: Basic Valito" \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/toggle-follow-user.sh b/staff/fabian-romero/react/ponies/api/test/toggle-follow-user.sh new file mode 100644 index 000000000..07198d678 --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/toggle-follow-user.sh @@ -0,0 +1 @@ +curl -v http://localhost:8080/users/nico/follows -X PATCH -H "Authorization: Basic Valito" \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/toggle-like-post.sh b/staff/fabian-romero/react/ponies/api/test/toggle-like-post.sh new file mode 100644 index 000000000..c4b826b35 --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/toggle-like-post.sh @@ -0,0 +1 @@ +curl -v http://localhost:8080/posts/1ksy8z2bdn6o/likes -X PATCH -H "Authorization: Basic Valito" \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/api/test/update-post-caption.sh b/staff/fabian-romero/react/ponies/api/test/update-post-caption.sh new file mode 100644 index 000000000..8f678bb4d --- /dev/null +++ b/staff/fabian-romero/react/ponies/api/test/update-post-caption.sh @@ -0,0 +1 @@ +curl -v http://localhost:8080/posts/1isteie3c2gw/caption -X PATCH -d '{"caption":"ta bien"}' -H "Authorization: Basic samu" -H "Content-Type: application/json" \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/.vite/deps/_metadata.json b/staff/fabian-romero/react/ponies/app/.vite/deps/_metadata.json new file mode 100644 index 000000000..ed976906d --- /dev/null +++ b/staff/fabian-romero/react/ponies/app/.vite/deps/_metadata.json @@ -0,0 +1,8 @@ +{ + "hash": "22bd1fe3", + "configHash": "4261ea77", + "lockfileHash": "e3b0c442", + "browserHash": "01a6ed35", + "optimized": {}, + "chunks": {} +} \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/.vite/deps/package.json b/staff/fabian-romero/react/ponies/app/.vite/deps/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/staff/fabian-romero/react/ponies/app/.vite/deps/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/staff/fabian-romero/react/ponies/app/data/deletePost.js b/staff/fabian-romero/react/ponies/app/data/deletePost.js deleted file mode 100644 index c84dd19fd..000000000 --- a/staff/fabian-romero/react/ponies/app/data/deletePost.js +++ /dev/null @@ -1,13 +0,0 @@ -function deletePost(condition) { - const posts = localStorage.posts !== undefined ? JSON.parse(localStorage.posts) : [] - - const postIndex = posts.findIndex(condition) - - if (postIndex > -1) { - posts.splice(postIndex, 1) - - localStorage.posts = JSON.stringify(posts) - } -} - -export default deletePost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/data/findPost.js b/staff/fabian-romero/react/ponies/app/data/findPost.js deleted file mode 100644 index d48a190de..000000000 --- a/staff/fabian-romero/react/ponies/app/data/findPost.js +++ /dev/null @@ -1,9 +0,0 @@ -function findPost(condition) { - const posts = localStorage.posts !== undefined ? JSON.parse(localStorage.posts) : [] - - const post = posts.find(condition) - - return post || null -} - -export default findPost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/data/findPosts.js b/staff/fabian-romero/react/ponies/app/data/findPosts.js deleted file mode 100644 index e06dd1e3e..000000000 --- a/staff/fabian-romero/react/ponies/app/data/findPosts.js +++ /dev/null @@ -1,9 +0,0 @@ -function findPosts(condition) { - const posts = localStorage.posts !== undefined ? JSON.parse(localStorage.posts) : [] - - const foundPosts = posts.filter(condition) - - return foundPosts -} - -export default findPosts \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/data/findUser.js b/staff/fabian-romero/react/ponies/app/data/findUser.js deleted file mode 100644 index 7b1e9baab..000000000 --- a/staff/fabian-romero/react/ponies/app/data/findUser.js +++ /dev/null @@ -1,9 +0,0 @@ -function findUser(condition) { - const users = localStorage.users !== undefined ? JSON.parse(localStorage.users) : [] - - const user = users.find(condition) - - return user || null -} - -export default findUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/data/insertPost.js b/staff/fabian-romero/react/ponies/app/data/insertPost.js deleted file mode 100644 index 0a6bc00dc..000000000 --- a/staff/fabian-romero/react/ponies/app/data/insertPost.js +++ /dev/null @@ -1,9 +0,0 @@ -function insertPost(post) { - const posts = localStorage.posts !== undefined ? JSON.parse(localStorage.posts) : [] - - posts.push(post) - - localStorage.posts = JSON.stringify(posts) -} - -export default insertPost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/data/insertUser.js b/staff/fabian-romero/react/ponies/app/data/insertUser.js deleted file mode 100644 index 5eb356d3c..000000000 --- a/staff/fabian-romero/react/ponies/app/data/insertUser.js +++ /dev/null @@ -1,9 +0,0 @@ -function insertUser(user) { - const users = localStorage.users !== undefined ? JSON.parse(localStorage.users) : [] - - users.push(user) - - localStorage.users = JSON.stringify(users) -} - -export default insertUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/data/updatePost.js b/staff/fabian-romero/react/ponies/app/data/updatePost.js deleted file mode 100644 index e8fdaa17d..000000000 --- a/staff/fabian-romero/react/ponies/app/data/updatePost.js +++ /dev/null @@ -1,13 +0,0 @@ -function updatePost(condition, post) { - const posts = localStorage.posts !== undefined ? JSON.parse(localStorage.posts) : [] - - const index = posts.findIndex(condition) - - if (index > -1) { - posts.splice(index, 1, post) - - localStorage.posts = JSON.stringify(posts) - } -} - -export default updatePost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/data/updateUser.js b/staff/fabian-romero/react/ponies/app/data/updateUser.js deleted file mode 100644 index bd7a0ca59..000000000 --- a/staff/fabian-romero/react/ponies/app/data/updateUser.js +++ /dev/null @@ -1,13 +0,0 @@ -function updateUser(condition, user) { - const users = localStorage.users !== undefined ? JSON.parse(localStorage.users) : [] - - const index = users.findIndex(condition) - - if (index > -1) { - users.splice(index, 1, user) - - localStorage.users = JSON.stringify(users) - } -} - -export default updateUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/createPost.js b/staff/fabian-romero/react/ponies/app/logic/createPost.js index 53305cf00..d3354f623 100644 --- a/staff/fabian-romero/react/ponies/app/logic/createPost.js +++ b/staff/fabian-romero/react/ponies/app/logic/createPost.js @@ -1,21 +1,33 @@ -import data from '../data' +import validate from '../../cor/validate' -import generateId from '../util/generateId' +const createPost = (image, caption, callback) => { + validate.url(image) + validate.string(caption) + validate.callback(callback) -const createPost = (image, caption) => { - if (!image.startsWith('http')) - throw new Error('invalid image') + const xhr = new XMLHttpRequest - const post = { - id: generateId(), - image: image, - caption: caption, - author: sessionStorage.username, - date: new Date().toISOString(), - likes: [] + xhr.onload = () => { + if (xhr.status === 201) { + callback(null) + + return + } + + const { error, message } = JSON.parse(xhr.response) + + const constructor = window[error] + + callback(new constructor(message)) } - data.insertPost(post) + xhr.onerror = () => callback(new Error('network error')) + + xhr.open('POST', 'http://localhost:8080/posts') + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + xhr.setRequestHeader('Content-Type', 'application/json') + + xhr.send(JSON.stringify({ image, caption })) } export default createPost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/deletePost.js b/staff/fabian-romero/react/ponies/app/logic/deletePost.js index 801fb6695..4056d7424 100644 --- a/staff/fabian-romero/react/ponies/app/logic/deletePost.js +++ b/staff/fabian-romero/react/ponies/app/logic/deletePost.js @@ -1,13 +1,31 @@ -import data from '../data' +import validate from '../../cor/validate' -const deletePost = postId => { - if (postId.trim().length === 0) throw new Error('invalid postId') +const deletePost = (postId, callback) => { + validate.string(postId) + validate.callback(callback) - const post = data.findPost(post => post.id === postId) + const xhr = new XMLHttpRequest - if (post === null) throw new Error('post not found') + xhr.onload = () => { + if (xhr.status === 204) { + callback(null) - data.deletePost(post => post.id === postId) + return + } + + const { error, message } = JSON.parse(xhr.response) + + const constructor = window[error] + + callback(new constructor(message)) + } + + xhr.onerror = () => callback(new Error('network error')) + + xhr.open('DELETE', `http://localhost:8080/posts/${postId}`) + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + + xhr.send() } export default deletePost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/getAllFavPosts.js b/staff/fabian-romero/react/ponies/app/logic/getAllFavPosts.js index 9f522c193..2ee38397a 100644 --- a/staff/fabian-romero/react/ponies/app/logic/getAllFavPosts.js +++ b/staff/fabian-romero/react/ponies/app/logic/getAllFavPosts.js @@ -1,27 +1,27 @@ -import data from '../data' +const getAllFavPosts = callback => { + const xhr = new XMLHttpRequest -const getAllFavPosts = () => { - const user = data.findUser(user => user.username === sessionStorage.username) + xhr.onload = () => { + if (xhr.status === 200) { + const posts = JSON.parse(xhr.response) - if (user === null) - throw new Error('user not found') + callback(null, posts) - const posts = data.findPosts(post => user.favs.includes(post.id)) + return + } - posts.forEach(post => { - post.fav = user.favs.includes(post.id) - post.like = post.likes.includes(sessionStorage.username) + const { error, message } = JSON.parse(xhr.response) - const author = data.findUser(user => user.username === post.author) + const constructor = window[error] - post.author = { - username: author.username, - avatar: author.avatar, - following: user.following.includes(author.username) - } - }) + callback(new constructor(message)) + } + + xhr.onerror = () => callback(new Error('network error')) - return posts.reverse() + xhr.open('GET', 'http://localhost:8080/posts/favs') + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + xhr.send() } export default getAllFavPosts \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/getAllPoniesPosts.js b/staff/fabian-romero/react/ponies/app/logic/getAllPoniesPosts.js index ccb54527c..763bd5df7 100644 --- a/staff/fabian-romero/react/ponies/app/logic/getAllPoniesPosts.js +++ b/staff/fabian-romero/react/ponies/app/logic/getAllPoniesPosts.js @@ -1,27 +1,28 @@ -import data from '../data' -const getAllPoniesPosts = () => { - const user = data.findUser(user => user.username === sessionStorage.username) +const getAllPoniesPosts = callback => { + const xhr = new XMLHttpRequest - if (user === null) - throw new Error('user not found') + xhr.onload = () => { + if (xhr.status === 200) { + const posts = JSON.parse(xhr.response) - const posts = data.findPosts(post => user.following.includes(post.author)) + callback(null, posts) - posts.forEach(post => { - post.fav = user.favs.includes(post.id) - post.like = post.likes.includes(sessionStorage.username) + return + } - const author = data.findUser(user => user.username === post.author) + const { error, message } = JSON.parse(xhr.response) - post.author = { - username: author.username, - avatar: author.avatar, - following: user.following.includes(author.username) - } - }) + const constructor = window[error] + + callback(new constructor(message)) + } + + xhr.onerror = () => callback(new Error('network error')) - return posts.reverse() + xhr.open('GET', 'http://localhost:8080/posts/ponies') + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + xhr.send() } export default getAllPoniesPosts \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/getAllPosts.js b/staff/fabian-romero/react/ponies/app/logic/getAllPosts.js index 1b459e6d9..aa1580198 100644 --- a/staff/fabian-romero/react/ponies/app/logic/getAllPosts.js +++ b/staff/fabian-romero/react/ponies/app/logic/getAllPosts.js @@ -1,27 +1,27 @@ -import data from '../data' +const getAllPosts = callback => { + const xhr = new XMLHttpRequest -const getAllPosts = () => { - const user = data.findUser(user => user.username === sessionStorage.username) + xhr.onload = () => { + if (xhr.status === 200) { + const posts = JSON.parse(xhr.response) - if (user === null) - throw new Error('user not found') + callback(null, posts) - const posts = data.findPosts(() => true) + return + } - posts.forEach(post => { - post.fav = user.favs.includes(post.id) - post.like = post.likes.includes(sessionStorage.username) + const { error, message } = JSON.parse(xhr.response) - const author = data.findUser(user => user.username === post.author) + const constructor = window[error] - post.author = { - username: author.username, - avatar: author.avatar, - following: user.following.includes(author.username) - } - }) + callback(new constructor(message)) + } + + xhr.onerror = () => callback(new Error('network error')) - return posts.reverse() + xhr.open('GET', 'http://localhost:8080/posts') + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + xhr.send() } export default getAllPosts \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/getUserName.js b/staff/fabian-romero/react/ponies/app/logic/getUserName.js index 911a09a83..a7cdd48d3 100644 --- a/staff/fabian-romero/react/ponies/app/logic/getUserName.js +++ b/staff/fabian-romero/react/ponies/app/logic/getUserName.js @@ -1,12 +1,27 @@ -import data from '../data' +const getUserName = callback => { + const xhr = new XMLHttpRequest -const getUserName = () => { - const user = data.findUser(user => user.username === sessionStorage.username) + xhr.onload = () => { + if (xhr.status === 200) { + const name = JSON.parse(xhr.response) - if (user === null) - throw new Error('user not found') + callback(null, name) - return user.name + return + } + + const { error, message } = JSON.parse(xhr.response) + + const constructor = window[error] + + callback(new constructor(message)) + } + + xhr.onerror = () => callback(new Error('network error')) + + xhr.open('GET', `http://localhost:8080/users/${sessionStorage.username}/name`) + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + xhr.send() } export default getUserName \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/isUserLoggedIn.js b/staff/fabian-romero/react/ponies/app/logic/isUserLoggedIn.js index f3ee76d02..78bf181a6 100644 --- a/staff/fabian-romero/react/ponies/app/logic/isUserLoggedIn.js +++ b/staff/fabian-romero/react/ponies/app/logic/isUserLoggedIn.js @@ -1,8 +1,4 @@ function isUserLoggedIn() { - //if (sessionStorage.username) return true - //return false - - // return sessionStorage.username ? true : false return !!sessionStorage.username } diff --git a/staff/fabian-romero/react/ponies/app/logic/loginUser.js b/staff/fabian-romero/react/ponies/app/logic/loginUser.js index 7c66a018b..bc1134103 100644 --- a/staff/fabian-romero/react/ponies/app/logic/loginUser.js +++ b/staff/fabian-romero/react/ponies/app/logic/loginUser.js @@ -1,21 +1,34 @@ -import data from '../data' +import validate from "../../cor/validate" -const loginUser = (username, password) => { - if (username.trim().length < 4) - throw new Error('invalid username') +const loginUser = (username, password, callback) => { + validate.username(username) + validate.password(password) + validate.callback(callback) - if (password.trim().length < 8) - throw new Error('invalid password') + const xhr = new XMLHttpRequest - const user = data.findUser(user => user.username === username) + xhr.onload = () => { + if (xhr.status === 200) { + sessionStorage.username = username - if (user === null) - throw new Error('username does not exist') + callback(null) - if (user.password !== password) - throw new Error('wrong password') + return + } - sessionStorage.username = username + const { error, message } = JSON.parse(xhr.response) + + const constructor = window[error] + + callback(new constructor(message)) + } + + xhr.onerror = () => callback(new Error('network error')) + + xhr.open('POST', 'http://localhost:8080/users/auth') + xhr.setRequestHeader('Content-Type', 'application/json') + + xhr.send(JSON.stringify({ username, password })) } export default loginUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/registerUser.js b/staff/fabian-romero/react/ponies/app/logic/registerUser.js index 17c8938a6..5cfe9c8ef 100644 --- a/staff/fabian-romero/react/ponies/app/logic/registerUser.js +++ b/staff/fabian-romero/react/ponies/app/logic/registerUser.js @@ -1,48 +1,34 @@ -import data from '../data' +import validate from '../../cor/validate' -const EMAIL_REGEX = /^[a-z0-9._]+@[a-z0-9.-]{3,63}\.[a-z]{2,10}$/ +const registerUser = (name, surname, email, username, password, passwordRepeat, callback) => { + validate.name(name) + validate.surname(surname, 'surname') + validate.email(email) + validate.username(username) + validate.password(password) -const registerUser = (name, surname, email, username, password, passwordRepeat) => { - if (name.trim() === '') - throw new Error('invalid name') + const xhr = new XMLHttpRequest - if (surname.trim().length < 2) - throw new Error('invalid surname') + xhr.onload = () => { + if (xhr.status === 201) { + callback(null) - if (!EMAIL_REGEX.test(email)) - throw new Error('invalid email') + return + } - if (username.trim().length < 4) - throw new Error('invalid username') + const { error, message } = JSON.parse(xhr.response) - if (password.trim().length < 8) - throw new Error('invalid password') + const constructor = window[error] - if (password !== passwordRepeat) - throw new Error('passwords do not match') - - let user = data.findUser(user => user.email === email) - - if (user !== null) - throw new Error('email already exists') - - user = data.findUser(user => user.username === username) + callback(new constructor(message)) + } - if (user !== null) - throw new Error('username already exists') + xhr.onerror = () => callback(new Error('network error')) - user = { - name: name, - surname: surname, - email: email, - username: username, - password: password, - favs: [], - following: [], - avatar: "https://i.pinimg.com/564x/f6/21/64/f621641d5082d74385fabb5c2afb62f5.jpg" - } + xhr.open('POST', 'http://localhost:8080/users') + xhr.setRequestHeader('Content-Type', 'application/json') - data.insertUser(user) + xhr.send(JSON.stringify({ name, surname, email, username, password, passwordRepeat })) } export default registerUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/toggleFavPost.js b/staff/fabian-romero/react/ponies/app/logic/toggleFavPost.js index 80f46032d..064466da2 100644 --- a/staff/fabian-romero/react/ponies/app/logic/toggleFavPost.js +++ b/staff/fabian-romero/react/ponies/app/logic/toggleFavPost.js @@ -1,26 +1,31 @@ -import data from '../data' +import validate from '../../cor/validate.js' -function toggleFavPost(postId) { - if (postId.trim().length === 0) throw new Error('invalid postId') +const toggleFavPost = (postId, callback) => { + validate.string(postId) + validate.callback(callback) - const user = data.findUser(user => user.username === sessionStorage.username) + const xhr = new XMLHttpRequest - if (user === null) - throw new Error('user not found') + xhr.onload = () => { + if (xhr.status === 204) { + callback(null) - const post = data.findPost(post => post.id === postId) + return + } - if (post === null) - throw new Error('post not found') + const { error, message } = JSON.parse(xhr.response) - const index = user.favs.indexOf(postId) + const constructor = window[error] - if (index < 0) - user.favs.push(postId) - else - user.favs.splice(index, 1) + callback(new constructor(message)) + } - data.updateUser(user => user.username === sessionStorage.username, user) + xhr.onerror = () => callback(new Error('network error')) + + xhr.open('PATCH', `http://localhost:8080/posts/${postId}/favs`) + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + + xhr.send() } export default toggleFavPost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/toggleFollowUser.js b/staff/fabian-romero/react/ponies/app/logic/toggleFollowUser.js index 60487736e..c1df6f06c 100644 --- a/staff/fabian-romero/react/ponies/app/logic/toggleFollowUser.js +++ b/staff/fabian-romero/react/ponies/app/logic/toggleFollowUser.js @@ -1,24 +1,31 @@ -import data from '../data' +import validate from '../../cor/validate' -function toggleFollowUser(username) { - if (!username.trim().length) throw new Error('invalid username') +const toggleFollowUser = (username, callback) => { + validate.username(username) + validate.callback(callback) - const user = data.findUser(user => user.username === sessionStorage.username) + const xhr = new XMLHttpRequest - if (!user) throw new Error('user not found') + xhr.onload = () => { + if (xhr.status === 204) { + callback(null) - const following = data.findUser(user => user.username === username) + return + } - if (!following) throw new Error('following user not found') + const { error, message } = JSON.parse(xhr.response) - const index = user.following.indexOf(username) + const constructor = window[error] - if (index < 0) - user.following.push(username) - else - user.following.splice(index, 1) + callback(new constructor(message)) + } - data.updateUser(user => user.username === sessionStorage.username, user) + xhr.onerror = () => callback(new Error('network error')) + + xhr.open('PATCH', `http://localhost:8080/users/${username}/follows`) + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + + xhr.send() } export default toggleFollowUser \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/toggleLikePost.js b/staff/fabian-romero/react/ponies/app/logic/toggleLikePost.js index 7b2a8a920..b94f18f96 100644 --- a/staff/fabian-romero/react/ponies/app/logic/toggleLikePost.js +++ b/staff/fabian-romero/react/ponies/app/logic/toggleLikePost.js @@ -1,21 +1,31 @@ -import data from '../data' +import validate from '../../cor/validate.js' -function toggleLikePost(postId) { - if (postId.trim().length === 0) throw new Error('invalid postId') +const toggleLikePost = (postId, callback) => { + validate.string(postId) + validate.callback(callback) - const post = data.findPost(post => post.id === postId) + const xhr = new XMLHttpRequest - if (post === null) - throw new Error('post not found') + xhr.onload = () => { + if (xhr.status === 204) { + callback(null) - const index = post.likes.indexOf(sessionStorage.username) + return + } - if (index < 0) - post.likes.push(sessionStorage.username) - else - post.likes.splice(index, 1) + const { error, message } = JSON.parse(xhr.response) - data.updatePost(post => post.id === postId, post) + const constructor = window[error] + + callback(new constructor(message)) + } + + xhr.onerror = () => callback(new Error('network error')) + + xhr.open('PATCH', `http://localhost:8080/posts/${postId}/likes`) + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + + xhr.send() } export default toggleLikePost \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/logic/updatePostCaption.js b/staff/fabian-romero/react/ponies/app/logic/updatePostCaption.js index 057c931b6..90a76ed4a 100644 --- a/staff/fabian-romero/react/ponies/app/logic/updatePostCaption.js +++ b/staff/fabian-romero/react/ponies/app/logic/updatePostCaption.js @@ -1,15 +1,33 @@ -import data from '../data' +import validate from '../../cor/validate' -const updatePostCaption = (postId, newCaption) => { - if (postId.trim().length === 0) throw new Error('invalid postId') +const updatePostCaption = (postId, caption, callback) => { + validate.string(postId) + validate.string(caption) + validate.callback(callback) - const post = data.findPost(post => post.id === postId) + const xhr = new XMLHttpRequest - if (post === null) throw new Error('post not found') + xhr.onload = () => { + if (xhr.status === 204) { + callback(null) - post.caption = newCaption + return + } - data.updatePost(post => post.id === postId, post) + const { error, message } = JSON.parse(xhr.response) + + const constructor = window[error] + + callback(new constructor(message)) + } + + xhr.onerror = () => callback(new Error('network error')) + + xhr.open('PATCH', `http://localhost:8080/posts/${postId}/caption`) + xhr.setRequestHeader('Authorization', `Basic ${sessionStorage.username}`) + xhr.setRequestHeader('Content-Type', 'application/json') + + xhr.send(JSON.stringify({ caption })) } export default updatePostCaption \ No newline at end of file diff --git a/staff/fabian-romero/react/ponies/app/view/App.jsx b/staff/fabian-romero/react/ponies/app/view/App.jsx index c31cdec55..527913ff0 100644 --- a/staff/fabian-romero/react/ponies/app/view/App.jsx +++ b/staff/fabian-romero/react/ponies/app/view/App.jsx @@ -1,4 +1,4 @@ -import { Component } from 'react' +import { useState } from 'react' import Login from './Login' import Register from './Register' @@ -6,58 +6,48 @@ import Home from './Home' import logic from '../logic' -class App extends Component { - constructor() { - console.debug('App -> constructor') +const App = () => { + console.debug('App -> call') - super() + const [view, setView] = useState(logic.isUserLoggedIn() ? 'home' : 'login') - this.state = { view: logic.isUserloggedIn ? 'home' : 'login' } - } - - handleLogin() { + const handleLogin = () => { console.debug('App -> handleLogin') - this.setState({ view: 'home' }) + setView('home') } - handleRegisterClick() { + const handleRegisterClick = () => { console.debug('App -> handleRegisterClick') - this.setState({ view: 'register' }) + setView('register') } - handleRegister() { + const handleRegister = () => { console.debug('App -> handleRegister') - this.setState({ view: 'login' }) + setView('login') } - handleLoginClick() { + const handleLoginClick = () => { console.debug('App -> handleLoginClick') - this.setState({ view: 'login' }) + setView('login') } - handleLogout() { + const handleLogout = () => { console.debug('App -> handleLogout') - this.setState({ view: 'login' }) + setView('login') } - render() { - console.debug('App -> render') - - const { view } = this.state + return <> + {view === 'login' && } - return <> - {view === 'login' && } + {view === 'register' && } - {view === 'register' && } - - {view === 'home' && } - - } + {view === 'home' && } + } export default App diff --git a/staff/fabian-romero/react/ponies/app/view/Home.jsx b/staff/fabian-romero/react/ponies/app/view/Home.jsx index 8e18d712f..78430d387 100644 --- a/staff/fabian-romero/react/ponies/app/view/Home.jsx +++ b/staff/fabian-romero/react/ponies/app/view/Home.jsx @@ -4,63 +4,56 @@ import Footer from './home/Footer' import PoniesPostList from './home/PoniesPostList' import FavsPostList from './home/FavsPostList' -import { Component } from 'react' +import { useState } from 'react' -class Home extends Component { - constructor() { - console.debug('Home -> constructor') +const Home = ({ onLogout }) => { + console.debug('Home -> call') - super() + const [refreshStamp, setRefreshStamp] = useState(null) + const [view, setView] = useState('home') - this.state = { refreshStamp: null, view: 'home' } - } - - handlePostCreated() { + const handlePostCreated = () => { console.debug('Home -> handlePostCreated') - this.setState({ refreshStamp: Date.now() }) + setRefreshStamp(Date.now()) } - handlePoniesClick() { + const handlePoniesClick = () => { console.debug('Home -> handlePoniesClick') - this.setState({ view: 'ponies' }) + setView('ponies') } - handleHomeClick() { + const handleHomeClick = () => { console.debug('Home -> handleHomeClick') - this.setState({ view: 'home' }) + setView('home') } - handleFavsClick() { + const handleFavsClick = () => { console.debug('Home -> handleFavsClick') - this.setState({ view: 'favs' }) + setView('favs') } - render() { - console.debug('Home -> render') + return <> +
- return <> -
+
+ {view === 'home' && } -
- {this.state.view === 'home' && } + {view === 'ponies' && } - {this.state.view === 'ponies' && } + {view === 'favs' && } +
- {this.state.view === 'favs' && } -
- -