Browse Source

Login, área reservada, e dados do utilizador logado.

master
eduveks 5 years ago
parent
commit
d033819441
11 changed files with 186 additions and 12 deletions
  1. BIN
      dbs/social_interno.mv.db
  2. +17
    -0
      server/services/public/communities/get.js
  3. +1
    -0
      server/services/public/communities/options.js
  4. +14
    -0
      server/services/public/info/get.js
  5. +1
    -0
      server/services/public/info/options.js
  6. +1
    -0
      website/package.json
  7. +44
    -12
      website/src/App.js
  8. +37
    -0
      website/src/pages/Communities/index.js
  9. +11
    -0
      website/src/pages/Login/index.js
  10. +24
    -0
      website/src/pages/Logout/index.js
  11. +36
    -0
      website/src/pages/Main/index.js

BIN
dbs/social_interno.mv.db View File


+ 17
- 0
server/services/public/communities/get.js View File

@ -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)

+ 1
- 0
server/services/public/communities/options.js View File

@ -0,0 +1 @@
_out.json(_val.map().set("result", true))

+ 14
- 0
server/services/public/info/get.js View File

@ -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'))
)

+ 1
- 0
server/services/public/info/options.js View File

@ -0,0 +1 @@
_out.json(_val.map().set("result", true))

+ 1
- 0
website/package.json View File

@ -3,6 +3,7 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@netuno/auth-client": "^1.0.4",
"@netuno/service-client": "^1.0.8", "@netuno/service-client": "^1.0.8",
"@testing-library/jest-dom": "^5.12.0", "@testing-library/jest-dom": "^5.12.0",
"@testing-library/react": "^11.2.7", "@testing-library/react": "^11.2.7",


+ 44
- 12
website/src/App.js View File

@ -11,6 +11,11 @@ import Home from './pages/Home';
import Info from './pages/Info'; import Info from './pages/Info';
import Register from './pages/Register'; import Register from './pages/Register';
import Login from './pages/Login'; 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'; import './App.less';
@ -19,23 +24,41 @@ const { Header, Footer, Content } = Layout;
const { SubMenu } = Menu; const { SubMenu } = Menu;
function App() { function App() {
let menuItems = null;
if (_auth.isLogged()) {
menuItems = <>
<Menu.Item>
<Link to="/main">Principal</Link>
</Menu.Item>
<Menu.Item>
<Link to="/communities">Comunidades</Link>
</Menu.Item>
<Menu.Item>
<Link to="/logout">Sair</Link>
</Menu.Item>
</>;
} else {
menuItems = <>
<Menu.Item>
<Link to="/">Home</Link>
</Menu.Item>
<Menu.Item>
<Link to="/info">Info</Link>
</Menu.Item>
<Menu.Item>
<Link to="/register">Registo</Link>
</Menu.Item>
<Menu.Item>
<Link to="/login">Login</Link>
</Menu.Item>
</>;
}
return ( return (
<Router> <Router>
<Layout> <Layout>
<Header> <Header>
<Menu mode="horizontal"> <Menu mode="horizontal">
<Menu.Item>
<Link to="/">Home</Link>
</Menu.Item>
<Menu.Item>
<Link to="/info">Info</Link>
</Menu.Item>
<Menu.Item>
<Link to="/register">Registo</Link>
</Menu.Item>
<Menu.Item>
<Link to="/login">Login</Link>
</Menu.Item>
{menuItems}
</Menu> </Menu>
</Header> </Header>
<Content> <Content>
@ -49,6 +72,15 @@ function App() {
<Route path="/info"> <Route path="/info">
<Info /> <Info />
</Route> </Route>
<Route path="/main">
<Main />
</Route>
<Route path="/communities">
<Communities />
</Route>
<Route path="/logout">
<Logout />
</Route>
<Route path="/"> <Route path="/">
<Home /> <Home />
</Route> </Route>


+ 37
- 0
website/src/pages/Communities/index.js View File

@ -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 <Redirect to="/login" />;
}
const [ data, setData ] = useState([]);
useEffect(() => {
_service({
url: 'public/communities',
success: (response) => {
setData(response.json);
},
fail: (e) => {
console.error('Service Communities Error', e);
}
});
}, []);
return (
<div>
<h1>Comunidades</h1>
<div class="communities">
<ul class="communities__list">
{ data.map((community)=> (
<li>{community.name}</li>
))}
</ul>
</div>
</div>
);
};

+ 11
- 0
website/src/pages/Login/index.js View File

@ -2,6 +2,8 @@ import React from 'react';
import { Form, Input, Button, Checkbox } from 'antd'; import { Form, Input, Button, Checkbox } from 'antd';
import _auth from '@netuno/auth-client';
const layout = { const layout = {
labelCol: { span: 8 }, labelCol: { span: 8 },
wrapperCol: { span: 16 }, wrapperCol: { span: 16 },
@ -13,6 +15,15 @@ const tailLayout = {
export default ()=> { export default ()=> {
const onFinish = (values) => { const onFinish = (values) => {
console.log('Success:', values); console.log('Success:', values);
_auth.login({
...values,
success: ()=> {
window.location = '/main';
},
fail: ()=> {
alert("Fail.");
}
});
}; };
const onFinishFailed = (errorInfo) => { const onFinishFailed = (errorInfo) => {


+ 24
- 0
website/src/pages/Logout/index.js View File

@ -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 <Redirect to="/login" />;
}
const onLogout = () => {
_auth.logout();
window.location = '/';
}
return (
<div>
<h1>Sair</h1>
<p>Para confirmar que deseja terminar a sessão clique no botão abaixo.</p>
<Button onClick={onLogout}>Sair</Button>
</div>
);
};

+ 36
- 0
website/src/pages/Main/index.js View File

@ -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 <Redirect to="/login" />;
}
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 <Spin/>;
}
return (
<div>
<h1>Principal</h1>
Olá {userInfo.name}
</div>
);
};

Loading…
Cancel
Save