Skip to content

Commit 503d13e

Browse files
Merge pull request #107 from VitorCarvalho67/dev
Dev
2 parents 8e57836 + 71bcc57 commit 503d13e

File tree

9 files changed

+225
-22
lines changed

9 files changed

+225
-22
lines changed

client/src/router/routes/shared.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Home from '../../views/shared/Home.vue';
22
import NotFound from '../../views/shared/NotFound.vue';
33
import PublicPerfilAluno from '../../views/shared/PerfilAluno.vue';
4+
import PublicPerfilEmpresa from '../../views/shared/PerfilEmpresa.vue';
45
import PublicPerfilProfessor from '../../views/shared/PerfilProfessor.vue';
56
import Pesquisa from '../../views/shared/Pesquisa.vue';
67
import Vagas from '../../views/shared/Vagas.vue';
@@ -30,6 +31,11 @@ export const sharedRoutes = [
3031
(await isAuthAluno()) ? next(`/aluno/colega/${to.params.rm}`) : next();
3132
}
3233
},
34+
{
35+
path: "/empresa/:email",
36+
name: "PublicPerfilEmpresa",
37+
component: PublicPerfilEmpresa
38+
},
3339
{
3440
path: "/professor/profile/:name",
3541
name: "PublicPerfilProfessor",
@@ -64,7 +70,7 @@ export const sharedRoutes = [
6470
name: 'RankingPublico',
6571
component: Ranking,
6672
beforeEnter: async (to, from, next) => {
67-
(await isAuthAluno()) ? next(`/aluno/ranking}`) : next();
73+
(await isAuthAluno()) ? next(`/aluno/ranking`) : next();
6874
}
6975
},
7076
{

client/src/views/aluno/Ranking.vue

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,18 @@
66
<section class="content">
77
<div class="box" id="box1">
88
<H1>Rankings</H1>
9-
<h2>Ranking gerados a partir das notas dos alunos. O objetivo desse ranking é proporcionar competitividade e destacar os alunos para as empresas.</h2>
10-
9+
<h2>Ranking gerados a partir das notas dos alunos. O objetivo desse ranking é proporcionar
10+
competitividade e destacar os alunos para as empresas.</h2>
11+
1112
<div class="alunos">
1213
<p class="info">Ranking geral:</p>
13-
14-
<router-link v-for="(item, index) in ranking" :key="index" :to="`/aluno/profile/${item.aluno.rm}`" class="aluno">
14+
15+
<router-link v-for="(item, index) in ranking" :key="index"
16+
:to="`/aluno/profile/${item.aluno.rm}`" class="aluno">
1517
<b>#{{ index + 1 }}</b>
16-
<img :src="(index + 1 < 4) ? '../assets/icons/m' + (index + 1) + '.png' : '../../assets/icons/m3.png'" :class="(index + 1 < 4) ? 'medalha' : 'medalha normal' " alt="">
18+
<img :src="index + 1 < 4 ? medalhas[index] : medalhas[3]"
19+
:class="(index + 1 < 4) ? 'medalha' : 'medalha normal'" alt="" />
20+
1721
<img v-if="item.aluno.imagem != 'default'" :src="item.aluno.imagem" alt="Foto do aluno">
1822
<img v-else src="../../assets/icons/artwork.png" alt="Foto padrão">
1923
<p class="name">{{ item.aluno.nome }} - 3º DS</p>
@@ -30,6 +34,10 @@
3034
import Header from '../../components/aluno/Header.vue';
3135
import AsideDashboard from '../../components/aluno/AsideDashboard.vue';
3236
import searchIcon from '../../assets/icons/procurar.png';
37+
import medalha1 from '../../assets/icons/m1.png';
38+
import medalha2 from '../../assets/icons/m2.png';
39+
import medalha3 from '../../assets/icons/m3.png';
40+
import medalhaDefault from '../../assets/icons/m3.png';
3341
3442
import Cookies from 'js-cookie';
3543
@@ -48,7 +56,8 @@ export default {
4856
},
4957
ranking: {
5058
51-
}
59+
},
60+
medalhas: [medalha1, medalha2, medalha3, medalhaDefault],
5261
};
5362
},
5463
methods: {
@@ -78,9 +87,9 @@ export default {
7887
</script>
7988

8089
<style lang="scss" scoped>
81-
@import "../../scss/pages/shared/_ranking.scss";
90+
@import "../../scss/pages/shared/_ranking.scss";
8291
83-
#app {
92+
#app {
8493
display: flex;
8594
flex-direction: column;
8695
min-height: calc(100vh - 80px);

client/src/views/aluno/Vaga.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
<div class="main-information">
2121
<div class="enterprise">
2222
<img
23-
:src="vaga.empresa.logo"
23+
:src="vaga.empresa.entityUrl"
2424
:alt="vaga.empresa.name"
2525
/>
2626
<div class="info-enterprise">
2727
<strong>Empresa:</strong>
2828
<router-link
29-
:to="'/empresa/' + vaga.empresa.cnpj"
30-
>{{ vaga.empresa.name }}</router-link
31-
>
29+
:to="'/empresa/' + vaga.empresa.email">
30+
{{ vaga.empresa.name }}
31+
</router-link>
3232
</div>
3333
</div>
3434
<div class="remuneracao">
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
<template>
2+
<Header />
3+
<div id="app">
4+
<main>
5+
<div class="content">
6+
<div class="content">
7+
<div class="capa">
8+
<div class="capaProfile">
9+
<img v-if="empresa.banner == 'default'" src="../../assets/imgs/defaultBanner.png"
10+
alt="Capa" />
11+
<img v-else :src="empresa.banner" alt="Capa" />
12+
</div>
13+
<div class="infoProfile">
14+
<img v-if="empresa.imagem == 'default'" src="../../assets/icons/artwork.png" />
15+
<img v-else :src="empresa.imagem" />
16+
<div class="info">
17+
<div class="box1">
18+
<h1 v-text="empresa.nome"></h1>
19+
</div>
20+
</div>
21+
</div>
22+
</div>
23+
24+
<section class="sobreMim">
25+
<h2>
26+
Sobre a Empresa
27+
</h2>
28+
<div>
29+
CNPJ: {{empresa.cnpj}}
30+
Email: {{empresa.email}}
31+
<p v-show="mode === 'view'">Site: <a :href="empresa.site" target="_blanck">{{empresa.site}}</a></p>
32+
<textarea v-show="mode === 'edit'" name="" cols="30" rows="10" id="edit"
33+
v-model="empresa.siteSubmit" ref="edit"></textarea>
34+
</div>
35+
</section>
36+
</div>
37+
</div>
38+
</main>
39+
</div>
40+
</template>
41+
42+
<script>
43+
import Header from '../../components/Header.vue';
44+
import Footer from '../../components/Footer.vue';
45+
import AsideDashboard from '../../components/empresa/AsideDashboard.vue';
46+
import router from '../../router/index.js'
47+
import { mixinEmpresa } from '../../util/authMixins.js';
48+
49+
import imgLapis from "../../assets/icons/lapis.png";
50+
import imgVerificar from "../../assets/icons/verificar.png";
51+
import imgCruz from "../../assets/icons/cruz.png";
52+
53+
import { getEmpresa } from '../../services/api/shared.js';
54+
55+
import Cookies from 'js-cookie';
56+
import { updateBanner, updateImage, updateSite } from '../../services/api/empresa.js';
57+
58+
export default {
59+
name: 'PublicPerfilEmpresa',
60+
components: {
61+
Header,
62+
},
63+
data() {
64+
return {
65+
empresa: {
66+
email: '',
67+
telefone: '',
68+
endereco: '',
69+
imagem: '',
70+
banner: '',
71+
patrocinada: '',
72+
cnpj: '',
73+
site: '',
74+
siteSubmit: '',
75+
token: '',
76+
},
77+
file: "",
78+
fileSelected: false,
79+
linkstatus: 0,
80+
mode: "view",
81+
modeImage: "view",
82+
modeBanner: "view",
83+
imgLapis,
84+
imgVerificar,
85+
imgCruz,
86+
extracurriculares: [],
87+
showAddForm: false,
88+
}
89+
},
90+
methods: {
91+
async GetEmpresa(){
92+
try {
93+
const response = await getEmpresa(this.empresa.email);
94+
if (response.status >= 200 && response.status < 300) {
95+
this.empresa = response.data;
96+
97+
this.empresa.siteSubmit = response.data.site;
98+
99+
} else {
100+
console.error(
101+
"Erro ao carregar dados da empresa",
102+
response.message,
103+
);
104+
}
105+
} catch (error) {
106+
console.error(
107+
"Erro ao carregar dados da empresa",
108+
error.message,
109+
);
110+
}
111+
},
112+
previewProfileImage(event) {
113+
const file = event.target.files[0];
114+
if (!file) return;
115+
116+
const reader = new FileReader();
117+
reader.onload = (e) => {
118+
this.empresa.imagem = e.target.result;
119+
};
120+
reader.readAsDataURL(file);
121+
},
122+
previewBannerImage(event) {
123+
const file = event.target.files[0];
124+
if (!file) return;
125+
126+
const reader = new FileReader();
127+
reader.onload = (e) => {
128+
this.empresa.banner = e.target.result;
129+
};
130+
reader.readAsDataURL(file);
131+
},
132+
},
133+
async created() {
134+
this.empresa.email = this.$route.params.email;
135+
await this.GetEmpresa(this.empresa.email);
136+
}
137+
}
138+
</script>
139+
140+
<style lang="scss" scoped>
141+
@import "../../scss/pages/empresa/_dashboard.scss";
142+
143+
#app {
144+
display: flex;
145+
flex-direction: column;
146+
min-height: calc(100vh - 80px);
147+
148+
main {
149+
display: flex;
150+
flex: 1;
151+
overflow: hidden;
152+
153+
.content {
154+
flex: 1;
155+
padding: 20px;
156+
overflow-y: auto;
157+
height: 100%;
158+
159+
@media (max-width: 1000px) {
160+
width: calc(100% - 100px);
161+
}
162+
}
163+
}
164+
}
165+
</style>

client/src/views/shared/Ranking.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313
<router-link v-for="(item, index) in ranking" :key="index" :to="`/aluno/profile/${item.aluno.rm}`" class="aluno">
1414
<b>#{{ index + 1 }}</b>
15-
<img :src="(index + 1 < 4) ? '../assets/icons/m' + (index + 1) + '.png' : '../../assets/icons/m3.png'" :class="(index + 1 < 4) ? 'medalha' : 'medalha normal' " alt="">
15+
<img :src="index + 1 < 4 ? medalhas[index] : medalhas[3]"
16+
:class="(index + 1 < 4) ? 'medalha' : 'medalha normal'" alt="" />
1617
<img v-if="item.aluno.imagem != 'default'" :src="item.aluno.imagem" alt="Foto do aluno">
1718
<img v-else src="../../assets/icons/artwork.png" alt="Foto padrão">
1819
<p class="name">{{ item.aluno.nome }} - 3º DS</p>
@@ -28,6 +29,11 @@
2829
<script>
2930
import Header from '../../components/aluno/Header.vue';
3031
import searchIcon from '../../assets/icons/procurar.png';
32+
import medalha1 from '../../assets/icons/m1.png';
33+
import medalha2 from '../../assets/icons/m2.png';
34+
import medalha3 from '../../assets/icons/m3.png';
35+
import medalhaDefault from '../../assets/icons/m3.png';
36+
3137
3238
import Cookies from 'js-cookie';
3339
@@ -45,7 +51,8 @@ export default {
4551
},
4652
ranking: {
4753
48-
}
54+
},
55+
medalhas: [medalha1, medalha2, medalha3, medalhaDefault],
4956
};
5057
},
5158
methods: {

client/src/views/shared/Vaga.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
<div class="main-information">
2121
<div class="enterprise">
2222
<img
23-
:src="vaga.empresa.logo"
23+
:src="vaga.empresa.entityUrl"
2424
:alt="vaga.empresa.name"
2525
/>
2626
<div class="info-enterprise">
2727
<strong>Empresa:</strong>
2828
<router-link
29-
:to="'/empresa/' + vaga.empresa.cnpj"
30-
>{{ vaga.empresa.name }}</router-link
31-
>
29+
:to="'/empresa/' + vaga.empresa.email">
30+
{{ vaga.empresa.name }}
31+
</router-link>
3232
</div>
3333
</div>
3434
<div class="remuneracao">

server/src/modules/interfaces/sharedDTOs.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ export interface VinculoDTO {
88

99
export enum IdentificadorEnum {
1010
ALUNO = "ALUNO",
11-
PROFESSOR = "PROFESSOR"
11+
PROFESSOR = "PROFESSOR",
12+
EMPRESA = "EMPRESA"
1213
}
1314

1415
export interface ReagirVinculoDTO {

server/src/modules/services/empresa/GetEmpresaUseCase.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export class GetEmpresaUseCase {
3939
}
4040

4141
if (!empresa) {
42-
throw new AppError("Aluno não encontrado.");
42+
throw new AppError("Empresa não encontrada.");
4343
}
4444

4545
return {

server/src/modules/services/shared/GetVagaUseCase.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { AppError } from "../../../errors/error";
22
import { prisma } from "../../../prisma/client";
3+
import { minioClient } from "../../../minioService";
34

45
export class GetVagaUseCase {
56
async execute(id: string){
@@ -18,13 +19,27 @@ export class GetVagaUseCase {
1819
throw new AppError("Vaga não encontrada");
1920
}
2021

22+
const bucketName = 'boot';
23+
const imageName = vaga.empresa.imagem as string;
24+
25+
let entityUrl = "default";
26+
27+
if (imageName) {
28+
const objectExists = await minioClient.statObject(bucketName, imageName);
29+
if(objectExists){
30+
entityUrl = await minioClient.presignedUrl('GET', bucketName, imageName, 24 * 60 * 60);
31+
}
32+
}
33+
2134
return {
2235
vaga:{
2336
id: vaga.id,
2437
titulo: vaga.titulo,
2538
empresa: {
2639
cnpj: vaga.empresa.cnpj,
27-
name: vaga.empresa.name
40+
email: vaga.empresa.email,
41+
name: vaga.empresa.name,
42+
entityUrl: entityUrl
2843
},
2944
curso: vaga.curso.name,
3045
remuneracao: vaga.remuneracao,

0 commit comments

Comments
 (0)