From 7877999a4b045311f9b93ed638b948deb0bd1135 Mon Sep 17 00:00:00 2001 From: eduveks Date: Thu, 22 Apr 2021 00:26:54 +0000 Subject: [PATCH] =?UTF-8?q?Sess=C3=A3o=2015?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/services/api/communities/detail.get.js | 42 +++++++++++ .../api/communities/detail.options.js | 2 + server/services/api/communities/get.js | 13 +++- website/package.json | 1 + website/src/App.js | 4 ++ website/src/pages/Communities/Item/index.js | 8 ++- website/src/pages/Communities/index.js | 3 +- website/src/pages/Communities/index.less | 2 +- website/src/pages/Community/index.js | 71 +++++++++++++++++++ website/src/pages/Community/index.less | 13 ++++ 10 files changed, 152 insertions(+), 7 deletions(-) create mode 100644 server/services/api/communities/detail.get.js create mode 100644 server/services/api/communities/detail.options.js create mode 100644 website/src/pages/Community/index.js create mode 100644 website/src/pages/Community/index.less diff --git a/server/services/api/communities/detail.get.js b/server/services/api/communities/detail.get.js new file mode 100644 index 0000000..7d4ce57 --- /dev/null +++ b/server/services/api/communities/detail.get.js @@ -0,0 +1,42 @@ +// _core : social/userPessoa + +const dbComunidade = _db.queryFirst(` + SELECT + uid, + nome, + descricao, + imagem, + ( + SELECT count(id) + FROM pessoa_comunidade + WHERE pessoa_id = ? + AND comunidade_id = comunidade.id + ) seguindo, + ( + SELECT count(id) + FROM pessoa_comunidade + WHERE comunidade_id = comunidade.id + ) pessoas, + ( + SELECT count(id) + FROM publicacao + WHERE comunidade_id = comunidade.id + ) publicacoes + FROM comunidade + WHERE active = true + AND uid = ?::uuid + ORDER BY nome +`, userPessoa().getInt("id"), _req.getString("uid")) + +const data = _val.map() + +if (dbComunidade != null) { + data.set("uid", dbComunidade.getString("uid")) + .set("name", dbComunidade.getString("nome")) + .set("description", dbComunidade.getString("descricao")) + .set("following", dbComunidade.getInt("seguindo") > 0) + .set("people", dbComunidade.getInt("pessoas")) + .set("publications", dbComunidade.getInt("publicacoes")) +} + +_out.json(data) \ No newline at end of file diff --git a/server/services/api/communities/detail.options.js b/server/services/api/communities/detail.options.js new file mode 100644 index 0000000..472b23f --- /dev/null +++ b/server/services/api/communities/detail.options.js @@ -0,0 +1,2 @@ + +_out.json(_val.map().set("result", true)) diff --git a/server/services/api/communities/get.js b/server/services/api/communities/get.js index b6bf4e1..c02dfa5 100644 --- a/server/services/api/communities/get.js +++ b/server/services/api/communities/get.js @@ -1,23 +1,32 @@ +// _core : social/userPessoa const dbComunidades = _db.query(` SELECT uid, nome, descricao, - imagem + imagem, + ( + SELECT count(id) + FROM pessoa_comunidade + WHERE pessoa_id = ? + AND comunidade_id = comunidade.id + ) seguindo FROM comunidade WHERE active = true ORDER BY nome -`) +`, userPessoa().getInt("id")) 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")) + .set("following", dbComunidade.getInt("seguindo") > 0) ) } diff --git a/website/package.json b/website/package.json index 2a29958..222b3c7 100644 --- a/website/package.json +++ b/website/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { + "@ant-design/icons": "^4.6.2", "@netuno/auth-client": "^1.0.3", "@netuno/service-client": "^1.0.7", "@testing-library/jest-dom": "^5.11.10", diff --git a/website/src/App.js b/website/src/App.js index a68c871..8abd9da 100644 --- a/website/src/App.js +++ b/website/src/App.js @@ -14,6 +14,7 @@ import Home from './pages/Home'; import Login from './pages/Login'; import Register from './pages/Register'; import Communities from './pages/Communities'; +import Community from './pages/Community'; import Main from './pages/Main'; import Core from './Core'; @@ -95,6 +96,9 @@ function App() {
+ + + diff --git a/website/src/pages/Communities/Item/index.js b/website/src/pages/Communities/Item/index.js index e5a1c86..42c6b1d 100644 --- a/website/src/pages/Communities/Item/index.js +++ b/website/src/pages/Communities/Item/index.js @@ -1,13 +1,17 @@ import React, { useEffect, useState} from 'react'; +import { Link } from "react-router-dom"; + import _service from '@netuno/service-client'; import { Button, notification } from 'antd'; +import { CheckCircleOutlined } from '@ant-design/icons'; + import "./index.less"; export default ({ data })=> { - const [following, setFollowing] = useState(false); + const [following, setFollowing] = useState(data.following); const onFollow = ()=> { _service({ method: 'PUT', @@ -28,7 +32,7 @@ export default ({ data })=> { const servicePrefix = _service.config().prefix; return (
  • -

    { data.name }

    +

    { data.name } { following ? : null }

  • ); }; diff --git a/website/src/pages/Communities/index.js b/website/src/pages/Communities/index.js index 4106d5b..9c67360 100644 --- a/website/src/pages/Communities/index.js +++ b/website/src/pages/Communities/index.js @@ -33,10 +33,9 @@ export default ()=> { } }); }, []); - const servicePrefix = _service.config().prefix; return (
    -

    Comunidades...

    {servicePrefix} +

    Comunidades...

      { communities.length > 0 && communities.map( (community) => { diff --git a/website/src/pages/Communities/index.less b/website/src/pages/Communities/index.less index fff6d62..c2a41c7 100644 --- a/website/src/pages/Communities/index.less +++ b/website/src/pages/Communities/index.less @@ -8,7 +8,7 @@ background-size: cover; background-repeat: no-repeat; background-position: 50% 50%; - height: 300px; + height: 200px; h1 { background-color: rgba(0, 0, 0, 0.75); padding: 10px; diff --git a/website/src/pages/Community/index.js b/website/src/pages/Community/index.js new file mode 100644 index 0000000..d936e9c --- /dev/null +++ b/website/src/pages/Community/index.js @@ -0,0 +1,71 @@ +import React, { useEffect, useState} from 'react'; + +import _service from '@netuno/service-client'; + +import { useParams } from "react-router-dom"; + +import { Button, Spin, Row, Col, notification } from 'antd'; + +import { CheckCircleOutlined } from '@ant-design/icons'; + +import "./index.less"; + +export default ()=> { + const [data, setData] = useState(null); + const [following, setFollowing] = useState(false); + const { uid } = useParams(); + + useEffect(()=> { + _service({ + method: 'GET', + url: "api/communities/detail", + data: { uid }, + success: (response) => { + setData(response.json); + setFollowing(response.json.following); + }, + fail: (e) => { + console.log("Service Error", e); + notification["error"]({ + message: 'Informações', + description: 'Não foi possível carregar a informação.', + }); + } + }); + }, []); + + const onFollow = ()=> { + _service({ + method: 'PUT', + url: "api/communities/follow", + data: {uid: data.uid}, + success: (response) => { + setFollowing(response.json.result); + }, + fail: (e) => { + console.log("Service Error", e); + notification["error"]({ + message: 'Informações', + description: 'Não foi possível carregar a informação.', + }); + } + }); + }; + const servicePrefix = _service.config().prefix; + + if (data == null) { + return ; + } + return ( +
      +
      +

      { data.name } { following ? : }

      +
      + + Pessoas: {data.people} + Publicações: {data.publications} + { following ? <> Seguindo : } + +
      + ); +}; diff --git a/website/src/pages/Community/index.less b/website/src/pages/Community/index.less new file mode 100644 index 0000000..9458283 --- /dev/null +++ b/website/src/pages/Community/index.less @@ -0,0 +1,13 @@ + +.community { + &__banner { + background-size: cover; + background-repeat: no-repeat; + background-position: 50% 50%; + height: 300px; + h1 { + background-color: rgba(0, 0, 0, 0.75); + padding: 10px; + } + } +}