diff --git a/dbs/social_interno.mv.db b/dbs/social_interno.mv.db index 708268a..f5a4cd6 100644 Binary files a/dbs/social_interno.mv.db and b/dbs/social_interno.mv.db differ diff --git a/server/services/public/communities/get.js b/server/services/public/communities/get.js new file mode 100644 index 0000000..1ce6740 --- /dev/null +++ b/server/services/public/communities/get.js @@ -0,0 +1,17 @@ + +const dbComunidades = _db.query(` + SELECT * FROM comunidade +`) + +const data = _val.list() + +for (const dbComunidade of dbComunidades) { + data.add( + _val.map() + .set("uid", dbComunidade.getString("uid")) + .set("name", dbComunidade.getString("nome")) + .set("description", dbComunidade.getString("descricao")) + ) +} + +_out.json(data) diff --git a/server/services/public/communities/options.js b/server/services/public/communities/options.js new file mode 100644 index 0000000..f731105 --- /dev/null +++ b/server/services/public/communities/options.js @@ -0,0 +1 @@ +_out.json(_val.map().set("result", true)) \ No newline at end of file diff --git a/server/services/public/info/get.js b/server/services/public/info/get.js new file mode 100644 index 0000000..7c62ccf --- /dev/null +++ b/server/services/public/info/get.js @@ -0,0 +1,14 @@ + +const dbPessoa = _db.queryFirst(` + SELECT pessoa.*, cidade.nome "cidade" + FROM pessoa INNER JOIN cidade ON pessoa.cidade_id = cidade.id + WHERE utilizador_id = ? +`, _user.id()) + +_out.json( + _val.map() + .set("name", dbPessoa.getString('nome')) + .set("surname", dbPessoa.getString('apelido')) + .set("email", dbPessoa.getString('email')) + .set("cidade", dbPessoa.getString('cidade')) +) diff --git a/server/services/public/info/options.js b/server/services/public/info/options.js new file mode 100644 index 0000000..f731105 --- /dev/null +++ b/server/services/public/info/options.js @@ -0,0 +1 @@ +_out.json(_val.map().set("result", true)) \ No newline at end of file diff --git a/website/package.json b/website/package.json index 3c0a7e6..ffe7509 100644 --- a/website/package.json +++ b/website/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { + "@netuno/auth-client": "^1.0.4", "@netuno/service-client": "^1.0.8", "@testing-library/jest-dom": "^5.12.0", "@testing-library/react": "^11.2.7", diff --git a/website/src/App.js b/website/src/App.js index d73dccc..bcdd921 100644 --- a/website/src/App.js +++ b/website/src/App.js @@ -11,6 +11,11 @@ import Home from './pages/Home'; import Info from './pages/Info'; import Register from './pages/Register'; import Login from './pages/Login'; +import Main from './pages/Main'; +import Communities from './pages/Communities'; +import Logout from './pages/Logout'; + +import _auth from '@netuno/auth-client'; import './App.less'; @@ -19,23 +24,41 @@ const { Header, Footer, Content } = Layout; const { SubMenu } = Menu; function App() { + let menuItems = null; + if (_auth.isLogged()) { + menuItems = <> + + Principal + + + Comunidades + + + Sair + + ; + } else { + menuItems = <> + + Home + + + Info + + + Registo + + + Login + + ; + } return (
- - Home - - - Info - - - Registo - - - Login - + {menuItems}
@@ -49,6 +72,15 @@ function App() { + +
+ + + + + + + diff --git a/website/src/pages/Communities/index.js b/website/src/pages/Communities/index.js new file mode 100644 index 0000000..4b1e226 --- /dev/null +++ b/website/src/pages/Communities/index.js @@ -0,0 +1,37 @@ +import React, { useState, useEffect } from 'react'; + +import { Redirect } from "react-router-dom"; + +import _auth from '@netuno/auth-client'; + +import _service from '@netuno/service-client'; + +export default ()=> { + if (!_auth.isLogged()) { + return ; + } + const [ data, setData ] = useState([]); + useEffect(() => { + _service({ + url: 'public/communities', + success: (response) => { + setData(response.json); + }, + fail: (e) => { + console.error('Service Communities Error', e); + } + }); + }, []); + return ( +
+

Comunidades

+
+
    + { data.map((community)=> ( +
  • {community.name}
  • + ))} +
+
+
+ ); +}; \ No newline at end of file diff --git a/website/src/pages/Login/index.js b/website/src/pages/Login/index.js index 042e37a..4a8507b 100644 --- a/website/src/pages/Login/index.js +++ b/website/src/pages/Login/index.js @@ -2,6 +2,8 @@ import React from 'react'; import { Form, Input, Button, Checkbox } from 'antd'; +import _auth from '@netuno/auth-client'; + const layout = { labelCol: { span: 8 }, wrapperCol: { span: 16 }, @@ -13,6 +15,15 @@ const tailLayout = { export default ()=> { const onFinish = (values) => { console.log('Success:', values); + _auth.login({ + ...values, + success: ()=> { + window.location = '/main'; + }, + fail: ()=> { + alert("Fail."); + } + }); }; const onFinishFailed = (errorInfo) => { diff --git a/website/src/pages/Logout/index.js b/website/src/pages/Logout/index.js new file mode 100644 index 0000000..da770af --- /dev/null +++ b/website/src/pages/Logout/index.js @@ -0,0 +1,24 @@ +import React from 'react'; + +import { Redirect } from "react-router-dom"; + +import _auth from '@netuno/auth-client'; + +import { Button } from 'antd'; + +export default ()=> { + if (!_auth.isLogged()) { + return ; + } + const onLogout = () => { + _auth.logout(); + window.location = '/'; + } + return ( +
+

Sair

+

Para confirmar que deseja terminar a sessão clique no botão abaixo.

+ +
+ ); +}; \ No newline at end of file diff --git a/website/src/pages/Main/index.js b/website/src/pages/Main/index.js new file mode 100644 index 0000000..c6ccea5 --- /dev/null +++ b/website/src/pages/Main/index.js @@ -0,0 +1,36 @@ +import React, { useState, useEffect } from 'react'; + +import { Redirect } from "react-router-dom"; + +import _auth from '@netuno/auth-client'; + +import _service from '@netuno/service-client'; + +import { Spin } from 'antd'; + +export default ()=> { + if (!_auth.isLogged()) { + return ; + } + const [ userInfo, setUserInfo ] = useState(null); + useEffect(() => { + _service({ + url: 'public/info', + success: (response) => { + setUserInfo(response.json); + }, + fail: (e) => { + console.error('Service Info Error', e); + } + }); + }, []); + if (userInfo == null) { + return ; + } + return ( +
+

Principal

+ Olá {userInfo.name} +
+ ); +}; \ No newline at end of file