Compare commits
12 Commits
84a408298d
...
master
Author | SHA1 | Date | |
---|---|---|---|
c1b8c39e92
|
|||
3825565b16 | |||
48640dfa8b | |||
3acfd02bfb
|
|||
a3fe6ce6bd
|
|||
96965bde97 | |||
302e0b555c | |||
1f66ac5a4d | |||
730a72dba3 | |||
34e537ff02 | |||
364f39c4bc | |||
f2675ed764 |
@ -46,5 +46,5 @@ jobs:
|
||||
scp -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key -r * ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:api/
|
||||
- name: restarting the backend
|
||||
run: |
|
||||
ssh -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'cd api/ && sed -i compose.yaml -e "s/8080:8080/4001:8080/" -e "s/8000:8080/4000:8080/" -e "23 i\ environment:\n - VITE_CLYDE_MODE=prod" && docker-compose up --force-recreate --build -d'
|
||||
ssh -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'cd api/ && sed -i compose.yaml -e "s/8080:8080/4001:8080/" -e "s/8000:8080/4000:8080/" && sed -e "8d" -i frontend/Dockerfile && docker-compose up --force-recreate --build -d'
|
||||
- run: echo "The backend has been deployed. running at https://clyde.herisson.ovh/api"
|
||||
|
14
README.md
14
README.md
@ -1,5 +1,7 @@
|
||||
# Clyde project
|
||||
|
||||
Système de gestion d'universitée (dévelopé dans le cadre du cours de projet de génie logiciel de l'Umons 2024)
|
||||
|
||||
## Signature
|
||||
|
||||
Projet du groupe 01:
|
||||
@ -11,21 +13,28 @@ Projet du groupe 01:
|
||||
|
||||
## Running
|
||||
|
||||
**Attention**: Vous devez avoir installé docker-compose pour lancer ce projet.
|
||||
|
||||
Le projet peut être lancé grace à docker compose.
|
||||
|
||||
```sh
|
||||
$ docker compose up
|
||||
```
|
||||
|
||||
Dans le cas ou vous modifiers des fichiers, pour éviter que les images de docker soient recrées avec les changement
|
||||
Dans le cas ou vous modifiez des fichiers, pour éviter que les images de docker ne soient réutilisés sans les
|
||||
changements.
|
||||
|
||||
```sh
|
||||
$ docker compose up --force-recreate --build
|
||||
```
|
||||
Vous pouvez alors accéder au frontend à l'adresse [http://localhost:5173](http://localhost:5173)
|
||||
|
||||
Une version finie du site construite automatiquement à l'aide de gitea actions tourne à l'adresse
|
||||
[https://clyde.herisson.ovh/](https://clyde.herisson.ovh/)
|
||||
|
||||
## Dévelopement
|
||||
|
||||
Dans le cas ou vous êtes dans une phase de développement, il est plus simple d'utiliser gradle pour lancer le backend et frontend dans un mode de développement.
|
||||
Dans le cas ou vous êtes dans une phase de développement, il est plus simple d'utiliser gradle pour lancer le backend et frontend.
|
||||
**Attention**: Ce mode n'est pas fait pour être utilisé en production!
|
||||
|
||||
```sh
|
||||
@ -38,4 +47,3 @@ Ceci requière également docker pour lancer une instance de postgresql pris en
|
||||
Il est possible de se passer entièrement de docker en supprimant la dépendance dans le fichier `backend/build.gradle.kts`: ~~`developmentOnly("org.springframework.boot:spring-boot-docker-compose")`~~
|
||||
Il est alors nécéssaire d'avoir une instance de postgresql tournant sur `localhost:5432` avec une table `clyde`, utilisateur: `devel` et password: `devel`
|
||||
(cette configuration peut également être changée dans le fichier resources/application.properties de spring)
|
||||
|
||||
|
@ -32,6 +32,7 @@ async function createResearcher(){
|
||||
toCreate.user = user.value
|
||||
await postResearcher(toCreate)
|
||||
creating.value = false
|
||||
allResearcher.value = await fetchAllResearchers()
|
||||
for (let i = 0; i < allResearcher.value.length; i++) {
|
||||
if (user.value.regNo === allResearcher.value[i].user.regNo){
|
||||
researcher.value = allResearcher.value[i]
|
||||
@ -147,8 +148,7 @@ async function modify(){
|
||||
column-gap:2.7%;
|
||||
row-gap:45px;
|
||||
grid-template-areas:
|
||||
"profilPic globalInfos"
|
||||
"minfos minfos";
|
||||
"profilPic globalInfos";
|
||||
}
|
||||
|
||||
.profilPic{
|
||||
@ -167,7 +167,8 @@ async function modify(){
|
||||
display:flex;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
margin-top:5%;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.subContainer{
|
||||
|
@ -93,12 +93,14 @@
|
||||
|
||||
async function ChangeInfos(){
|
||||
for (let element in toModify){
|
||||
console.log(element)
|
||||
console.log(toModify[element])
|
||||
if (element ==="email" && (toModify[element] !== null)){
|
||||
await alterSelf(user.value.regNo,{email : toModify[element]});
|
||||
}
|
||||
|
||||
if (element ==="profilPictureUrl" && (toModify[element] !== null)){
|
||||
await alterSelf(user.value.regNo,{ profilPictureUrl : toModify[element]});
|
||||
if (element ==="profilePictureUrl" && (toModify[element] !== null)){
|
||||
await alterSelf(user.value.regNo,{ profilePictureUrl : toModify[element]});
|
||||
}
|
||||
else if(element === "address" && (toModify[element] !== null)){
|
||||
await alterSelf(user.value.regNo,{address : toModify[element]});
|
||||
@ -116,7 +118,7 @@
|
||||
toModify.address = item.address;
|
||||
toModify.profilPictureUrl = item.profilPictureUrl;
|
||||
toModify.email= item.email;
|
||||
toModify.password= item.password;
|
||||
toModify.password= item.password
|
||||
}
|
||||
|
||||
function getPP(){
|
||||
@ -176,6 +178,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function getProfilePic(data){
|
||||
const pp= await uploadProfilePicture(data)
|
||||
toModify.profilePictureUrl = pp.url
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@ -306,7 +315,7 @@
|
||||
<div v-else-if="windowState === 1" class="infosContainer">
|
||||
<div>
|
||||
{{i18n("profile.picture")}}:
|
||||
<input type="file" @change="user.profilPicture = uploadProfilePicture($event.target.files);" accept="image/*">
|
||||
<input type="file" @change="getProfilePic($event.target.files)" accept="image/*">
|
||||
</div>
|
||||
<div>
|
||||
{{ i18n("login.guest.email")}}
|
||||
|
@ -35,6 +35,14 @@ watch(
|
||||
}
|
||||
);
|
||||
|
||||
async function modified(){
|
||||
if (typeof props.researchList === 'undefined'){
|
||||
researchList.value = await fetchAllResearches()
|
||||
}
|
||||
else {
|
||||
emit('modified')
|
||||
}
|
||||
}
|
||||
|
||||
const openFilter = () => {
|
||||
isFilterOpened.value = true;
|
||||
@ -112,7 +120,7 @@ const emit = defineEmits(["modified"]);
|
||||
<template>
|
||||
<div id="researches">
|
||||
<FilterComponent :isOpen="isFilterOpened" :allArticles="researchList" @modal-close="closeFilter" @submit="submitFilters"></FilterComponent>
|
||||
<ArticleComponent :allResearcher="allResearcher" :article="articleToDisplay" :isOpen="isResearchOpened" :manage="props.manage" @modal-close="closeResearch" @modified="emit('modified')"></ArticleComponent>
|
||||
<ArticleComponent :allResearcher="allResearcher" :article="articleToDisplay" :isOpen="isResearchOpened" :manage="props.manage" @modal-close="closeResearch" @modified="modified"></ArticleComponent>
|
||||
<div id="search">
|
||||
<input v-if="!isResearcher" type="text" id="search-input" :placeholder="i18n('Search.Researches')" v-model="input"/>
|
||||
<input v-else type="text" id="search-input" :placeholder="i18n('Search.Researchers')" v-model="input"/>
|
||||
|
@ -50,8 +50,8 @@ function getPP(){
|
||||
|
||||
<template> <div class="body"><div id="main">
|
||||
<ResearchPostComponent :allResearcher="allResearcher" :researcher="researcher" :isOpen="isPostResearchOpened" @modal-close="isPostResearchOpened = false" @posted="modifiedResearch"></ResearchPostComponent>
|
||||
<div id="profilePicture">
|
||||
<img :src=getPP() />
|
||||
<div id="profilePicture" >
|
||||
<img :src=getPP() style="border-radius: 20%"/>
|
||||
</div>
|
||||
<div id="researcherInfos">
|
||||
<div class="surrounded" v-if="!changing">{{researcher.user.lastName}} {{researcher.user.firstName}}</div>
|
||||
|
@ -73,12 +73,16 @@ function update(){
|
||||
}
|
||||
|
||||
}
|
||||
async function modifiedResearch(){
|
||||
researchList.value = await fetchResearches(researcher.value.id)
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div id="main">
|
||||
<div id="profilePicture">
|
||||
<img :src=getPP() />
|
||||
<img :src=getPP() style="border-radius: 20%"/>
|
||||
</div>
|
||||
<div id="researcherInfos">
|
||||
<div class="surrounded">{{researcher.user.lastName}} {{researcher.user.firstName}}</div>
|
||||
@ -111,7 +115,7 @@ function update(){
|
||||
<CanvasJSChart :options="options" id=chart @chart-ref="c => chart = c "/>
|
||||
</div>
|
||||
</div>
|
||||
<div id="researches" style="margin-top: -15px"><list-researches :researchList="researchList"></list-researches></div>
|
||||
<div id="researches" style="margin-top: -15px"><list-researches :researchList="researchList" @modified="modifiedResearch"></list-researches></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
Reference in New Issue
Block a user