Merge remote-tracking branch 'origin/master' into Leo/InscriptionDesEtudiant
# Conflicts: # backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java # backend/src/main/java/ovh/herisson/Clyde/Services/Inscription/InscriptionService.java # backend/src/main/java/ovh/herisson/Clyde/Tables/User.java
This commit is contained in:
		
							
								
								
									
										29
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								README.md
									
									
									
									
									
								
							| @ -9,10 +9,33 @@ Projet du groupe 01: | |||||||
| - William Karpinski: Extension gestion des horaires | - William Karpinski: Extension gestion des horaires | ||||||
| - Léo Moulin: Extension inscription des étudiants | - Léo Moulin: Extension inscription des étudiants | ||||||
|  |  | ||||||
|  | ## Running | ||||||
|  |  | ||||||
|  | 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 | ||||||
|  |  | ||||||
|  | ```sh | ||||||
|  | $ docker compose up --force-recreate --build | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ## Dévelopement | ## 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. | ||||||
| $ ./gradlew backend:run frontend:run --parallel | **Attention**: Ce mode n'est pas fait pour être utilisé en production! | ||||||
| ``` |  | ||||||
|  |  | ||||||
|  | ```sh | ||||||
|  | $ ./gradlew run --parallel | ||||||
|  | ``` | ||||||
| permet de lancer le frontend sur [http://localhost:5173](http://localhost:5173) ansi que le frontend sur [http://localhost:8080](http://localhost:8080)  | permet de lancer le frontend sur [http://localhost:5173](http://localhost:5173) ansi que le frontend sur [http://localhost:8080](http://localhost:8080)  | ||||||
|  |  | ||||||
|  | Ceci requière également docker pour lancer une instance de postgresql pris en charge par spring. | ||||||
|  |  | ||||||
|  | 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) | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,6 +1,15 @@ | |||||||
|  | ## Building phase | ||||||
|  | FROM gradle:jdk21-alpine AS BUILD | ||||||
|  | WORKDIR /backend | ||||||
|  |    | ||||||
|  | COPY . . | ||||||
|  | RUN gradle build -x test | ||||||
|  |  | ||||||
|  | ## Running Phase | ||||||
| FROM eclipse-temurin:21-jdk-alpine | FROM eclipse-temurin:21-jdk-alpine | ||||||
| VOLUME /tmp | WORKDIR /backend | ||||||
| VOLUME /cdn | VOLUME /cdn | ||||||
| ENV SPRING_PROFILES_ACTIVE=prod | # ENV SPRING_PROFILES_ACTIVE=prod | ||||||
| COPY build/libs/backend-0.0.1-SNAPSHOT.jar /app.jar | COPY --from=BUILD /backend/build/libs/Clyde-0.0.1-SNAPSHOT.jar /backend/app.jar | ||||||
| ENTRYPOINT ["java", "-jar", "/app.jar"] | EXPOSE 8080 | ||||||
|  | ENTRYPOINT ["java", "-jar", "/backend/app.jar"] | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								backend/settings.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								backend/settings.gradle.kts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | /* | ||||||
|  |  * This file was generated by the Gradle 'init' task. | ||||||
|  |  * | ||||||
|  |  * The settings file is used to specify which projects to include in your build. | ||||||
|  |  * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.6/userguide/multi_project_builds.html in the Gradle documentation. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | plugins { | ||||||
|  |     // Apply the foojay-resolver plugin to allow automatic download of JDKs | ||||||
|  |     id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | rootProject.name = "Clyde" | ||||||
| @ -21,7 +21,7 @@ import java.util.Date; | |||||||
|  |  | ||||||
| public class MockController { | public class MockController { | ||||||
|     private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); |     private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); | ||||||
|  |     public final UserService userService; | ||||||
|     public final UserRepository userRepo; |     public final UserRepository userRepo; | ||||||
|     public final TokenRepository tokenRepo; |     public final TokenRepository tokenRepo; | ||||||
|     public final TokenService tokenService; |     public final TokenService tokenService; | ||||||
| @ -39,7 +39,8 @@ public class MockController { | |||||||
|     public final ScholarshipRequestRepository scholarshipRequestRepository; |     public final ScholarshipRequestRepository scholarshipRequestRepository; | ||||||
|  |  | ||||||
|     public final UnregisterRequestRepository uninscriptionRequestRepository; |     public final UnregisterRequestRepository uninscriptionRequestRepository; | ||||||
|     public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, ExternalCurriculumRepository externalCurriculumRepository, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository, UnregisterRequestRepository unregisterRequestRepository){ |     public MockController(UserService userService, UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, ExternalCurriculumRepository externalCurriculumRepository, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository, UnregisterRequestRepository unregisterRequestRepository){ | ||||||
|  |         this.userService = userService; | ||||||
|         this.tokenRepo = tokenRepo; |         this.tokenRepo = tokenRepo; | ||||||
|         this.userRepo = userRepo; |         this.userRepo = userRepo; | ||||||
|         this.tokenService = tokenService; |         this.tokenService = tokenService; | ||||||
| @ -73,7 +74,7 @@ public class MockController { | |||||||
|         User popo = new User("Smith", "Paul", "paulsmith@gmail.com", "306 rue du poulet", "belgique", new Date(0), null, Role.Student, passwordEncoder.encode("jesuispaulleroi")); |         User popo = new User("Smith", "Paul", "paulsmith@gmail.com", "306 rue du poulet", "belgique", new Date(0), null, Role.Student, passwordEncoder.encode("jesuispaulleroi")); | ||||||
|         mockUsers = new ArrayList<>(Arrays.asList(herobrine,joe,meh,joke,lena,jojo, popo)); |         mockUsers = new ArrayList<>(Arrays.asList(herobrine,joe,meh,joke,lena,jojo, popo)); | ||||||
|  |  | ||||||
|         userRepo.saveAll(mockUsers); |         userService.saveAll(mockUsers); | ||||||
|  |  | ||||||
|         Minerval minerval = new Minerval(joe.getRegNo(), 0, 852, 2023); |         Minerval minerval = new Minerval(joe.getRegNo(), 0, 852, 2023); | ||||||
|         minervalRepository.save(minerval); |         minervalRepository.save(minerval); | ||||||
|  | |||||||
| @ -1,37 +0,0 @@ | |||||||
| package ovh.herisson.Clyde; |  | ||||||
|  |  | ||||||
| import javax.sql.DataSource; |  | ||||||
|  |  | ||||||
| import org.springframework.context.annotation.Bean; |  | ||||||
| import org.springframework.context.annotation.Configuration; |  | ||||||
| import org.springframework.context.annotation.Profile; |  | ||||||
| import org.springframework.jdbc.datasource.DriverManagerDataSource; |  | ||||||
| import org.springframework.scheduling.annotation.EnableScheduling; |  | ||||||
|  |  | ||||||
| @Configuration |  | ||||||
| @EnableScheduling |  | ||||||
| public class JdbcConfig { |  | ||||||
|  |  | ||||||
| 	@Bean |  | ||||||
| 	@Profile("!prod") |  | ||||||
| 	public DataSource psqlSource(){ |  | ||||||
| 		DriverManagerDataSource source = new DriverManagerDataSource(); |  | ||||||
| 		source.setDriverClassName("org.postgresql.Driver"); |  | ||||||
| 		source.setUrl("jdbc:postgresql://localhost:5442/clyde"); |  | ||||||
| 		source.setUsername("devel"); |  | ||||||
| 		source.setPassword("devel"); |  | ||||||
|  |  | ||||||
| 		return source; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	@Bean |  | ||||||
| 	@Profile("prod") |  | ||||||
| 	public DataSource psqlSourceProd(){ |  | ||||||
| 		DriverManagerDataSource source = new DriverManagerDataSource(); |  | ||||||
| 		source.setDriverClassName("org.postgresql.Driver"); |  | ||||||
| 		source.setUrl("jdbc:postgresql:clyde?socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=/var/run/postgresql/.s.PGSQL.5432"); |  | ||||||
| 		source.setUsername("clyde"); |  | ||||||
|  |  | ||||||
| 		return source; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -6,6 +6,7 @@ import ovh.herisson.Clyde.Repositories.*; | |||||||
| import ovh.herisson.Clyde.Repositories.Inscription.ExternalCurriculumRepository; | import ovh.herisson.Clyde.Repositories.Inscription.ExternalCurriculumRepository; | ||||||
| import ovh.herisson.Clyde.Repositories.Inscription.InscriptionRepository; | import ovh.herisson.Clyde.Repositories.Inscription.InscriptionRepository; | ||||||
| import ovh.herisson.Clyde.Repositories.Inscription.MinervalRepository; | import ovh.herisson.Clyde.Repositories.Inscription.MinervalRepository; | ||||||
|  | import ovh.herisson.Clyde.Services.UserService; | ||||||
| import ovh.herisson.Clyde.Tables.*; | import ovh.herisson.Clyde.Tables.*; | ||||||
| import ovh.herisson.Clyde.Tables.Inscription.ExternalCurriculum; | import ovh.herisson.Clyde.Tables.Inscription.ExternalCurriculum; | ||||||
| import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest; | import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest; | ||||||
| @ -28,14 +29,15 @@ public class InscriptionService { | |||||||
|     private final MinervalRepository minervalRepository; |     private final MinervalRepository minervalRepository; | ||||||
|     private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); |     private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); | ||||||
|     private final ExternalCurriculumRepository externalCurriculumRepository; |     private final ExternalCurriculumRepository externalCurriculumRepository; | ||||||
|  |     private final UserService userService; | ||||||
|     public InscriptionService(InscriptionRepository inscriptionRepo, UserRepository userRepo, UserCurriculumRepository userCurriculumRepo, CurriculumRepository curriculumRepo, MinervalRepository minervalRepository, ExternalCurriculumRepository externalCurriculumRepository){ |     public InscriptionService(InscriptionRepository inscriptionRepo, UserRepository userRepo, UserCurriculumRepository userCurriculumRepo, CurriculumRepository curriculumRepo, MinervalRepository minervalRepository, ExternalCurriculumRepository externalCurriculumRepository, UserService userService){ | ||||||
|         this.inscriptionRepo = inscriptionRepo; |         this.inscriptionRepo = inscriptionRepo; | ||||||
|         this.userRepo = userRepo; |         this.userRepo = userRepo; | ||||||
|         this.userCurriculumRepo = userCurriculumRepo; |         this.userCurriculumRepo = userCurriculumRepo; | ||||||
|         this.curriculumRepo = curriculumRepo; |         this.curriculumRepo = curriculumRepo; | ||||||
|         this.minervalRepository = minervalRepository; |         this.minervalRepository = minervalRepository; | ||||||
|         this.externalCurriculumRepository = externalCurriculumRepository; |         this.externalCurriculumRepository = externalCurriculumRepository; | ||||||
|  |         this.userService = userService; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public InscriptionRequest save(InscriptionRequest inscriptionRequest){ |     public InscriptionRequest save(InscriptionRequest inscriptionRequest){ | ||||||
| @ -85,7 +87,7 @@ public class InscriptionService { | |||||||
|                 inscrRequest.getPassword() |                 inscrRequest.getPassword() | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         userRepo.save(userFromRequest); |         userService.save(userFromRequest); | ||||||
|         Calendar c = Calendar.getInstance(); |         Calendar c = Calendar.getInstance(); | ||||||
|         userCurriculumRepo.save(new UserCurriculum(userFromRequest, curriculumRepo.findById(inscrRequest.getCurriculumId()),c.get(Calendar.YEAR), true)); |         userCurriculumRepo.save(new UserCurriculum(userFromRequest, curriculumRepo.findById(inscrRequest.getCurriculumId()),c.get(Calendar.YEAR), true)); | ||||||
|  |  | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ package ovh.herisson.Clyde.Services; | |||||||
|  |  | ||||||
| import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | ||||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||||
|  | import ovh.herisson.Clyde.Tables.RegNoGenerator; | ||||||
| import ovh.herisson.Clyde.Repositories.UserRepository; | import ovh.herisson.Clyde.Repositories.UserRepository; | ||||||
| import ovh.herisson.Clyde.Tables.Role; | import ovh.herisson.Clyde.Tables.Role; | ||||||
| import ovh.herisson.Clyde.Tables.User; | import ovh.herisson.Clyde.Tables.User; | ||||||
| @ -106,10 +107,17 @@ public class UserService { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public User save(User  user){ |     public User save(User  user){ | ||||||
|  |         RegNoGenerator.resetCount(); | ||||||
|         user.setPassword(passwordEncoder.encode(user.getPassword())); |         user.setPassword(passwordEncoder.encode(user.getPassword())); | ||||||
|         return userRepo.save(user); |         return userRepo.save(user); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public void saveAll(ArrayList<User> list){ | ||||||
|  |         //S'assure que le compteur est bien a 0 | ||||||
|  |         RegNoGenerator.resetCount(); | ||||||
|  |         userRepo.saveAll(list); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public Iterable<User> getAll(){ |     public Iterable<User> getAll(){ | ||||||
|         return userRepo.findAll(); |         return userRepo.findAll(); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -0,0 +1,46 @@ | |||||||
|  | package ovh.herisson.Clyde.Tables; | ||||||
|  |  | ||||||
|  | import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess; | ||||||
|  | import org.hibernate.engine.spi.SharedSessionContractImplementor; | ||||||
|  | import org.hibernate.id.IdentifierGenerator; | ||||||
|  |  | ||||||
|  | import java.sql.*; | ||||||
|  | import java.util.Calendar; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.GregorianCalendar; | ||||||
|  |  | ||||||
|  | public class RegNoGenerator implements IdentifierGenerator { | ||||||
|  |     private static int count = 0; | ||||||
|  |     @Override | ||||||
|  |     public Object generate(SharedSessionContractImplementor session, Object object) { | ||||||
|  |         try{ | ||||||
|  |             JdbcConnectionAccess jdbccon = session.getJdbcConnectionAccess(); | ||||||
|  |             Connection conn = jdbccon.obtainConnection(); | ||||||
|  |  | ||||||
|  |             Statement statement = conn.createStatement(); | ||||||
|  |  | ||||||
|  |             Calendar c = new GregorianCalendar(); | ||||||
|  |             int y = c.get(Calendar.YEAR); | ||||||
|  |             String query = "select count(reg_no) + "+count+" from Users where reg_no/10000 = " + y%1000; | ||||||
|  |  | ||||||
|  |             ResultSet set = statement.executeQuery(query); | ||||||
|  |             long resp = 0; | ||||||
|  |             if(set.next()){ | ||||||
|  |                 resp = set.getLong(1)+((y%1000)*10000); | ||||||
|  |                 count += 1; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             conn.close(); | ||||||
|  |             statement.close(); | ||||||
|  |  | ||||||
|  |             return resp; | ||||||
|  |  | ||||||
|  |         } catch (SQLException e) { | ||||||
|  |             throw new RuntimeException(e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static void resetCount(){ | ||||||
|  |         count = 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -1,20 +1,22 @@ | |||||||
| package ovh.herisson.Clyde.Tables; | package ovh.herisson.Clyde.Tables; | ||||||
|  |  | ||||||
|  | import com.fasterxml.jackson.annotation.JsonIgnore; | ||||||
| import jakarta.persistence.*; | import jakarta.persistence.*; | ||||||
| import org.hibernate.annotations.OnDelete; | import org.hibernate.annotations.OnDelete; | ||||||
| import org.hibernate.annotations.OnDeleteAction; | import org.hibernate.annotations.OnDeleteAction; | ||||||
|  | import org.hibernate.annotations.GenericGenerator; | ||||||
| import ovh.herisson.Clyde.Tables.Msg.Discussion; | import ovh.herisson.Clyde.Tables.Msg.Discussion; | ||||||
| import ovh.herisson.Clyde.Tables.Msg.Message; | import ovh.herisson.Clyde.Tables.Msg.Message; | ||||||
|  |  | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
|  |  | ||||||
| @Entity | @Entity | ||||||
| @Table(name = "Users") | @Table(name = "Users") | ||||||
| public class User { | public class User { | ||||||
|     @Id |     @Id | ||||||
|     @GeneratedValue(strategy = GenerationType.AUTO) |     @GenericGenerator(name = "userGen", type = ovh.herisson.Clyde.Tables.RegNoGenerator.class) | ||||||
|  |     @GeneratedValue(generator = "userGen") | ||||||
|     private Long regNo; |     private Long regNo; | ||||||
|     private String lastName; |     private String lastName; | ||||||
|     private String firstName; |     private String firstName; | ||||||
| @ -24,7 +26,9 @@ public class User { | |||||||
|     private String country; |     private String country; | ||||||
|     private Date birthDate; |     private Date birthDate; | ||||||
|     private String profilePictureUrl; |     private String profilePictureUrl; | ||||||
|     private ovh.herisson.Clyde.Tables.Role role; |     private Role role; | ||||||
|  |  | ||||||
|  | 	@JsonIgnore | ||||||
|     private String password; |     private String password; | ||||||
|  |  | ||||||
| 	////// Extension Messagerie ///// | 	////// Extension Messagerie ///// | ||||||
|  | |||||||
| @ -1,3 +1,12 @@ | |||||||
| spring.jpa.hibernate.ddl-auto=create-drop | spring.jpa.hibernate.ddl-auto=create-drop | ||||||
| spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect | spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect | ||||||
| spring.sql.init.mode=always | spring.sql.init.mode=always | ||||||
|  |  | ||||||
|  | # spring.datasource.url=jdbc:postgresql://localhost:5442/clyde | ||||||
|  | spring.datasource.url=jdbc:postgresql://db:5432/clyde | ||||||
|  | spring.datasource.username=devel | ||||||
|  | spring.datasource.password=devel | ||||||
|  |  | ||||||
|  | # spring.config.activate.on-profile=prod | ||||||
|  | # spring.datasource.url=jdbc:postgresql:clyde?socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=/var/run/postgresql/.s.PGSQL.5432 | ||||||
|  | # spring.datasource.username=clyde | ||||||
|  | |||||||
| @ -24,6 +24,7 @@ public class UserRepoTest { | |||||||
|  |  | ||||||
|     @BeforeEach |     @BeforeEach | ||||||
|     public void setup(){ |     public void setup(){ | ||||||
|  |         userRepo.deleteAll(); | ||||||
|         User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand", new GregorianCalendar(2005, 4, 3).getTime(), null, Role.Admin,"admin"); |         User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand", new GregorianCalendar(2005, 4, 3).getTime(), null, Role.Admin,"admin"); | ||||||
|         userRepo.save(herobrine); |         userRepo.save(herobrine); | ||||||
|     } |     } | ||||||
| @ -34,8 +35,8 @@ public class UserRepoTest { | |||||||
|     } |     } | ||||||
|     @Test |     @Test | ||||||
|     public void usertest(){ |     public void usertest(){ | ||||||
|         Assert.assertEquals("brine", userRepo.findById(1).getLastName()); |         Assert.assertEquals("brine", userRepo.findByEmail("admin@admin.com").getLastName()); | ||||||
|         Assert.assertTrue(new GregorianCalendar(2005, 4, 3).getTime().equals(userRepo.findById(1).getBirthDate())); |         Assert.assertTrue(new GregorianCalendar(2005, 4, 3).getTime().equals(userRepo.findByEmail("admin@admin.com").getBirthDate())); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										29
									
								
								compose.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								compose.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | services:  | ||||||
|  |   db: | ||||||
|  |     image: 'postgres:16' | ||||||
|  |     environment: | ||||||
|  |       - 'POSTGRES_DB=clyde' | ||||||
|  |       - 'POSTGRES_USER=devel' | ||||||
|  |       - 'POSTGRES_PASSWORD=devel' | ||||||
|  |     # Uncomment this to allow connections to the db from outside the container | ||||||
|  |     # ports:  | ||||||
|  |     #   - '5442:5432' | ||||||
|  |   back: | ||||||
|  |     build: backend/. | ||||||
|  |     ports: | ||||||
|  |       - "8080:8080" | ||||||
|  |     volumes: | ||||||
|  |       - cdn:/backend/cdn | ||||||
|  |     ulimits: | ||||||
|  |       nofile: | ||||||
|  |         soft: 65536 | ||||||
|  |         hard: 65536 | ||||||
|  |   front: | ||||||
|  |     build: frontend/. | ||||||
|  |     volumes: | ||||||
|  |       - cdn:/app/front/dist/cdn | ||||||
|  |     ports: | ||||||
|  |       - "8000:8080" | ||||||
|  |  | ||||||
|  | volumes: | ||||||
|  |   cdn: | ||||||
							
								
								
									
										11
									
								
								frontend/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								frontend/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | # https://v2.vuejs.org/v2/cookbook/dockerize-vuejs-app | ||||||
|  | FROM node:lts-alpine | ||||||
|  | RUN npm install -g http-server | ||||||
|  | WORKDIR /app/front | ||||||
|  | COPY package*.json ./ | ||||||
|  | RUN npm install | ||||||
|  | COPY . . | ||||||
|  | ENV VITE_CLYDE_MODE=container | ||||||
|  | RUN npm run build | ||||||
|  | EXPOSE 8080 | ||||||
|  | CMD [ "http-server", "dist" ] | ||||||
| @ -96,20 +96,19 @@ window.addEventListener('hashchange', () => { | |||||||
| 			height: 100%; | 			height: 100%; | ||||||
| 			width: 100%; | 			width: 100%; | ||||||
|     display:grid; |     display:grid; | ||||||
|  |  | ||||||
|     grid-template-columns:[firstCol-start]70px[firstCol-end secondCol-start] auto [endCol]; |     grid-template-columns:[firstCol-start]70px[firstCol-end secondCol-start] auto [endCol]; | ||||||
|     grid-template-rows:[firstRow-start]61px[firstRow-end secondRow-start] auto [endRow]; |     grid-template-rows:[firstRow-start] var(--header-size) [firstRow-end secondRow-start] calc(100% - var(--header-size)) [endRow]; | ||||||
|     grid-template-areas: |     grid-template-areas: | ||||||
|     "topBar topBar"  |     "topBar topBar"  | ||||||
|     "leftBar page"; |     "leftBar page"; | ||||||
|     row-gap:0px; |  | ||||||
|     column-gap:0px; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .page { |   .page { | ||||||
|     grid-area:page; |     grid-area:page; | ||||||
| 		height: 100%; | 		height: 100%; | ||||||
| 		width: 100%; | 		width: 100%; | ||||||
|     place-self:center; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .topBar{ |   .topBar{ | ||||||
| @ -152,7 +151,7 @@ window.addEventListener('hashchange', () => { | |||||||
|  |  | ||||||
| 	ul.vertical{ | 	ul.vertical{ | ||||||
| 		list-style-type: none; | 		list-style-type: none; | ||||||
| 		margin-top: 61px; | 		margin-top: var(--header-size); | ||||||
|     top:0; |     top:0; | ||||||
|     left:0; |     left:0; | ||||||
| 		padding: 25px 0 0; | 		padding: 25px 0 0; | ||||||
| @ -200,7 +199,7 @@ window.addEventListener('hashchange', () => { | |||||||
|     left:0; |     left:0; | ||||||
|      |      | ||||||
| 		position: fixed; | 		position: fixed; | ||||||
| 		height:61px; | 		height:var(--header-size); | ||||||
| 		width: 100%; | 		width: 100%; | ||||||
| 		background-color: rgb(24, 24, 24); | 		background-color: rgb(24, 24, 24); | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -1,3 +1,7 @@ | |||||||
|  | :root { | ||||||
|  | 	--header-size: 61px; | ||||||
|  | } | ||||||
|  |  | ||||||
| body { | body { | ||||||
|    background-color: rgb(53, 25, 60); |    background-color: rgb(53, 25, 60); | ||||||
|    margin:0; |    margin:0; | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| import { getCookie } from '../utils.js' | import { getCookie } from '../utils.js' | ||||||
| import { toast } from 'vue3-toastify' | import { toast } from 'vue3-toastify' | ||||||
|  |  | ||||||
| const restURL = import.meta.env.PROD ? "https://clyde.herisson.ovh/api" : "http://localhost:8080" | const restURL = import.meta.env.VITE_CLYDE_MODE === 'container' ? "http://localhost:8080": import.meta.env.DEV ? "http://localhost:8080" : "https://clyde.herisson.ovh/api" | ||||||
|  |  | ||||||
| export async function restGet(endPoint) { | export async function restGet(endPoint) { | ||||||
| 	return await _rest(endPoint, {method: "GET"}); | 	return await _rest(endPoint, {method: "GET"}); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user