Changeset 79a0317 for imaps-backend


Ignore:
Timestamp:
01/21/25 03:08:24 (3 days ago)
Author:
stefan toskovski <stefantoska84@…>
Branches:
main
Parents:
0c6b92a
Message:

F4 Finalna Verzija

Location:
imaps-backend
Files:
145 added
3 deleted
21 edited

Legend:

Unmodified
Added
Removed
  • imaps-backend/backendRender/pom.xml

    r0c6b92a r79a0317  
    1010        </parent>
    1111        <groupId>internettehnologii.imaps</groupId>
    12         <artifactId>backendRender</artifactId>
     12        <artifactId>imaps-backend</artifactId>
    1313        <version>0.0.1-SNAPSHOT</version>
    14         <packaging>war</packaging>
    15         <name>backendRender</name>
    16         <description>Backend api for rendering an indoor map</description>
     14        <packaging>jar</packaging>
     15        <name>imaps-backend</name>
     16        <description>Backend api for rendering indoor maps</description>
    1717        <url/>
    1818        <licenses>
     
    121121                </dependency>
    122122                <dependency>
     123                        <groupId>org.springframework.boot</groupId>
     124                        <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
     125                </dependency>
     126                <dependency>
     127                        <groupId>org.springframework.boot</groupId>
     128                        <artifactId>spring-boot-starter-mail</artifactId>
     129                        <version>3.4.0</version>
     130                </dependency>
     131
     132                <dependency>
    123133                        <groupId>com.googlecode.json-simple</groupId>
    124134                        <artifactId>json-simple</artifactId>
     
    146156                        <scope>test</scope>
    147157                </dependency>
    148 
    149 
    150 
     158                <dependency>
     159                        <groupId>org.springframework.boot</groupId>
     160                        <artifactId>spring-boot-starter-actuator</artifactId>
     161                </dependency>
    151162
    152163        </dependencies>
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/BackendRenderApplication.java

    r0c6b92a r79a0317  
    33import org.springframework.boot.SpringApplication;
    44import org.springframework.boot.autoconfigure.SpringBootApplication;
     5import org.springframework.context.annotation.Bean;
     6import org.springframework.mail.javamail.JavaMailSender;
     7import org.springframework.mail.javamail.JavaMailSenderImpl;
     8import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
     9import org.springframework.security.crypto.password.PasswordEncoder;
    510
    611@SpringBootApplication
     
    1116        }
    1217
     18        @Bean
     19        public PasswordEncoder passwordEncoder(){
     20                return new BCryptPasswordEncoder(12);
     21        }
     22
    1323}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/controllers/AdminController.java

    r0c6b92a r79a0317  
    44import internettehnologii.imaps.backendRender.web.service.interfaces.MapService;
    55import internettehnologii.imaps.backendRender.web.service.interfaces.PublishRequestService;
     6import internettehnologii.imaps.backendRender.web.service.interfaces.ReportService;
    67import internettehnologii.imaps.backendRender.web.util.DTO.MapDTO;
    78import internettehnologii.imaps.backendRender.web.util.DTO.PublishMapDTO;
     9import internettehnologii.imaps.backendRender.web.util.DTO.ReportDTO;
    810import internettehnologii.imaps.backendRender.web.util.Util;
    911import org.springframework.http.ResponseEntity;
     
    2325    private final MapService mapService;
    2426    private final PublishRequestService publishRequestService;
     27    private final ReportService reportService;
    2528
    26     public AdminController(MapService mapService, PublishRequestService publishRequestService) {
     29    public AdminController(MapService mapService, PublishRequestService publishRequestService, ReportService reportService) {
    2730        this.mapService = mapService;
    2831        this.publishRequestService = publishRequestService;
     32        this.reportService = reportService;
    2933    }
    3034
     
    3236    public ResponseEntity<List<MapDTO>> getPendingMapRequests() {
    3337        try {
    34             List<MapDTO> maps = Util.convertToMapDTO(mapService.findByStatus(MAP_STATUS.INVALID));
     38            List<MapDTO> maps = Util.convertToMapDTO(mapService.findByStatus(MAP_STATUS.PENDING));
    3539            return ResponseEntity.ok(maps);
    3640        } catch (Exception e) {
     
    7175    }
    7276    @PostMapping("/pr/deny")
    73     public ResponseEntity<Map<String,Object>> denyPR(@RequestParam("id") Integer id) {
     77    public ResponseEntity<Map<String,Object>> denyPR(@RequestParam("id") Integer id,@RequestParam String reason) {
    7478        try{
    75             publishRequestService.denyPublishRequest(id);
     79            publishRequestService.denyPublishRequest(id,reason);
    7680        } catch (Exception e){
    7781            e.printStackTrace();
     
    7983        return ResponseEntity.ok(new HashMap<>());
    8084    }
     85    @GetMapping("/load-reports")
     86    public ResponseEntity<List<ReportDTO>> getReports() {
     87        try {
     88            List<ReportDTO> reportDTOS = reportService.getReports()
     89                    .stream()
     90                    .map(report ->
     91                new ReportDTO(
     92                        report.getUser().getUsername(),
     93                        report.getMap().getName(),
     94                        report.getSubject(),
     95                        report.getContent(),
     96                        report.getCreatedAt().toString()
     97                        )
     98            ).toList();
     99            return ResponseEntity.ok(reportDTOS);
     100        } catch (Exception e) {
     101            e.printStackTrace();
     102            return ResponseEntity.badRequest().build();
     103        }
     104    }
    81105}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/controllers/AuthController.java

    r0c6b92a r79a0317  
    2323@RequestMapping("/api/auth")
    2424@RestController
    25 @CrossOrigin(origins = "http://localhost:5173/")
     25//@CrossOrigin(origins = "http://localhost:5173")
    2626public class AuthController {
    2727
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/controllers/MapDrawController.java

    r0c6b92a r79a0317  
    5252
    5353    @PostMapping("/publish/add")
    54     public ResponseEntity<Map<String,Object>> sendPublishRequest(@RequestBody PublishMapDTO formData, @RequestParam String username) {
     54    public ResponseEntity<MapDTO> sendPublishRequest(@RequestBody PublishMapDTO formData, @RequestParam String username) {
    5555
    5656        System.out.println("FORM DATA: -------------------------------------------- " + formData);
    57         try{
     57        try {
    5858            IMapsUser user = userService.getUser(username);
    5959
    60             publishRequestService.addPublishRequest(formData,user);
    61 
    62             return ResponseEntity.ok(new HashMap<>());
    63 
    64         } catch (Exception e){
    65             return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
    66         }
    67     }
     60            MapDTO updatedMap = publishRequestService.addPublishRequest(formData, user);
     61
     62            return ResponseEntity.ok(updatedMap);
     63
     64        } catch (Exception e) {
     65            return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
     66        }
     67    }
     68
    6869    @GetMapping("/publish/get")
    6970    public ResponseEntity<PublishMapDTO> getPublishRequestForMap(@RequestParam String mapName) {
    7071        PublishRequest pr = publishRequestService.getPublishRequestByMapName(mapName);
    71         PublishMapDTO dto = new PublishMapDTO(pr.getId(),pr.getName(), pr.getLastName(), pr.getMap().getName(), pr.getMapType(), pr.getGMapsUrl());
     72        PublishMapDTO dto = new PublishMapDTO(pr.getId(), pr.getName(), pr.getLastName(), pr.getMap().getName(), pr.getMapType(), pr.getGMapsUrl());
    7273        return ResponseEntity.ok(dto);
    7374    }
     
    7677    public ResponseEntity<List<MapDTO>> getFavouriteMapsForUser(@RequestParam String username) {
    7778
    78         try{
     79        try {
    7980            IMapsUser user = userService.getUser(username);
    8081            List<MapDTO> mapDTOS = Util.convertToMapDTO(user.getFavoriteMaps());
    8182            return ResponseEntity.ok().body(mapDTOS);
    8283
    83         } catch (Exception e){
     84        } catch (Exception e) {
    8485            System.out.println(e.getMessage());
    8586            return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
     
    9192            (@RequestBody SaveMapDTO saveMapDTO, @RequestParam String username) {
    9293
    93         System.out.println("MAP DTO: " + saveMapDTO);
    94 
    95         try {
    96 
    97             System.out.println("=================================");
    98             System.out.println("MAPDTO: " + saveMapDTO);
    99             System.out.println("USERNAME:" + username);
     94
     95        try {
    10096            IndoorMap map = mapService.getMapForUser(username, saveMapDTO.getMapName());
    10197            Floor f = floorService.getFloorByNum(saveMapDTO.getFloorNum(), map);
     
    114110            System.out.println("UPDATED FLOOR " + f.getFloorNumber());
    115111
    116             FloorDTO floorDTO = new FloorDTO(f.getFloorNumber(), saveMapDTO.getMapName(),f.getMapData().getShapeData());
     112            FloorDTO floorDTO = new FloorDTO(f.getFloorNumber(), saveMapDTO.getMapName(), f.getMapData().getShapeData());
    117113
    118114            return ResponseEntity.ok(floorDTO);
     
    126122    @PutMapping("/my-maps/create")
    127123    public ResponseEntity<MapDTO> createMap(@RequestBody CreateMapDTO mapData, @RequestParam String username) {
    128         try{
    129             mapService.createMap(mapData.getName(), mapData.getMapType() , username);
    130             IndoorMap map = mapService.getMapForUser(username,mapData.getName());
     124        try {
     125            mapService.createMap(mapData.getName(), username);
     126            IndoorMap map = mapService.getMapForUser(username, mapData.getName());
    131127            MapDTO mapDTO = new MapDTO(map.getName(),
    132                     map.getMapType()
    133                     ,map.getCreatedAt(),
     128                    map.getMapType(),
     129                    map.getCreatedAt(),
    134130                    map.getModifiedAt(),
    135131                    map.getStatus().name(),
     
    139135        } catch (Exception e) {
    140136            System.out.println(e.getMessage());
    141             e.printStackTrace();
    142137            return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
    143138        }
     
    147142    @GetMapping("/my-maps/load")
    148143    public ResponseEntity<List<FloorDTO>> loadPersonalMap(@RequestParam String mapName, @RequestParam String username) {
    149         try{
    150             IndoorMap map = mapService.getMapForUser(username,mapName);
     144        try {
     145            IndoorMap map = mapService.getMapForUser(username, mapName);
    151146            List<Floor> floors = map.getFloors();
    152147            return ResponseEntity.ok().body(Util.convertToFloorDTO(floors));
     
    158153
    159154    @PostMapping("/room-types/add")
    160     public ResponseEntity<Map<String,Object>> addRoomType(@RequestParam String roomTypeName,
    161                                                           @RequestParam String username,
    162                                                           @RequestParam String mapName) {
    163         try {
    164             IndoorMap map = mapService.getMapForUser(username,mapName);
    165             roomTypeService.addRoomType(roomTypeName,map);
     155    public ResponseEntity<Map<String, Object>> addRoomType(@RequestParam String roomTypeName,
     156                                                           @RequestParam String username,
     157                                                           @RequestParam String mapName) {
     158        try {
     159            IndoorMap map = mapService.getMapForUser(username, mapName);
     160            roomTypeService.addRoomType(roomTypeName, map);
    166161            return ResponseEntity.ok(new HashMap<>());
    167162
    168         } catch (Exception e){
     163        } catch (Exception e) {
    169164            System.out.println(e.getMessage());
    170165            return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
     
    175170    public ResponseEntity<List<RoomTypeDTO>> getRoomTypesForMap(@RequestParam String mapName, @RequestParam String username) {
    176171
    177         IndoorMap map = mapService.getMapForUser(username,mapName);
     172        IndoorMap map = mapService.getMapForUser(username, mapName);
    178173
    179174        List<RoomTypeDTO> roomTypeDTOS = map.getRoomTypes().stream().map(r -> new RoomTypeDTO(r.getName())).toList();
     
    182177
    183178    @DeleteMapping("/floors/delete")
    184     public ResponseEntity<Map<String,Object>> deleteFloor(@RequestParam String mapName,
    185                                                           @RequestParam int floorNum) {
    186         try{
    187             floorService.deleteFloor(floorNum,mapName);
     179    public ResponseEntity<Map<String, Object>> deleteFloor(@RequestParam String mapName,
     180                                                           @RequestParam int floorNum) {
     181        try {
     182            floorService.deleteFloor(floorNum, mapName);
    188183            return ResponseEntity.ok(new HashMap<>());
    189         } catch (Exception e){
     184        } catch (Exception e) {
    190185            System.out.println(e.getMessage());
    191186            return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
     
    194189
    195190    @PutMapping("/floors/add")
    196     public ResponseEntity<Map<String,Object>> addFloor(@RequestBody FloorDTO floorDTO) {
    197         Map<String,Object> response = new HashMap<>();
    198         try{
    199             floorService.addFloor(floorDTO.getNum(),floorDTO.getMapName());
     191    public ResponseEntity<Map<String, Object>> addFloor(@RequestBody FloorDTO floorDTO) {
     192        Map<String, Object> response = new HashMap<>();
     193        try {
     194            floorService.addFloor(floorDTO.getNum(), floorDTO.getMapName());
    200195            return ResponseEntity.ok(response);
    201196        } catch (Exception e) {
     
    226221
    227222
     223    @PostMapping("/my-maps/edit")
     224    public ResponseEntity<MapDTO> updateMapInfo(@RequestBody EditMapDTO editMapDTO) {
     225
     226
     227
     228        try {
     229
     230            MapDTO mapDTO = mapService.updateMapInfo(editMapDTO);
     231
     232
     233            return new ResponseEntity<>(mapDTO, HttpStatus.OK);
     234
     235        } catch (Exception e) {
     236            return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
     237        }
     238
     239    }
    228240
    229241
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/controllers/MapViewController.java

    r0c6b92a r79a0317  
    66import internettehnologii.imaps.backendRender.web.entities.IMapsUser;
    77import internettehnologii.imaps.backendRender.web.entities.IndoorMap;
     8import internettehnologii.imaps.backendRender.web.entities.Report;
    89import internettehnologii.imaps.backendRender.web.exceptions.EmptyMapException;
    9 import internettehnologii.imaps.backendRender.web.exceptions.FloorNotFoundException;
    10 import internettehnologii.imaps.backendRender.web.service.interfaces.GraphService;
    11 import internettehnologii.imaps.backendRender.web.service.interfaces.FloorService;
    12 import internettehnologii.imaps.backendRender.web.service.interfaces.MapService;
    13 import internettehnologii.imaps.backendRender.web.service.interfaces.UserService;
     10import internettehnologii.imaps.backendRender.web.service.interfaces.*;
    1411import internettehnologii.imaps.backendRender.web.util.DTO.FloorDTO;
    1512import internettehnologii.imaps.backendRender.web.util.DTO.MapDTO;
     13import internettehnologii.imaps.backendRender.web.util.DTO.ReportDTO;
    1614import internettehnologii.imaps.backendRender.web.util.DTO.RoomTypeDTO;
    1715import internettehnologii.imaps.backendRender.web.util.Util;
     
    3432    private final GraphService graphService;
    3533    private final UserService userService;
     34    private final ReportService reportService;
    3635
    3736    @Autowired
    38     public MapViewController(MapService mapService, FloorService floorService, GraphService graphService, UserService userService) {
     37    public MapViewController(MapService mapService, FloorService floorService, GraphService graphService, UserService userService, ReportService reportService) {
    3938        this.mapService = mapService;
    4039        this.floorService = floorService;
    4140        this.graphService = graphService;
    4241        this.userService = userService;
     42        this.reportService = reportService;
    4343    }
    4444
     
    120120            IndoorMap map = mapService.getMapByName(mapName);
    121121            IMapsUser user = userService.getUser(username);
    122             userService.addToFavorites(user, map);
     122            userService.addFavoriteMap(user, map);
    123123            return ResponseEntity.ok(new HashMap<>());
    124124        } catch (Exception e){
     
    132132            IndoorMap map = mapService.getMapByName(mapName);
    133133            IMapsUser user = userService.getUser(username);
    134             userService.removeFromFavorites(user, map);
     134            userService.removeFavoriteMap(user, map);
    135135            return ResponseEntity.ok(new HashMap<>());
    136136        } catch (Exception e){
     
    139139        }
    140140    }
     141    @PostMapping("/protected/reports/create")
     142    public ResponseEntity<Map<String, Object>> createReport(
     143            @RequestBody ReportDTO reportBody) {
     144        try {
     145            IMapsUser user = userService.getUser(reportBody.getUsername());
     146            IndoorMap map = mapService.getMapByName(reportBody.getMapName());
     147            Report report = new Report(user, map, reportBody.getSubject(), reportBody.getContent());
     148            reportService.saveReport(report);
    141149
     150            Map<String, Object> response = new HashMap<>();
     151            return ResponseEntity.ok(response);
     152        } catch (Exception e) {
     153            e.printStackTrace();
     154            return ResponseEntity.status(404).body(new HashMap<>());
     155        }
     156    }
    142157
    143158}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/entities/IMapsUser.java

    r0c6b92a r79a0317  
    3030    @Column(name = "profile_image_url")
    3131    private String profileImageUrl;
     32    @Column(name = "oauth_provider")
     33    private String OAuthProvider;
     34    @Column(name = "oauth_id")
     35    private String oAuthId;
     36    @Column(name = "access_token")
     37    private String accessToken;
     38    @Column(name = "refresh_token")
     39    private String refreshToken;
    3240
    3341    @ManyToMany
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/entities/IndoorMap.java

    r0c6b92a r79a0317  
    11package internettehnologii.imaps.backendRender.web.entities;
     2import internettehnologii.imaps.backendRender.web.util.DTO.MapDTO;
    23import jakarta.persistence.*;
    34import lombok.Getter;
     
    4445    private Boolean isPublished;
    4546
     47
    4648    @ManyToOne
    4749    @JoinColumn(name = "usr_id",referencedColumnName = "id", nullable = false)
     
    7072    }
    7173
     74
     75    public MapDTO toMapDTO(){
     76        return  new MapDTO(getName(),
     77                getMapType(),
     78                getCreatedAt(),
     79                getModifiedAt(),
     80                getStatus().name(),
     81                getFavouriteCount(),
     82                getGmapsUrl());
     83    }
     84
    7285}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/entities/MAP_STATUS.java

    r0c6b92a r79a0317  
    44    PUBLIC,
    55    PRIVATE,
    6     INVALID,
     6    PENDING,
    77}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/repo/FloorRepository.java

    r0c6b92a r79a0317  
    2222    @Query("SELECT COUNT(f) > 0 FROM Floor f WHERE f.floorNumber = ?1 AND f.indoorMap = ?2")
    2323    boolean existsFloorForMap(Integer floorNumber, IndoorMap indoorMap);
     24    void deleteFloorByFloorNumberAndIndoorMap(Integer floorNumber,IndoorMap indoorMap);
    2425
    25     void deleteFloorByFloorNumberAndIndoorMap(Integer floorNumber,IndoorMap indoorMap);
    2626    Optional<Floor> findFloorByFloorNumberAndIndoorMap(Integer floorNumber,IndoorMap indoorMap);
    2727}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/repo/UserRepository.java

    r0c6b92a r79a0317  
    66import org.springframework.stereotype.Repository;
    77
     8import java.util.List;
    89import java.util.Optional;
    910
     
    2526    value = "SELECT * FROM users u WHERE u.id= ?1")
    2627    Optional<IMapsUser> getUserById(Long usrid);
     28    @Query(value = "FROM IMapsUser u WHERE u.oAuthId = ?1")
     29    Optional<IMapsUser> getUserByOAuthId(String oauthid);
     30    @Query(nativeQuery = true,
     31            value = "SELECT u.* FROM users u LEFT JOIN users_roles ur on u.id = ur.user_id where ur.role_id = 3;")
     32    Optional<List<IMapsUser>> getAllAdmins();
    2733}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/security/JwtFilter.java

    r0c6b92a r79a0317  
    3737    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    3838        System.out.println(request.getRequestURI());
    39         if(request.getRequestURI().contains("/login") || request.getRequestURI().contains("/register")) {
     39        if(
     40                request.getRequestURI().contains("/login") ||
     41                        request.getRequestURI().contains("/register") ||
     42                        request.getMethod().equals("OPTIONS")
     43        ) {
    4044            filterChain.doFilter(request, response);
    4145        }
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/security/WebSecurityConfig.java

    r0c6b92a r79a0317  
    55import org.springframework.context.annotation.Bean;
    66import org.springframework.context.annotation.Configuration;
     7import org.springframework.context.annotation.Primary;
     8import org.springframework.context.annotation.Profile;
    79import org.springframework.security.authentication.AuthenticationManager;
    810import org.springframework.security.authentication.AuthenticationProvider;
     
    1517import org.springframework.security.config.http.SessionCreationPolicy;
    1618import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
     19import org.springframework.security.crypto.password.PasswordEncoder;
    1720import org.springframework.security.web.SecurityFilterChain;
    1821import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
     
    2831    private MapUserDetailsService userDetailsService;
    2932
     33    private final PasswordEncoder passwordEncoder;
     34
    3035    @Autowired
    3136    private JwtFilter jwtFilter;
     37    private final CorsConfigurationImpl corsConfiguration;
     38
     39    public WebSecurityConfig(PasswordEncoder passwordEncoder, CorsConfigurationImpl corsConfiguration) {
     40        this.passwordEncoder = passwordEncoder;
     41        this.corsConfiguration = corsConfiguration;
     42    }
    3243
    3344    @Bean
     
    3546         http
    3647                 .csrf(AbstractHttpConfigurer::disable)
    37                  .cors(Customizer.withDefaults())
     48                 .cors(cors -> cors.configurationSource(corsConfiguration.corsConfigurationSourceDev()))
    3849                 .authorizeHttpRequests(request ->
    39                          request.requestMatchers("/protected/**")
    40                          .hasRole("USER")
    41                          .requestMatchers("/api/admin/**")
    42                          .hasRole("ADMIN")
    43                          .anyRequest()
    44                          .permitAll())
     50                         request
     51                                 .requestMatchers("/protected/**").hasRole("USER")
     52                                 .requestMatchers("/api/admin/**").hasRole("ADMIN")
     53                                 .anyRequest().permitAll())
     54
    4555                 .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
    4656                 .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class);
    47          
    4857
    4958        return http.build();
     
    5160
    5261
    53     @Bean
    54     public CorsConfigurationSource corsConfigurationSource() {
    55         CorsConfiguration configuration = new CorsConfiguration();
    56         configuration.addAllowedOrigin("http://localhost:5173/");
    57         configuration.addAllowedMethod("*");
    58         configuration.addAllowedHeader("*");
    59         configuration.addAllowedHeader("*");
    60         configuration.setAllowCredentials(true);
    61 
    62         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    63         source.registerCorsConfiguration("/**", configuration);
    64 
    65         return source;
    66     }
    6762
    6863
     
    7065    public AuthenticationProvider authenticationProvider() {
    7166        DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
    72         daoAuthenticationProvider.setPasswordEncoder(new BCryptPasswordEncoder(12));
     67        daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);
    7368        daoAuthenticationProvider.setUserDetailsService(userDetailsService);
    7469        return daoAuthenticationProvider;
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/service/impl/MapServiceImpl.java

    r0c6b92a r79a0317  
    11package internettehnologii.imaps.backendRender.web.service.impl;
    22
    3 import internettehnologii.imaps.backendRender.web.entities.*;
     3import internettehnologii.imaps.backendRender.web.entities.Floor;
     4import internettehnologii.imaps.backendRender.web.entities.IMapsUser;
     5import internettehnologii.imaps.backendRender.web.entities.IndoorMap;
     6import internettehnologii.imaps.backendRender.web.entities.MAP_STATUS;
    47import internettehnologii.imaps.backendRender.web.exceptions.MapNameTakenException;
    58import internettehnologii.imaps.backendRender.web.exceptions.MapNotFoundException;
     
    811import internettehnologii.imaps.backendRender.web.repo.UserRepository;
    912import internettehnologii.imaps.backendRender.web.service.interfaces.MapService;
     13import internettehnologii.imaps.backendRender.web.util.DTO.EditMapDTO;
     14import internettehnologii.imaps.backendRender.web.util.DTO.MapDTO;
     15import jakarta.transaction.Transactional;
    1016import org.springframework.beans.factory.annotation.Autowired;
    1117import org.springframework.security.core.userdetails.UsernameNotFoundException;
     
    3137
    3238    @Override
    33     public void createMap(String mapName,String mapType, String username) {
     39    public void createMap(String mapName, String username) {
    3440
    3541        Optional<IMapsUser> user = userRepository.findUserByName(username);
     
    3844            throw new MapNameTakenException("Map with name " + mapName + " already exists");
    3945
    40         if(user.isEmpty()){
     46        if (user.isEmpty()) {
    4147            throw new UsernameNotFoundException("User " + username + " not found");
    4248        }
     
    5864    public void updateMap(IndoorMap indoorMap) {
    5965        mapRepository.save(indoorMap);
     66    }
     67
     68    @Transactional
     69    @Override
     70    public MapDTO updateMapInfo(EditMapDTO editMapDTO) {
     71        IndoorMap indoorMap = mapRepository.getIndoorMapByName(editMapDTO.getInitialName()).orElseThrow(() -> new MapNotFoundException("Map with name " + editMapDTO.getInitialName() + " not found"));
     72        if (mapRepository.existsByName(editMapDTO.getName()) && !Objects.equals(editMapDTO.getInitialName(), editMapDTO.getName())) {
     73            throw new MapNameTakenException("Map with name " + editMapDTO.getName() + " already exists");
     74        }
     75
     76        indoorMap.setName(editMapDTO.getName());
     77        indoorMap.setGmapsUrl(editMapDTO.getGmapsUrl());
     78//        indoorMap.setMapType(editMapDTO.getType()); //TODO
     79        mapRepository.save(indoorMap);
     80        return indoorMap.toMapDTO();
    6081    }
    6182
     
    85106        boolean isAdmin = user.getRoles().stream().anyMatch(role -> Objects.equals(role.getName(), "ADMIN"));
    86107
    87         if(isAdmin){
     108        if (isAdmin) {
    88109            return map;
    89110        }
     
    99120    @Override
    100121    public IndoorMap getMapByName(String mapName) {
    101        return mapRepository.getIndoorMapByName(mapName).orElseThrow(() -> new MapNotFoundException(mapName));
     122        return mapRepository.getIndoorMapByName(mapName).orElseThrow(() -> new MapNotFoundException(mapName));
    102123    }
    103124
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/service/impl/PublishRequestServiceImpl.java

    r0c6b92a r79a0317  
    77import internettehnologii.imaps.backendRender.web.repo.MapRepository;
    88import internettehnologii.imaps.backendRender.web.repo.PublishRequestRepository;
     9import internettehnologii.imaps.backendRender.web.repo.UserRepository;
    910import internettehnologii.imaps.backendRender.web.service.interfaces.MapService;
    1011import internettehnologii.imaps.backendRender.web.service.interfaces.PublishRequestService;
    1112import internettehnologii.imaps.backendRender.web.service.interfaces.UserService;
     13import internettehnologii.imaps.backendRender.web.util.DTO.MapDTO;
    1214import internettehnologii.imaps.backendRender.web.util.DTO.PublishMapDTO;
     15import jakarta.transaction.Transactional;
     16import org.springframework.mail.SimpleMailMessage;
     17import org.springframework.mail.javamail.JavaMailSender;
    1318import org.springframework.stereotype.Service;
    1419
     
    2227    private final MapService mapService;
    2328    private final UserService userService;
     29    //private final JavaMailSender mailSender;
     30    private final UserRepository userRepository;
    2431
    25     public PublishRequestServiceImpl(PublishRequestRepository publishRequestRepository, MapRepository mapRepository, MapService mapService, UserService userService) {
     32    public PublishRequestServiceImpl(PublishRequestRepository publishRequestRepository, MapRepository mapRepository, MapService mapService, UserService userService, UserRepository userRepository) {
    2633        this.publishRequestRepository = publishRequestRepository;
    2734        this.mapRepository = mapRepository;
    2835        this.mapService = mapService;
    2936        this.userService = userService;
     37        this.userRepository = userRepository;
    3038    }
    3139
    3240    @Override
    33     public void addPublishRequest(PublishMapDTO formData, IMapsUser user) {
     41    @Transactional
     42    public MapDTO addPublishRequest(PublishMapDTO formData, IMapsUser user) {
    3443        Optional<PublishRequest> prOptional = publishRequestRepository.findById(formData.getId());
    3544        PublishRequest pr;
     
    4150            pr.setGMapsUrl(formData.getGoogleMapsUrl());
    4251            pr.setMapType(formData.getMapType());
    43             map.setStatus(MAP_STATUS.INVALID);
     52            map.setStatus(MAP_STATUS.PENDING);
    4453        } else {
    4554            pr = new PublishRequest(formData.getName(), formData.getLastName(), formData.getGoogleMapsUrl(), formData.getMapType());
    46 
    4755            pr.setMap(map);
    4856            pr.setUser(user);
    49             map.setStatus(MAP_STATUS.INVALID);
     57            map.setStatus(MAP_STATUS.PENDING);
    5058
    5159        }
    5260        this.mapRepository.save(map);
    5361        this.publishRequestRepository.save(pr);
     62        sendMailToAdmins(user,pr);
     63        return map.toMapDTO();
    5464
    5565    }
    5666
    5767    @Override
    58     public void denyPublishRequest(int id) throws Exception {
     68    public void denyPublishRequest(int id,String reason) throws Exception {
    5969        PublishRequest pr = this.publishRequestRepository.findById(id).orElseThrow(Exception::new);
    6070
     
    6676        this.publishRequestRepository.save(pr);
    6777        this.mapRepository.save(map);
     78
     79//        SimpleMailMessage message = new SimpleMailMessage();
     80//
     81//        message.setTo(pr.getMap().getUser().getEmail());
     82//        message.setSubject("Denied Publish Request");
     83//        message.setText(String.format("Your publish request for map: %s has been denied." +
     84//                "\nReason:\n%s",pr.getMap().getName(),reason));
     85//        mailSender.send(message);
    6886    }
    6987
     
    7795
    7896    }
     97    @Override
     98    public void sendMailToAdmins(IMapsUser user, PublishRequest pr){
     99//        System.out.println("test");
     100//        SimpleMailMessage message = new SimpleMailMessage();
     101//        Optional<List<IMapsUser>> adminsOpt = userRepository.getAllAdmins();
     102//        adminsOpt.ifPresent(admins -> {
     103//            admins.forEach(admin -> {
     104//                message.setTo(admin.getEmail());
     105//                message.setSubject("New Publish Request");
     106//                String body = String.format(
     107//                        """
     108//                                Publish Request Details:
     109//                                \tRequest Id: %s
     110//                                \tMap Id: %s
     111//                                \tMap Name: %s
     112//
     113//                                User Details:
     114//                                \tId: %s
     115//                                \tUsername: %s
     116//                                \tEmail: %s
     117//                                \tFirst Name: %s
     118//                                \t Last Name: %s
     119//                                """,
     120//                        pr.getId(), pr.getMap().getId(),
     121//                        pr.getMap().getName(),
     122//                        user.getId(),user.getUsername(),user.getEmail(),
     123//                        pr.getName(),pr.getLastName());
     124//
     125//                message.setText(body);
     126//                mailSender.send(message);
     127//            });
     128//        });
    79129
    80     // todo mail pustanje
     130    }
     131
    81132
    82133    @Override
     
    93144        this.publishRequestRepository.save(pr);
    94145        this.mapRepository.save(map);
     146
     147//        SimpleMailMessage message = new SimpleMailMessage();
     148//        message.setTo(pr.getMap().getUser().getEmail());
     149//        message.setSubject("Approved Publish Request");
     150//        message.setText(String.format("Your publish request for map: %s has been approved!\nYour map is now public. That means that anyone can view and use your map.\nThank you for building!",pr.getMap().getName()));
     151//        mailSender.send(message);
     152
    95153    }
    96154
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/service/impl/UserServiceImpl.java

    r0c6b92a r79a0317  
    2121import org.springframework.security.core.userdetails.UserDetails;
    2222import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
     23import org.springframework.security.crypto.password.PasswordEncoder;
    2324import org.springframework.stereotype.Service;
    2425
     
    3132    private final UserRepository userRepository;
    3233
    33     private final BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(12);
     34    @Autowired
     35    private PasswordEncoder passwordEncoder;
     36
    3437    @Autowired
    3538    private JWTService jwtService;
     
    5659        });
    5760
    58         user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
     61        user.setPassword(passwordEncoder.encode(user.getPassword()));
    5962
    6063        Role userRole = roleRepository.findByName("USER").orElseThrow(RoleNotFoundException::new);
     
    8487
    8588    @Override
    86     public void addToFavorites(IMapsUser user, IndoorMap map) {
     89    public void addFavoriteMap(IMapsUser user, IndoorMap map) {
    8790        user.getFavoriteMaps().add(map);
    8891        userRepository.save(user);
     
    9093
    9194    @Override
    92     public void removeFromFavorites(IMapsUser user, IndoorMap map) {
     95    public void removeFavoriteMap(IMapsUser user, IndoorMap map) {
    9396        boolean removed = user.getFavoriteMaps().remove(map);
    9497        if(!removed) throw new MapNotFoundException("Map not found. " + map.getName());
     
    104107
    105108
    106 
    107109}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/service/interfaces/MapService.java

    r0c6b92a r79a0317  
    44import internettehnologii.imaps.backendRender.web.entities.MAP_STATUS;
    55import internettehnologii.imaps.backendRender.web.entities.RoomType;
     6import internettehnologii.imaps.backendRender.web.util.DTO.EditMapDTO;
     7import internettehnologii.imaps.backendRender.web.util.DTO.MapDTO;
    68
    79import java.util.List;
    810
    911public interface MapService {
    10     void createMap(String mapName, String mapType, String username);
     12    void createMap(String mapName, String username);
    1113    void updateMap(IndoorMap indoorMap);
     14    MapDTO updateMapInfo(EditMapDTO editMapDTO);
    1215    void deleteMap(IndoorMap indoorMap);
    1316    List<IndoorMap> getAllMapsForUser(String username);
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/service/interfaces/PublishRequestService.java

    r0c6b92a r79a0317  
    33import internettehnologii.imaps.backendRender.web.entities.IMapsUser;
    44import internettehnologii.imaps.backendRender.web.entities.PublishRequest;
     5import internettehnologii.imaps.backendRender.web.util.DTO.MapDTO;
    56import internettehnologii.imaps.backendRender.web.util.DTO.PublishMapDTO;
    67
     
    89
    910public interface PublishRequestService {
    10     void addPublishRequest(PublishMapDTO publishRequestDTO, IMapsUser user);
    11     void denyPublishRequest(int id) throws Exception;
     11    MapDTO addPublishRequest(PublishMapDTO publishRequestDTO, IMapsUser user);
     12    void denyPublishRequest(int id,String reason) throws Exception;
    1213    List<PublishRequest> getAllPublishRequests();
    1314    void save(PublishRequest publishRequest);
     
    1617    PublishRequest getPublishRequestByMapName(String mapName);
    1718    void editPublishRequest(PublishRequest publishRequest);
     19    void sendMailToAdmins(IMapsUser user,PublishRequest pr);
    1820}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/service/interfaces/UserService.java

    r0c6b92a r79a0317  
    77
    88import javax.management.relation.RoleNotFoundException;
    9 import javax.naming.AuthenticationException;
    109
    1110public interface UserService {
    1211    IMapsUser register(IMapsUser user) throws RoleNotFoundException;
    1312    UserAuthSuccessDTO login(UserLoginDTO user) throws Exception;
    14     void addToFavorites(IMapsUser user, IndoorMap map);
    15     void removeFromFavorites(IMapsUser user, IndoorMap map);
     13    void addFavoriteMap(IMapsUser user, IndoorMap map);
     14    void removeFavoriteMap(IMapsUser user, IndoorMap map);
    1615    IMapsUser getUser(String username);
    1716}
  • imaps-backend/backendRender/src/main/java/internettehnologii/imaps/backendRender/web/util/DTO/CreateMapDTO.java

    r0c6b92a r79a0317  
    1010public class CreateMapDTO {
    1111    private String name;
    12     private String mapType;
     12    public CreateMapDTO() {}
    1313}
  • imaps-backend/backendRender/src/main/resources/application.properties

    r0c6b92a r79a0317  
    1 spring.application.name=backendRender
    2 spring.datasource.url=jdbc:postgresql://localhost:5432/imaps_prod
     1spring.application.name=imaps-backend
    32spring.datasource.username=${DB_USER}
    43spring.datasource.password=${DB_PASS}
     
    87spring.jpa.properties.hibernate.format_sql=true
    98
     9
     10
     11spring.mail.host=smtp.gmail.com
     12spring.mail.port=587
     13spring.mail.username=${MAIL_NAME}
     14spring.mail.password=${MAIL_PASS}
     15spring.mail.properties.mail.smtp.auth=true
     16spring.mail.properties.mail.smtp.starttls.enable=true
     17
     18spring.profiles.active=dev
    1019logging.level.org.springframework.web=DEBUG
    1120
Note: See TracChangeset for help on using the changeset viewer.