Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 31 additions & 21 deletions cadastral/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +1,31 @@
#FROM openjdk:17-alpine
#MAINTAINER com.mateusbalda
#VOLUME /tmp
#EXPOSE 8081
#
#COPY CrudService/target/*.jar /crud-service.jar
#
#ENTRYPOINT ["java","-jar","-Dspring.profiles.active=docker-demo", "/crud-service.jar"]

## In this way the file, creates the image along with maven
FROM maven:3.6-openjdk-17-slim AS MAVEN_BUILD
COPY CrudService/pom.xml /build/
COPY CrudService/src /build/src/
WORKDIR /build/
RUN mvn package -DskipTests

FROM openjdk:17-alpine
MAINTAINER com.mateusbalda
EXPOSE 8081
COPY --from=MAVEN_BUILD /build/target/*.jar imobiliaria.jar
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=docker-demo","/imobiliaria.jar"]
# ---------- stage 1: build ----------
FROM maven:3.9.6-eclipse-temurin-21 AS build

WORKDIR /app

# Copiar apenas o pom para aproveitar o cache do Maven
COPY pom.xml .
RUN mvn -q -DskipTests dependency:go-offline

# Copiar código restante
COPY . .

# Gerar o JAR (sem testes para agilizar)
RUN mvn -q clean package -DskipTests


# ---------- stage 2: runtime ----------
FROM eclipse-temurin:21-jre AS runtime

WORKDIR /app

# Copia o JAR final
COPY --from=build /app/target/*.jar app.jar

# Heroku usa PORT, mas exponho 8080 por consistência
EXPOSE 8080

# Importante: garantir que a aplicação leia PORT corretamente
ENV SERVER_PORT=${PORT}

CMD ["sh", "-c", "java -Dserver.port=$PORT -jar app.jar"]
15 changes: 11 additions & 4 deletions cadastral/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,10 @@
<artifactId>dotenv-java</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-config</artifactId>-->
<!-- </dependency>-->

<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-api -->
<dependency>
Expand All @@ -126,6 +126,13 @@
<version>1.5.5.Final</version>
</dependency>

<dependency>
<groupId>com.cloudinary</groupId>
<artifactId>cloudinary-http44</artifactId>
<version>1.29.0</version>
</dependency>



</dependencies>
<dependencyManagement>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.unipampa.crud.config;

import com.cloudinary.Cloudinary;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CloudinaryConfig {

@Value("${CLOUDINARY_URL}")
private String cloudinaryUrl;

@Bean
public Cloudinary cloudinary() {
return new Cloudinary(cloudinaryUrl);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.unipampa.crud.enums.UserType;
import io.github.cdimascio.dotenv.Dotenv;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
Expand All @@ -16,6 +17,8 @@ public class MongoScriptInitializer implements CommandLineRunner {

private final PasswordEncoder passwordEncoder;
private final Dotenv dotenv = Dotenv.load();
@Value("${spring.data.mongodb.uri}")
private String mongoUri;

public MongoScriptInitializer(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
Expand All @@ -26,8 +29,8 @@ public MongoScriptInitializer(PasswordEncoder passwordEncoder) {
public void run(String... args) throws Exception {
System.out.println("Verificando se os dados já existem no banco...");

try (var client = MongoClients.create("mongodb://localhost:27017")) {
var database = client.getDatabase("cadastral");
try (var client = MongoClients.create(mongoUri)) {
var database = client.getDatabase("imovato");
var roleCollection = database.getCollection("role");
var userCollection = database.getCollection("user");

Expand Down Expand Up @@ -62,26 +65,31 @@ public void run(String... args) throws Exception {

userCollection.insertMany(List.of(
new Document("_id", "admin-1")
.append("userName", dotenv.get("ADMIN1_USERNAME"))
.append("password", passwordEncoder.encode(dotenv.get("ADMIN1_PASSWORD")))
.append("userName", System.getenv("ADMIN1_USERNAME"))
.append("password", passwordEncoder.encode(System.getenv("ADMIN1_PASSWORD")))
.append("email", System.getenv("ADMIN1_EMAIL"))
.append("roles", List.of(roleAdmin)),

new Document("_id", "admin-2")
.append("userName", dotenv.get("ADMIN2_USERNAME"))
.append("password", passwordEncoder.encode(dotenv.get("ADMIN2_PASSWORD")))
.append("userName", System.getenv("ADMIN2_USERNAME"))
.append("password", passwordEncoder.encode(System.getenv("ADMIN2_PASSWORD")))
.append("email", System.getenv("ADMIN2_EMAIL"))
.append("roles", List.of(roleAdmin)),

new Document("_id", "admin-3")
.append("userName", dotenv.get("ADMIN3_USERNAME"))
.append("password", passwordEncoder.encode(dotenv.get("ADMIN3_PASSWORD")))
.append("userName", System.getenv("ADMIN3_USERNAME"))
.append("password", passwordEncoder.encode(System.getenv("ADMIN3_PASSWORD")))
.append("email", System.getenv("ADMIN3_EMAIL"))
.append("roles", List.of(roleAdmin)),

new Document("_id", "admin-4")
.append("userName", dotenv.get("ADMIN4_USERNAME"))
.append("password", passwordEncoder.encode(dotenv.get("ADMIN4_PASSWORD")))
.append("userName", System.getenv("ADMIN4_USERNAME"))
.append("password", passwordEncoder.encode(System.getenv("ADMIN4_PASSWORD")))
.append("email", System.getenv("ADMIN4_EMAIL"))
.append("roles", List.of(roleAdmin))
));


System.out.println("Usuários criados com sucesso!");
} else {
System.out.println("Usuários já existem no banco. Inicialização de usuários não necessária.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public class UserDetailsServiceImpl implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
try {
var user = userRepository.findByUserName(username);
// O parâmetro 'username' agora contém o email
var user = userRepository.findUserByEmail(username);
var opt = user.orElseThrow(() -> new UsernameNotFoundException(USER_NOT_FOUND + username));
return UserDatailsImpl.build(opt);
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,8 @@
import java.util.List;

public record AccommodationDTO(
@Schema(example = "6804eaef24e9aa24141421a1")
String id,

@NotBlank
@Schema(example = "Apartamento moderno no centro")
@Schema(example = "Apartamento moderno no centro 2")
String title,

@Schema(example = "Centro Histórico")
Expand All @@ -27,7 +24,7 @@ public record AccommodationDTO(
String city,

@NotBlank
@Schema(example = "Apartamento bem iluminado, com 2 quartos e cozinha equipada.")
@Schema(example = "Apartamento bem iluminado, com 3 quartos e cozinha equipada.")
String description,

@Schema(example = "Rua dos Andradas")
Expand Down Expand Up @@ -56,6 +53,22 @@ public record AccommodationDTO(
@Schema(example = "4")
Integer maxOccupancy,

@Schema(example = "[\"https://img.com/1.jpg\", \"https://img.com/2.jpg\"]")
@NotNull
@Schema(example = "2")
Integer roomCount,

@NotNull
@Schema(example = "1")
Integer bathroomCount,

@NotNull
@Schema(example = "true")
Boolean allowsPets,

@NotNull
@Schema(example = "true")
Boolean isSharedHosting,

@Schema(example = "[]")
List<String> imagesUrls
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.unipampa.crud.dto;

import com.unipampa.crud.enums.AccommodationType;
import io.swagger.v3.oas.annotations.media.Schema;
import java.math.BigDecimal;

public record AccommodationFilterDTO(
@Schema(example = "Porto Alegre", description = "Cidade da acomodação")
String city,

@Schema(example = "RS", description = "Estado/UF da acomodação")
String state,

@Schema(example = "Centro Histórico", description = "Bairro da acomodação")
String neighborhood,

@Schema(example = "500.00", description = "Preço mínimo da acomodação")
BigDecimal priceMin,

@Schema(example = "5000.00", description = "Preço máximo da acomodação")
BigDecimal priceMax,

@Schema(example = "APARTMENT", description = "Tipo de acomodação")
AccommodationType accommodationType,

@Schema(example = "4", description = "Ocupância máxima mínima")
Integer maxOccupancyMin,

@Schema(example = "true", description = "Permite animais de estimação")
Boolean allowsPets,

@Schema(example = "true", description = "Permite crianças")
Boolean allowsChildren,

@Schema(example = "true", description = "É um alojamento compartilhado")
Boolean isSharedHosting
) {}

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.unipampa.crud.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.unipampa.crud.enums.AccommodationType;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
Expand All @@ -10,7 +11,7 @@

public record AccommodationRequestDTO(
@NotBlank
@Schema(example = "Apartamento moderno no centro")
@Schema(example = "Apartamento moderno no centro 2")
String title,

@Schema(example = "Centro Histórico")
Expand All @@ -24,7 +25,7 @@ public record AccommodationRequestDTO(
String city,

@NotBlank
@Schema(example = "Apartamento bem iluminado, com 2 quartos e cozinha equipada.")
@Schema(example = "Apartamento bem iluminado, com 3 quartos e cozinha equipada.")
String description,

@Schema(example = "Rua dos Andradas")
Expand All @@ -46,16 +47,31 @@ public record AccommodationRequestDTO(
Integer imageQuantity,

@NotNull
@JsonProperty("accommodationType")
@Schema(example = "APARTMENT")
AccommodationType accommodationType,

@NotNull
@Schema(example = "4")
Integer maxOccupancy,

@Schema(example = "[\"https://img.com/1.jpg\", \"https://img.com/2.jpg\"]")
List<String> imagesUrls,
@NotNull
@Schema(example = "2")
Integer roomCount,

@NotNull
@Schema(example = "1")
Integer bathroomCount,

@NotNull
@Schema(example = "true")
Boolean allowsPets,

@NotNull
@Schema(example = "true")
Boolean isSharedHosting,

@Schema(example = "[]")
List<String> imagesUrls

@NotBlank
String hostId
) {}
4 changes: 3 additions & 1 deletion cadastral/src/main/java/com/unipampa/crud/dto/LoginDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@

public record LoginDTO(

@NotBlank
String username,

@NotBlank
String email,

@NotBlank
String password

Expand Down
21 changes: 11 additions & 10 deletions cadastral/src/main/java/com/unipampa/crud/dto/UserDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@
import jakarta.validation.constraints.NotBlank;

public record UserDTO(
@NotBlank String email,
@NotBlank String name,
@NotBlank String userName,
@NotBlank String cpf,
@NotBlank String phone,
@NotBlank String address,
@NotBlank String password,
@NotBlank String role,
@NotBlank UserType type
) {}
@NotBlank String email,
@NotBlank String name,
@NotBlank String userName,
@NotBlank String cpf,
@NotBlank String password,
@NotBlank String role,
@NotBlank UserType type,
String phone,
String address
) {
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.unipampa.crud.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import io.swagger.v3.oas.annotations.media.Schema;

public enum AccommodationType {
Expand All @@ -9,4 +10,12 @@ public enum AccommodationType {

@Schema(description = "Casa")
HOUSE;

@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static AccommodationType forValue(String value) {
if (value == null || value.trim().isEmpty()) {
return null;
}
return AccommodationType.valueOf(value.toUpperCase().trim());
}
}
Loading